Локализация¶
Локализация - это процесс поддержки нескольких языков и регионов в ваших приложениях и компонентах. В Lit есть сторонняя поддержка локализации с помощью библиотеки Библиотека @lit/localize имеет ряд преимуществ, которые могут сделать ее хорошим выбором по сравнению со сторонними библиотеками локализации:
- Встроенная поддержка выражений и HTML-разметки внутри локализованных шаблонов. Нет необходимости в новом синтаксисе и интерполяционном времени выполнения для подстановки переменных - просто используйте уже имеющиеся шаблоны.
- Автоматический повторный рендеринг компонентов Lit при смене локали.
- Всего 1,27 килобайта (минифицированного + сжатого) дополнительного JavaScript.
- Опционально компилируется для каждой локали, сокращая дополнительный JavaScript до 0 KiB.
Установка¶
Установите клиентскую библиотеку @lit/localize и интерфейс командной строки @lit/localize-tools. интерфейс командной строки.
1 2 | |
Быстрый старт¶
- Оберните строку или шаблон в функцию
msg(подробности). - Создайте конфигурационный файл
lit-localize.json(details). - Запустите
lit-localize extractдля создания XLIFF-файла (подробности). - Отредактируйте сгенерированный XLIFF-файл, добавив в него тег перевода
<target>(details). - Запустите
lit-localize buildдля вывода локализованной версии ваших строк и шаблонов (details).
Создание локализуемых строк и шаблонов¶
Чтобы сделать строку или шаблон Lit локализуемыми, оберните их в функцию msg. Функция msg возвращает версию заданной строки или шаблона в той локали, которая активна в данный момент.
Пока у вас нет никаких переводов, msg просто возвращает исходную строку или шаблон, поэтому его можно использовать, даже если вы еще не готовы к локализации.
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 | |
Типы сообщений¶
Любая строка или шаблон, которые вы обычно отображаете с помощью Lit, может быть локализована, включая те, которые содержат динамические выражения и HTML-разметку.
Обычная строка:
1 | |
Обычная строка с выражением (подробнее о str см. в строки с выражениями):
1 | |
HTML-шаблон:
1 | |
HTML-шаблон с выражением:
1 | |
Локализованные сообщения также могут быть вложены в HTML-шаблоны:
1 | |
Строки с выражениями¶
Строки, содержащие выражение, должны быть помечены либо html, либо str, чтобы быть локализуемыми. Вы должны предпочесть str, а не html, если ваша строка не содержит никакой HTML-разметки, потому что она имеет немного меньше накладных расходов на производительность. При выполнении команды lit-localize будет выдана ошибка, если вы забудете тег html или str для строки с выражением.
Неверно:
1 2 | |
Правильно:
1 2 | |
Тег str необходим в этих случаях, потому что не помеченные литералы шаблонных строк оцениваются до обычных строк, прежде чем они будут получены функцией msg, что означает, что значения динамических выражений не могут быть иначе захвачены и подставлены в локализованные версии строк.
Коды локалей¶
Код локали - это строка, идентифицирующая человеческий язык, а иногда также включающая регион, сценарий или другие вариации.
Lit Localize не предписывает использовать какую-либо определенную систему кодов локалей, хотя настоятельно рекомендуется использовать стандарт BCP 47 language tag standard. Примерами языковых тегов BCP 47 являются:
en: Английскийes-419: испанский язык, на котором говорят в Латинской Америкеzh-Hans: китайский язык, написанный упрощенным шрифтом
Термины¶
В Lit Localize есть несколько терминов, относящихся к кодам локалей. Эти термины используются в данной документации, в файле конфигурации Lit Localize и в Lit Localize API:
| Название | Описание |
|---|---|
| Source locale | Локаль, которая используется для написания строк и шаблонов в вашем исходном коде. |
| Target locales | Локализации, в которые могут быть переведены ваши строки и шаблоны. |
| Active locale | Глобальная локаль, которая отображается в данный момент. |
Режимы вывода¶
Lit Localize поддерживает два режима вывода:
- Режим Runtime использует API Lit Localize для загрузки локализованных сообщений во время выполнения.
- Режим Transform позволяет обойтись без кода Lit Localize во время выполнения, создавая отдельный пакет JavaScript для каждой локали.
Не знаете, какой режим использовать?
Начните с режима выполнения. Позже можно будет легко переключить режим, поскольку основной API msg идентичен.
Режим выполнения¶
В режиме выполнения для каждой локали генерируется один модуль JavaScript или TypeScript. Каждый модуль содержит локализованные шаблоны для этой локали. Когда активная локаль переключается, модуль для этой локали импортируется, и все локализованные компоненты перерисовываются.
Режим выполнения делает переключение локалей очень быстрым, поскольку перезагрузка страницы не требуется. Однако по сравнению с режимом преобразования это несколько снижает производительность рендеринга.
Пример сгенерированного вывода:
1 2 3 4 | |
Все подробности о режиме выполнения см. на странице Режим выполнения.
Режим преобразования¶
В режиме преобразования для каждой локали создается отдельная папка. Каждая папка содержит полную автономную сборку вашего приложения в этой локали, с полностью удаленными обертками msg и всем остальным кодом времени выполнения Lit Localize.
Режим трансформации требует 0 килобайт дополнительного JavaScript и очень быстро отрисовывается. Однако при смене локали требуется перезагрузить страницу, чтобы загрузить новый пакет JavaScript.
Пример сгенерированного вывода:
1 2 3 4 | |
1 2 3 4 | |
Подробную информацию о режиме трансформации см. на странице Режим преобразования.
Различия¶
| Режим выполнения | Режим преобразования | |
|---|---|---|
| Вывод | Динамически загружаемый модуль для каждой целевой локали. | Отдельная сборка приложения для каждой локали. |
| Переключение локалей | Вызов setLocale() | Перезагрузка страницы |
| JS bytes | 1.27 KiB (minified + compressed) | 0 KiB |
| Сделать шаблон локализируемым | msg() | msg() |
| Настройка | configureLocalization() | configureTransformLocalization() |
| Преимущества |
|
|
Конфигурационный файл¶
Инструмент командной строки lit-localize ищет файл конфигурации lit-localize.json в текущем каталоге. Скопируйте и вставьте приведенный ниже пример для быстрого начала работы, а полный список всех опций смотрите на странице CLI и config.
Если вы пишете JavaScript, установите свойство inputFiles в местоположение исходных файлов .js. Если вы пишете на TypeScript, установите свойство tsConfig в местоположение файла tsconfig.json, а inputFiles оставьте пустым.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | |
Извлечение сообщений¶
Выполните команду lit-localize extract, чтобы сгенерировать файл XLIFF для каждой целевой локали. XLIFF - это XML-формат, поддерживаемый большинством инструментов и сервисов локализации. Файлы XLIFF будут записаны в каталог, указанный опцией interchange.xliffDir config.
1 | |
Например, с учетом источника:
1 2 3 | |
Затем для каждой целевой локали будет сгенерирован файл <xliffDir>/<locale>.xlf:
1 2 3 4 5 6 7 8 9 10 11 12 13 | |
Перевод с помощью XLIFF¶
Файлы XLIFF можно редактировать вручную, но чаще всего они отправляются в стороннюю службу перевода, где их редактируют эксперты-лингвисты с помощью специализированных инструментов.
После загрузки XLIFF-файлов в выбранную службу перевода вы получите в ответ новые XLIFF-файлы. Новые XLIFF-файлы будут выглядеть так же, как и загруженные вами, но с тегами <target>, вставленными в каждый <trans-unit>.
Когда вы получите новые XLIFF-файлы перевода, сохраните их в настроенном каталоге interchange.xliffDir, заменяя оригинальные версии.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | |
Создание локализованных шаблонов¶
Используйте команду lit-localize build, чтобы включить переводы обратно в ваше приложение. Поведение этой команды зависит от настроенного вами output mode.
1 | |
Подробнее о том, как работает сборка в каждом режиме, смотрите на страницах runtime mode и transform mode.
Описания сообщений¶
Используйте опцию desc для функции msg, чтобы предоставить человекочитаемые описания для ваших строк и шаблонов. Эти описания показываются переводчикам большинством инструментов перевода, и их настоятельно рекомендуется использовать для объяснения и контекстуализации смысла сообщений.
1 2 3 4 5 6 7 | |
Описания представляются в файлах XLIFF с помощью элементов <note>.
1 2 3 4 | |
Идентификаторы сообщений¶
Lit Localize автоматически генерирует идентификатор для каждого вызова msg, используя хэш строки.
Если два вызова msg имеют одинаковый идентификатор, то они рассматриваются как одно и то же сообщение, то есть будут переведены как единое целое, и в обоих местах будут подставлены одинаковые переводы.
Например, эти два вызова msg находятся в двух разных файлах, но поскольку они имеют одинаковое содержание, они будут рассматриваться как одно сообщение:
1 2 3 4 5 | |
Генерация идентификаторов¶
Следующее содержимое влияет на генерацию идентификатора:
- Строковое содержимое
- HTML-разметка
- Положение выражений
- Отмечена ли строка тегом
html.
Следующее содержимое не влияет на генерацию идентификаторов:
- Код внутри выражения
- Вычисленное значение выражения
- Описания
- Расположение файла
Например, все эти сообщения имеют один и тот же идентификатор:
1 2 3 4 5 | |
Но это сообщение имеет другой идентификатор:
1 | |
Переопределение идентификаторов¶
Идентификаторы сообщений можно переопределить, указав опцию id в функции msg. В некоторых случаях это может быть необходимо, например, когда одинаковая строка имеет несколько значений, поскольку на другом языке каждое из них может быть написано по-разному:
1 2 3 4 | |