Лучшие практики локализации¶
Обеспечение повторной оценки при рендеринге¶
Каждый раз, когда вызывается функция 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 | |