Подготовка компонента к переводу
Чтобы подготовить проект к переводу, выполните следующие действия.
- Используйте атрибут
i18n, чтобы пометить текст в шаблонах компонентов - Используйте атрибут
i18n-, чтобы пометить текстовые значения атрибутов в шаблонах компонентов - Используйте помеченную строку сообщения
$localize, чтобы пометить текстовые строки в коде компонента
Пометка текста в шаблоне компонента
В шаблоне компонента метаданные i18n задаются значением атрибута i18n.
<element i18n="{i18n_metadata}">{string_to_translate}</element>
Используйте атрибут i18n, чтобы пометить статическое текстовое сообщение в шаблонах компонентов для перевода. Добавьте его к каждому тегу элемента, содержащему неизменяемый текст, который нужно перевести.
ПОЛЕЗНО: Атрибут i18n — это пользовательский атрибут, распознаваемый инструментами и компиляторами Angular.
Пример i18n
Следующий тег <h1> отображает простое приветствие на английском языке: «Привет, i18n!».
<h1>Hello i18n!</h1>
Чтобы пометить приветствие для перевода, добавьте атрибут i18n к тегу <h1>.
<h1 i18n>Hello i18n!</h1>
Использование условного оператора с i18n
Следующий тег <div> будет отображать переведенный текст в составе div и aria-label в зависимости от состояния переключателя
Перевод встроенного текста без элемента HTML
Используйте элемент <ng-container>, чтобы задать поведение перевода для определенного текста, не меняя способ его отображения.
ПОЛЕЗНО: Каждый элемент HTML создает новый элемент DOM. Чтобы не создавать новый элемент DOM, заключите текст в элемент <ng-container>. В следующем примере показано, как элемент <ng-container> преобразуется в невидимый комментарий HTML.
<ng-container i18n>I don't output any element</ng-container>
Присвоение имени заполнителю интерполяции
По умолчанию Angular создает имя заполнителя для каждой интерполяции в переводимом сообщении. Чтобы присвоить ему осмысленное имя, которое поможет переводчикам понять контекст, добавьте комментарий //i18n(ph="name") внутрь интерполяции.
<element i18n>{{ expression //i18n(ph="placeholder_name") }}</element>
Например:
<p i18n>Hello, {{ username //i18n(ph="name") }}!</p>
Это эквивалентно присвоению имени заполнителю в коде компонента с помощью $localize:
$localize`Hello, ${username}:name:!`; Пометка атрибутов элементов для перевода
В шаблоне компонента метаданные i18n задаются значением атрибута i18n-{attribute_name}.
<element i18n-{attribute_name}="{i18n_metadata}" {attribute_name}="{attribute_value}" />
Атрибуты элементов HTML содержат текст, который следует переводить вместе с остальным отображаемым текстом в шаблоне компонента.
Используйте i18n-{attribute_name} с любым атрибутом любого элемента и замените {attribute_name} именем атрибута. Используйте следующий синтаксис, чтобы задать значение, описание и пользовательский идентификатор.
i18n-{attribute_name}="{meaning}|{description}@@{id}" Пример i18n-title
Чтобы перевести заголовок изображения, рассмотрите этот пример. В следующем примере показано изображение с атрибутом title.
<img [src]="logo" title="Angular logo" alt="Angular logo" />
Чтобы пометить атрибут title для перевода, выполните следующее действие.
Добавьте атрибут i18n-title
В следующем примере показано, как пометить атрибут title тега img, добавив i18n-title.
<img [src]="logo" i18n-title title="Angular logo" alt="Angular logo" />
Пометка текста в коде компонента
В коде компонента исходный текст для перевода и метаданные заключаются в обратные кавычки (`).
Используйте помеченную строку сообщения $localize, чтобы пометить строку в коде для перевода.
$localize`string_to_translate`;
Метаданные i18n заключаются в двоеточия (:) и располагаются перед исходным текстом для перевода.
$localize`:{i18n_metadata}:string_to_translate`; Добавление интерполированного текста
Добавляйте интерполяции в помеченную строку сообщения $localize.
$localize`string_to_translate ${variable_name}`; Присвоение имени заполнителю интерполяции
$localize`string_to_translate ${variable_name}:placeholder_name:`; Условный синтаксис для переводов
return this.show ? $localize`Show Tabs` : $localize`Hide tabs`;
Метаданные i18n для перевода
{meaning}|{description}@@{custom_id}
Следующие параметры предоставляют контекст и дополнительную информацию, чтобы уменьшить вероятность недопонимания при переводе.
| Параметр метаданных | Описание |
|---|---|
| Пользовательский идентификатор | Задайте пользовательский идентификатор |
| Описание | Предоставьте дополнительную информацию или контекст |
| Значение | Укажите значение или назначение текста в конкретном контексте |
Дополнительные сведения о пользовательских идентификаторах см. в разделе Управление помеченным текстом с пользовательскими идентификаторами.
Добавление полезных описаний и значений
Чтобы точно перевести текстовое сообщение, предоставьте переводчику дополнительную информацию или контекст.
Добавьте описание текстового сообщения в качестве значения атрибута i18n или помеченной строки сообщения $localize.
В следующем примере показано значение атрибута i18n.
<h1 i18n="An introduction header for this sample">Hello i18n!</h1>
В следующем примере показано значение помеченной строки сообщения $localize с описанием.
$localize`:An introduction header for this sample:Hello i18n!`;
Переводчику также может понадобиться знать значение или назначение текстового сообщения в контексте конкретного приложения, чтобы перевести его так же, как и другой текст с тем же значением. Начните значение атрибута i18n с значения и отделите его от описания символом |: {meaning}|{description}.
Пример h1
Например, можно указать, что тег <h1> является заголовком сайта и должен переводиться одинаково независимо от того, используется ли он как заголовок или упоминается в другом разделе текста.
В следующем примере показано, как указать, что тег <h1> должен переводиться как заголовок или при упоминании в другом месте.
<h1 i18n="site header|An introduction header for this sample">Hello i18n!</h1>
В результате любой текст, помеченный site header, будет переведен совершенно одинаково, поскольку его значение совпадает.
В следующем примере кода показано значение помеченной строки сообщения $localize со значением и описанием.
$localize`:site header|An introduction header for this sample:Hello i18n!`;
Как значения влияют на извлечение и объединение текста
Инструмент извлечения Angular создает запись переводимой единицы для каждого атрибута i18n в шаблоне. Инструмент извлечения Angular назначает каждой переводимой единице уникальный идентификатор на основе значения и описания.
ПОЛЕЗНО: Дополнительные сведения об инструменте извлечения Angular см. в разделе Работа с файлами переводов.
Одинаковые текстовые элементы с разными значениями извлекаются с разными идентификаторами. Например, если слово «прав» используется в следующих двух значениях в разных местах, оно переводится по-разному и возвращается в приложение как разные записи перевода.
-
correct— как в выражении «ты прав» -
direction— как в выражении «поверни направо»
Если одинаковые текстовые элементы соответствуют следующим условиям, они извлекаются только один раз и используют один и тот же идентификатор.
- Одинаковое значение или определение
- Разные описания
Эта единственная запись перевода возвращается в приложение везде, где встречаются одинаковые текстовые элементы.
ICU-выражения
ICU-выражения позволяют помечать альтернативный текст в шаблонах компонентов в зависимости от условий. ICU-выражение включает свойство компонента, условие ICU и варианты, заключенные в фигурные скобки ({ и }).
{ component_property, icu_clause, case_statements }
Свойство компонента определяет переменную. Условие ICU определяет тип условного текста.
| Условие ICU | Описание |
|---|---|
plural | Пометка использования чисел во множественном числе |
select | Пометка вариантов альтернативного текста на основе заданных строковых значений |
Чтобы упростить перевод, используйте условия International Components for Unicode (ICU) с регулярными выражениями.
ПОЛЕЗНО: Условия ICU соответствуют формату сообщений ICU, определенному в правилах формирования множественного числа CLDR.
Пометка форм множественного числа
В разных языках действуют разные правила образования множественного числа, что усложняет перевод. Поскольку в других локалях количественные значения выражаются иначе, может потребоваться задать категории множественного числа, не совпадающие с английскими. Используйте условие plural, чтобы пометить выражения, которые могут потерять смысл при дословном переводе.
{ component_property, plural, pluralization_categories }
После категории множественного числа укажите текст по умолчанию (на английском языке), заключив его в фигурные скобки ({ и }).
pluralization_category { }
Для английского языка доступны следующие категории множественного числа; в других локалях они могут отличаться.
| Категория множественного числа | Описание | Пример |
|---|---|---|
zero | Количество равно нулю |
=0 { } zero { }
|
one | Количество равно 1 |
=1 { } one { }
|
two | Количество равно 2 |
=2 { } two { }
|
few | Количество равно 2 или больше | few { } |
many | Количество — большое число | many { } |
other | Количество по умолчанию | other { } |
Если ни одна категория множественного числа не подходит, Angular использует other в качестве стандартного варианта для отсутствующей категории.
other { default_quantity }
ПОЛЕЗНО: Дополнительные сведения о категориях множественного числа см. в разделе Выбор названий категорий множественного числа в CLDR — общем хранилище данных локалей Unicode.
Некоторые локали не поддерживают отдельные категории множественного числа. В локали по умолчанию (en-US) используется очень простая функция plural(), которая не поддерживает категорию множественного числа few. Еще одна локаль с простой функцией plural() — es. В следующем примере кода показана функция plural() для en-US.
function plural(n: number): number {
let i = Math.floor(Math.abs(n)),
v = n.toString().replace(/^[^.]*\.?/, '').length;
if (i === 1 && v === 0) return 1;
return 5;
}
Функция plural() возвращает только 1 (one) или 5 (other). Категория few никогда не подходит.
Пример с минутами
Допустим, вы хотите отобразить следующую фразу на английском языке, где x — число.
updated x minutes ago
Также нужно отображать следующие фразы в зависимости от количества x.
updated just now
updated one minute ago
Используйте разметку HTML и интерполяции. В следующем примере кода показано, как использовать условие plural, чтобы выразить три предыдущих ситуации в элементе <span>.
<span i18n
>Updated
{minutes, plural, =0 {just now} =1 {one minute ago} other {{{ minutes }} minutes ago}}</span
>
Рассмотрим следующие сведения о предыдущем примере кода.
| Параметры | Описание |
|---|---|
minutes | Первый параметр указывает, что свойство компонента — minutes, и определяет количество минут. |
plural | Второй параметр указывает, что условие ICU — plural. |
=0 {just now} | Для нуля минут категория множественного числа — =0. Значение — just now. |
=1 {one minute} | Для одной минуты категория множественного числа — =1. Значение — one minute. |
other {{{minutes}} minutes ago} | Для любого количества, не соответствующего другим вариантам, используется категория множественного числа по умолчанию other. Значение — {{minutes}} minutes ago. |
{{minutes}} — это интерполяция.
Пометка альтернатив и вложенных выражений
Условие select помечает варианты альтернативного текста на основе заданных строковых значений.
{ component_property, select, selection_categories }
Переведите все альтернативы, чтобы отображать альтернативный текст в зависимости от значения переменной.
После категории выбора укажите текст (на английском языке), заключив его в фигурные скобки ({ и }).
selection_category { text }
В разных локалях используются разные грамматические конструкции, что усложняет перевод. Используйте разметку HTML. Если ни одна категория выбора не подходит, Angular использует other в качестве стандартного варианта для отсутствующей категории.
other { default_value } Пример с полом
Допустим, вы хотите отобразить следующую фразу на английском языке.
The author is other
Также нужно отображать следующие фразы в зависимости от свойства компонента gender.
The author is female
The author is male
В следующем примере кода показано, как привязать свойство компонента gender и использовать условие select, чтобы выразить три предыдущих ситуации в элементе <span>.
Свойство gender связывает результаты со следующими строковыми значениями.
| Значение | Значение на английском языке |
|---|---|
| female | female |
| male | male |
| other | other |
Условие select сопоставляет значения с соответствующими переводами. В следующем примере кода показано свойство gender, используемое с условием select.
<span i18n>The author is {gender, select, male {male} female {female} other {other}}</span> Пример с полом и минутами
Объединяйте разные условия, например plural и select. В следующем примере кода показаны вложенные условия на основе примеров с gender и minutes.
<span i18n
>Updated:
{minutes, plural,
=0 {just now}
=1 {one minute ago}
other {{{ minutes }} minutes ago by {gender, select, male {male} female {female} other {other}}}
}
</span> Что дальше
Super-powered by Google ©2010–2025.
Code licensed under an MIT-style License. Documentation licensed under CC BY 4.0.
https://angular.dev/guide/i18n/prepare