Локализация в Angular строится на основе встроенной инфраструктуры i18n. Основная задача — подготовить приложение к многоязычности без необходимости переписывать логику компонентов.
В шаблонах используется директива i18n. Текст, который
нужно перевести, оборачивается в атрибут i18n:
<h1 i18n="@@homepageTitle">Главная страница</h1>
<p i18n>Добро пожаловать на сайт.</p>
Атрибут @@homepageTitle задает уникальный идентификатор
для конкретного сообщения, что упрощает работу переводчиков и
поддержание консистентности.
Angular CLI предоставляет команду для извлечения текстов:
ng extract-i18n
Результатом будет файл messages.xlf (или другой формат
XLIFF), содержащий все строки с атрибутом i18n. Этот файл
используется для работы с переводчиками или сторонними сервисами
локализации.
После получения перевода необходимо подключить соответствующий файл к сборке:
"projects": {
"my-app": {
"i18n": {
"sourceLocale": "ru",
"locales": {
"en": "src/locale/messages.en.xlf",
"fr": "src/locale/messages.fr.xlf"
}
}
}
}
При сборке можно указать язык:
ng build --localize
Это создаст отдельные версии приложения для каждого языка с уже встроенными переводами.
Для динамического переключения языков рекомендуется использовать
библиотеку @ngx-translate/core. Она позволяет загружать
JSON-файлы с переводами и изменять язык в рантайме без перезагрузки
приложения:
import { TranslateService } from '@ngx-translate/core';
constructor(private translate: TranslateService) {
translate.setDefaultLang('ru');
}
switchLanguage(lang: string) {
this.translate.use(lang);
}
Подготовка к локализации включает не только разметку и файлы
перевода, но и архитектурное планирование компонентов и сервисов таким
образом, чтобы текстовые строки не были «захардкожены», а вызывались
через сервисы или атрибуты i18n. Это обеспечивает
масштабируемость и удобство поддержки многоязычных приложений.