Извлечение текстов для перевода

Angular предоставляет встроенный инструмент i18n, позволяющий локализовать приложения и управлять переводами текстов. Основной процесс заключается в извлечении статических строк из шаблонов и генерации файлов перевода в формате XLIFF или XMB.

Подготовка проекта к локализации

  1. Включение поддержки i18n в шаблонах через атрибут i18n.

    <h1 i18n="site header|Title for the home page">Главная страница</h1>

    В данном примере "site header|Title for the home page" — это описание контекста для переводчиков.

  2. Объявление локали в конфигурации приложения:

    import { LOCALE_ID } from '@angular/core';
    
    providers: [{ provide: LOCALE_ID, useValue: 'ru' }]

Извлечение текстов

Для извлечения текстов используется Angular CLI с командой extract-i18n:

ng extract-i18n --output-path src/locale

Результатом является файл messages.xlf, который содержит все строки с атрибутом i18n и уникальными идентификаторами:

<trans-unit id="site_header" datatype="html">
  <source>Главная страница</source>
  <note priority="1" from="description">Title for the home page</note>
</trans-unit>

Работа с файлами перевода

Файлы XLIFF можно отправлять переводчикам или интегрировать с системами автоматического перевода. После перевода приложение можно собрать для конкретной локали:

ng build --localize

Angular автоматически подставит переводы из соответствующих файлов, заменив оригинальные строки.

Динамические тексты и параметры

i18n поддерживает параметры и переменные, что позволяет локализовать строки с динамическими данными:

<p i18n="greeting message|User greeting">Привет, {{ userName }}!</p>

В файле перевода параметр {{ userName }} сохраняется как placeholder:

<source>Привет, {{ userName }}!</source>

Это обеспечивает корректное использование динамических данных в разных языках без изменения шаблонов.

Инкрементальное обновление переводов

Angular позволяет обновлять файлы перевода при добавлении новых строк через:

ng extract-i18n --output-path src/locale --format xlf2

Это сохраняет существующие переводы и добавляет новые строки, минимизируя работу по поддержке локализации больших приложений.