Подготовка компонента к переводу¶
28.02.2022
Чтобы подготовить проект к переводу, выполните следующие действия.
- Используйте атрибут
i18nдля маркировки текста в шаблонах компонентов - Используйте атрибут
i18n-для маркировки текстовых строк атрибутов в шаблонах компонентов - Используйте строку сообщения с меткой
$localizeдля пометки текстовых строк в коде компонента
Пометить текст в шаблоне компонента¶
В шаблоне компонента метаданные i18n являются значением атрибута i18n.
1 2 3 | |
Используйте атрибут i18n, чтобы пометить статический текст в шаблонах ваших компонентов для перевода. Поместите его на каждый тег элемента, который содержит фиксированный текст, который вы хотите перевести.
Атрибут i18n — это пользовательский атрибут, который распознается инструментами и компиляторами Angular.
i18n пример¶
Следующий тег <h1> отображает простое приветствие на английском языке "Hello i18n!".
1 | |
Чтобы пометить приветствие для перевода, добавьте атрибут i18n к тегу <h1>.
1 | |
Перевод встроенного текста без элемента HTML¶
Используйте элемент <ng-container>, чтобы связать поведение перевода для определенного текста, не изменяя способ отображения текста.
Каждый элемент HTML создает новый элемент DOM. Чтобы избежать создания нового элемента DOM, оберните текст в элемент <ng-container>. В следующем примере элемент <ng-container> преобразован в неотображаемый HTML-комментарий.
1 | |
Пометить атрибуты элементов для перевода¶
В шаблоне компонента метаданные i18n являются значением атрибута i18n-{attribute_name}.
1 2 3 4 | |
Атрибуты элементов HTML включают текст, который должен быть переведен вместе с остальным отображаемым текстом в шаблоне компонента.
Используйте i18n-{attribute_name} с любым атрибутом любого элемента и замените {attribute_name} на имя атрибута. Используйте следующий синтаксис для присвоения значения, описания и пользовательского идентификатора.
1 | |
i18n-title пример¶
Чтобы перевести название изображения, рассмотрите этот пример. В следующем примере отображается изображение с атрибутом title.
1 | |
Чтобы пометить атрибут title для перевода, выполните следующие действия.
-
Добавьте атрибут
i18n-title.В следующем примере показано, как пометить атрибут
titleв тегеimgпутем добавленияi18n-title.1 2 3 4 5 6
<img [src]="logo" i18n-title title="Angular logo" alt="Angular logo" />
Mark text in component code¶
В коде компонента исходный текст перевода и метаданные окружены символами обратного знака (`).
Используйте строку сообщения с меткой $localize, чтобы пометить строку в коде для перевода.
1 | |
Метаданные i18n окружены символами двоеточия (:) и дополняют исходный текст перевода.
1 | |
Включить интерполированный текст¶
Включение интерполяции в строку сообщения с меткой $localize.
1 | |
Имя интерполяционного держателя¶
1 | |
i18n метаданные для перевода¶
1 | |
Следующие параметры обеспечивают контекст и дополнительную информацию, чтобы ваш переводчик не запутался.
| Параметр метаданных | Подробности |
|---|---|
| Пользовательский идентификатор | Укажите пользовательский идентификатор |
| Описание | Предоставьте дополнительную информацию или контекст |
| Значение | Укажите смысл или намерение текста в конкретном контексте |
Дополнительные сведения о пользовательских идентификаторах см. в разделе Управление отмеченным текстом с помощью пользовательских идентификаторов.
Добавляйте полезные описания и значения¶
Чтобы точно перевести текстовое сообщение, предоставьте переводчику дополнительную информацию или контекст.
Добавьте описание текстового сообщения в качестве значения атрибута i18n или $localize маркированной строки сообщения.
В следующем примере показано значение атрибута i18n.
1 2 3 | |
Следующий пример показывает значение строки сообщения с меткой $localize с описанием.
1 | |
Переводчику также может понадобиться знать смысл или намерение текстового сообщения в данном конкретном контексте приложения, чтобы перевести его так же, как и другой текст с тем же смыслом. Начните значение атрибута i18n со значения meaning и отделите его от description символом |: {meaning}|{description}.
h1 пример¶
Например, вы можете указать, что тег <h1> является заголовком сайта, который нужно перевести одинаково, независимо от того, используется ли он в качестве заголовка или является ссылкой в другом разделе текста.
В следующем примере показано, как указать, что тег <h1> должен быть переведен как заголовок или как ссылка в другом месте.
1 2 3 4 5 | |
В результате любой текст, помеченный site header, как значение переводится точно так же.
Следующий пример кода показывает значение строки сообщения с меткой $localize со значением и описанием.
1 | |
Как значения управляют извлечением и объединением текста
Инструмент извлечения Angular генерирует запись единицы перевода для каждого атрибута i18n в шаблоне. Инструмент извлечения Angular присваивает каждой единице перевода уникальный идентификатор, основанный на значении и описании.
Подробнее об инструменте извлечения Angular см. в разделе Работа с файлами переводов.
Одни и те же элементы текста с разными значениями извлекаются с разными идентификаторами. Например, если для слова "right" используются следующие два определения в двух разных местах, это слово переводится по-разному и объединяется обратно в приложение в виде разных записей перевода.
correctв значении "вы правы"directionв значении "повернуть направо".
Если одни и те же элементы текста удовлетворяют следующим условиям, элементы текста извлекаются только один раз и используют один и тот же идентификатор.
- Одинаковое значение или определение
- Разные описания
Эта одна запись перевода объединяется обратно в приложение везде, где появляются одинаковые элементы текста.
Выражения ICU¶
Выражения ICU помогают отметить альтернативный текст в шаблонах компонентов для выполнения условий. Выражение ICU включает свойство компонента, условие ICU и утверждения case, окруженные символами открытой фигурной скобки ({) и закрытой фигурной скобки (}).
1 | |
Свойство компонента определяет переменную В ICU-клаузе определяется тип условного текста.
| ICU clause | Подробности |
|---|---|
plural | Отметить использование множественного числа |
select | Отметьте варианты альтернативного текста на основе определенных вами строковых значений |
Чтобы упростить перевод, используйте Международные компоненты для Юникода (ICU clauses) с регулярными выражениями.
Клаузулы ICU придерживаются формата сообщений ICU, указанного в правилах плюрализации CLDR.
Обозначьте множественное число¶
В разных языках действуют разные правила использования множественного числа, что увеличивает сложность перевода. Поскольку в других языках по-разному выражается кардинальность, вам может понадобиться установить категории множественного числа, которые не совпадают с английскими.
Используйте предложение plural, чтобы отметить выражения, которые могут не иметь смысла при дословном переводе.
1 | |
После категории множественного числа введите текст по умолчанию (English), окруженный символами открытой фигурной скобки ({) и закрытой фигурной скобки (}).
1 | |
Следующие категории множественного числа доступны для английского языка и могут меняться в зависимости от локали.
| Pluralization category | Details | Example |
|---|---|---|
zero | Quantity is zero | =0 { } zero { } |
one | Quantity is 1 | =1 { } one { } |
two | Quantity is 2 | =2 { } two { } |
few | Quantity is 2 or more | few { } |
many | Quantity is a large number | many { } |
other | The default quantity | other { } |
Если ни одна из категорий множественного числа не совпадает, Angular использует other для стандартного возврата к отсутствующей категории.
1 | |
Для получения дополнительной информации о категориях множественного числа см. раздел Выбор имен категорий множественного числа в CLDR - Unicode Common Locale Data Repository.
Предыстория: Локалы могут не поддерживать некоторые категории множественного числа
Многие локали не поддерживают некоторые категории множественного числа. Локаль по умолчанию (en-US) использует очень простую функцию plural(), которая не поддерживает категорию множественного числа few.
Другой локалью с простой функцией plural() является es.
В следующем примере кода показана функция en-US plural().
1 2 3 4 5 6 | |
Функция plural() возвращает только 1 (один) или 5 (другой). Категория несколько никогда не подходит.
minutes пример¶
Если вы хотите отобразить следующую фразу на английском языке, где x — число.
1 | |
И вы также хотите отобразить следующие фразы на основе кардинальности x.
1 | |
1 | |
Используйте HTML-разметку и интерполяцию. Следующий пример кода показывает, как использовать предложение plural для выражения трех предыдущих ситуаций в элементе <span>.
1 2 3 4 | |
Просмотрите следующие детали в предыдущем примере кода.
| Параметры | Детали |
|---|---|
minutes | Первый параметр указывает на свойство компонента minutes и определяет количество минут. |
plural | Второй параметр определяет свойство ICU — plural. |
=0 {только что} | Для нулевых минут категория множественного числа — =0. Значение — только что. |
=1 {одна минута} | Для одной минуты категория множественного числа — =1. Значение — одна минута. |
other {{minutes}} minutes ago} | Для любой несопоставимой кардинальности категорией множественного числа по умолчанию является other. Значение — {{минуты}} минут назад. |
{{minutes}} является интерполяцией.
Отметка альтернатив и вложенных выражений¶
Пункт select отмечает варианты альтернативного текста на основе определенных вами строковых значений.
1 | |
Переведите все альтернативы для отображения альтернативного текста на основе значения переменной.
После категории выбора введите текст (English), окруженный символами открытой фигурной скобки ({) и закрытой фигурной скобки (}).
1 | |
В разных странах существуют разные грамматические конструкции, что увеличивает сложность перевода. Используйте HTML-разметку.
Если ни одна из категорий выбора не совпадает, Angular использует other для стандартного возврата к отсутствующей категории.
1 | |
gender пример¶
Если вы хотите отобразить следующую фразу на английском языке.
1 | |
И вы также хотите отобразить следующие фразы на основе свойства gender компонента.
1 | |
1 | |
Следующий пример кода показывает, как связать свойство gender компонента и использовать предложение select для выражения трех предыдущих ситуаций в элементе <span>.
Свойство gender связывает выходы с каждым из следующих строковых значений.
| Value | English value |
|---|---|
| female | female |
| male | male |
| other | other |
Предложение select сопоставляет значения с соответствующими переводами. В следующем примере кода свойство gender используется с предложением select.
1 2 3 4 | |
gender и minutes примеры¶
Объединяйте различные предложения вместе, например, предложения plural и select. Следующий пример кода показывает вложенные предложения, основанные на примерах gender и minutes.
1 2 3 4 5 | |