Лучшие практики локализации¶
Обеспечение повторной оценки при рендеринге¶
Каждый раз, когда вызывается функция msg
, она возвращает версию заданной строки или шаблона Lit в активной локали. Однако этот результат - обычная строка или шаблон; он не способен внутренне пересмотреть себя при смене локали.
По этой причине важно писать вызовы msg
таким образом, чтобы обеспечить их переоценку при каждом запуске метода Lit render
. Таким образом, при смене локали будет возвращена правильная строка или шаблон для последней локали.
Одна из ситуаций, в которой легко допустить ошибку, - это локализация значений свойств по умолчанию. Может показаться естественным написать так:
1 2 3 4 5 6 |
|
Однако вышеописанная схема не дает возможности обновлять метку по умолчанию при изменении локали. Значение по умолчанию будет застревать на версии локали, которая была активна в момент создания элемента.
Простым исправлением является перемещение возврата значения по умолчанию непосредственно в метод рендеринга:
1 2 3 |
|
Кроме того, для создания более естественного интерфейса можно использовать пользовательский геттер/сеттер:
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 |
|
Избегайте ненужной HTML-разметки¶
Хотя @lit/localize
полностью поддерживает встраивание HTML-разметки в локализованные шаблоны, лучше избегать этого, когда это возможно. Это связано с тем, что:
- Переводчикам проще работать с простыми строковыми фразами, а не с фразами со встроенной разметкой.
- Это позволяет избежать ненужной работы по повторному переводу при изменении разметки, например, при добавлении класса, который влияет на внешний вид, не меняя смысла.
- Смена локалей обычно происходит быстрее, поскольку обновлять нужно меньше частей DOM. Кроме того, в ваши пакеты будет включено меньше JavaScript, поскольку общую разметку не нужно будет дублировать в каждом переводе.
Не идеальный вариант:
1 2 3 4 5 |
|
Идеально:
1 2 3 4 5 |
|
Разбиение шаблонов на более мелкие части также может быть полезным:
1 2 3 4 5 6 7 |
|
1 2 3 4 5 6 7 8 |
|
При использовании режима трансформации шаблоны будут автоматически сплющиваться, чтобы сделать их как можно меньше и эффективнее. После трансформации в приведенном выше примере не будет никаких заполнителей, поскольку он знает, что строки можно напрямую объединять в HTML-шаблоны.
Есть случаи, когда HTML должен быть включен в локализованный шаблон. Например, когда в середине фразы требуется HTML-тег:
1 2 3 |
|
Безопасный реэкспорт или переназначение API локализации¶
Статический анализ используется для определения того, когда вы вызываете функцию @lit/localize
msg
и другие API, а не другую функцию с тем же именем.
Можно реэкспортировать или переназначить функцию msg
и другие API, и в большинстве случаев это будет работать.
Однако некоторые паттерны могут быть слишком динамичными, чтобы статический анализ мог их понять. Если сообщение не извлекается, а вы переназначили или реэкспортировали функцию msg
, это может быть причиной.
Чтобы заставить функцию анализироваться как API @lit/localize
, вы можете использовать комментарий JSDoc @type
в JavaScript или приведение типа в TypeScript:
1 |
|
1 2 |
|