Работа с файлами перевода¶
28.02.2022
После подготовки компонента к переводу используйте команду extract-i18n
Angular CLI для извлечения помеченного текста компонента в файл исходного языка.
Размеченный текст включает текст, помеченный i18n
, атрибуты, помеченные i18n-
attribute, и текст, помеченный $localize
, как описано в Подготовка компонента к переводу.
Выполните следующие шаги, чтобы создать и обновить файлы перевода для вашего проекта.
-
Извлечение файла исходного языка.
- По желанию измените местоположение, формат и имя.
-
Скопируйте исходный языковой файл в создать файл перевода для каждого языка.
-
Переведите каждый файл перевода
-
Переведите множественное число и альтернативные выражения отдельно.
Извлечение файла исходного языка¶
Чтобы извлечь исходный языковой файл, выполните следующие действия.
-
Откройте окно терминала.
-
Перейдите в корневой каталог вашего проекта.
-
Выполните следующую команду CLI.
1
ng extract-i18n
Команда extract-i18n
создает файл исходного языка с именем messages.xlf
в корневом каталоге вашего проекта. Подробнее о XML Localization Interchange File Format (XLIFF, версия 1.2) смотрите в XLIFF.
Используйте следующие опции команды extract-i18n
, чтобы изменить местоположение, формат и имя файла исходного языка.
Опция команды | Подробности |
---|---|
--format | Установить формат выходного файла |
--out-file | Установите имя выходного файла |
--output-path | Установите путь к выходному каталогу |
Изменить расположение файла исходного языка¶
Чтобы создать файл в каталоге src/locale
, укажите путь вывода в качестве опции.
extract-i18n --output-path
пример¶
В следующем примере путь вывода указан в качестве опции.
1 |
|
Изменение формата файла исходного языка¶
Команда extract-i18n
создает файлы в следующих форматах перевода.
Формат перевода | Подробности | Расширение файла |
---|---|---|
ARB | Application Resource Bundle | .arb |
JSON | JavaScript Object Notation | .json |
XLIFF 1.2 | XML Localization Interchange File Format, version 1.2 | .xlf |
XLIFF 2 | XML Localization Interchange File Format, версия 2 | .xlf |
XMB | XML Message Bundle | .xmb (.xtb ) |
Укажите формат перевода в явном виде с помощью опции команды --format
.
Формат XMB генерирует файлы исходного языка .xmb
, но использует файлы перевода .xtb
.
extract-i18n --format
пример¶
Следующий пример демонстрирует несколько форматов перевода.
1 2 3 4 5 |
|
Изменить имя файла исходного языка¶
Чтобы изменить имя файла исходного языка, создаваемого инструментом извлечения, используйте опцию команды --out-file
.
extract-i18n --out-file
пример¶
Следующий пример демонстрирует присвоение имени выходному файлу.
1 |
|
Создание файла перевода для каждого языка¶
Чтобы создать файл перевода для локали или языка, выполните следующие действия.
-
Сделайте копию исходного языкового файла, чтобы создать переводной файл для каждого языка.
-
Переименуйте файл translation, чтобы добавить локаль.
1
messages.xlf --> messages.{locale}.xlf
-
Создайте новый каталог в корне проекта с именем
locale
.1
src/locale
-
Переместите файл translation в новый каталог.
-
Отправьте файл translation своему переводчику.
-
Повторите описанные выше шаги для каждого языка, который вы хотите добавить в свое приложение.
extract-i18n
пример для французского языка¶
Например, чтобы создать файл перевода на французский язык, выполните следующие действия.
-
Выполните команду
extract-i18n
. -
Создайте копию исходного языкового файла
messages.xlf
. -
Переименуйте копию в
messages.fr.xlf
для перевода на французский язык (fr
). -
Переместите файл перевода
fr
в каталогsrc/locale
. -
Отправьте файл перевода
fr
переводчику.
Переведите каждый файл перевода.¶
Если вы не владеете языком и у вас нет времени на редактирование переводов, вы, скорее всего, выполните следующие шаги.
-
Отправьте каждый файл перевода переводчику.
-
Переводчик использует редактор файлов XLIFF для выполнения следующих действий.
-
Создайте перевод.
-
Отредактируйте перевод.
-
Пример процесса перевода для французского языка¶
Чтобы продемонстрировать этот процесс, просмотрите файл messages.fr.xlf
в Example Angular Internationalization application. В Пример приложения Angular Internationalization включен перевод на французский язык, который можно редактировать без специального редактора XLIFF или знания французского языка.
Следующие действия описывают процесс перевода на французский язык.
-
Откройте файл
messages.fr.xlf
и найдите первый элемент<trans-unit>
. Это переводной блок, также известный как текстовый узел, который представляет собой перевод тега приветствия<h1>
, который ранее был помечен атрибутомi18n
.1 2 3 4 5 6 7 8 9
<trans-unit id="introductionHeader" datatype="html"> <source>Hello i18n!</source> <note priority="1" from="description"> An introduction header for this sample </note> <note priority="1" from="meaning"> User welcome </note> </trans-unit>
id="introductionHeader"
— это пользовательский ID, но без префикса@@
, необходимого в исходном HTML. -
Продублируйте элемент
<source>... </source>
элемент в узле text, переименуйте его вtarget
, а затем замените содержимое французским текстом.1 2 3 4 5 6 7 8 9 10
<trans-unit id="introductionHeader" datatype="html"> <source>Hello i18n!</source> <target>Bonjour i18n !</target> <note priority="1" from="description"> An introduction header for this sample </note> <note priority="1" from="meaning"> User welcome </note> </trans-unit>
При более сложном переводе информация и контекст в элементах описания и значения помогают выбрать правильные слова для перевода.
-
Переведите остальные текстовые узлы.
В следующем примере показан способ перевода.
1 2 3 4 5 6 7 8 9 10 11 12 13 14
<trans-unit id="ba0cc104d3d69bf669f97b8d96a4c5d8d9559aa3" datatype="html" > <source>I don't output any element</source> <target>Je n'affiche aucun élément</target> </trans-unit> <trans-unit id="701174153757adf13e7c24a248c8a873ac9f5193" datatype="html" > <source>Angular logo</source> <target>Logo d'Angular</target> </trans-unit>
Не изменяйте идентификаторы для единиц перевода.
Каждый атрибут
id
генерируется Angular и зависит от содержания текста компонента и назначенного значения.Если вы измените либо текст, либо значение, то изменится и атрибут
id
.Подробнее об управлении обновлениями текста и идентификаторами см. в разделе custom IDs.
Переведите множественное число¶
Добавьте или удалите падежи множественного числа, если это необходимо для каждого языка.
Правила множественного числа языка см. в CLDR plural rules.
minute plural
пример¶
Чтобы перевести множественное число
, переведите значения соответствия формата ICU.
just now
one minute ago
<x id="INTERPOLATION" equiv-text="{{minutes}}"/> minutes ago
В следующем примере показан способ перевода.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
Перевод альтернативных выражений¶
Angular также извлекает альтернативные выражения select
ICU в виде отдельных единиц перевода.
Пример gender
select
¶
Следующий пример отображает ICU-выражение select
в шаблоне компонента.
1 2 3 4 |
|
В этом примере Angular разделяет выражение на две единицы перевода. Первая содержит текст вне клаузы select
и использует место для select
(<x id="ICU">
):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
Когда вы переводите текст, при необходимости переместите заполнитель, но не удаляйте его. Если вы удалите заполнитель, выражение ICU будет удалено из переведенного приложения.
В следующем примере отображается вторая единица перевода, содержащая предложение select
.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
В следующем примере после завершения перевода отображаются обе единицы перевода.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
|
Перевод вложенных выражений¶
Angular обрабатывает вложенное выражение таким же образом, как и альтернативное выражение. Angular разделяет выражение на две единицы перевода.
Пример вложенного выражения plural
¶
В следующем примере отображается первая единица перевода, содержащая текст вне вложенного выражения.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
В следующем примере отображается вторая единица перевода, содержащая полное вложенное выражение.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
В следующем примере после перевода отображаются обе единицы перевода.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
|