Режим локализации во время выполнения¶
В режиме выполнения Lit Localize для каждой из ваших локалей генерируется один модуль JavaScript или TypeScript. Каждый сгенерированный модуль содержит локализованные шаблоны для этой локали. Когда ваше приложение переключается на другую локаль, модуль для этой локали импортируется, и все локализованные компоненты перерисовываются.
Сравнение режимов вывода Lit Localize см. в разделе Режимы вывода.
Пример вывода:
1 2 3 4 |
|
Пример использования режима выполнения¶
Следующий пример демонстрирует приложение, созданное с использованием режима времени выполнения Lit Localize:
В репозитории Lit GitHub есть полные рабочие примеры (JavaScript, TypeScript) режима выполнения Lit Localize, которые можно использовать в качестве шаблонов.
Настройка режима выполнения¶
В конфигурации lit-localize.json
установите для свойства output.mode
значение runtime
, а для свойства output.outputDir
- место, где вы хотите генерировать локализованные модули шаблонов. Более подробная информация приведена в разделе Настройки режима выполнения.
Затем установите output.localeCodesModule
в выбранный вами путь к файлу. Lit Localize сгенерирует здесь модуль .js
или .ts
, который будет отражать настройки sourceLocale
и targetLocales
в вашем конфигурационном файле как экспортируемые переменные. Сгенерированный модуль будет выглядеть примерно так:
1 2 3 |
|
Наконец, в вашем JavaScript или TypeScript проекте вызовите configureLocalization
, передав объект со следующими свойствами:
sourceLocale: string
: ПеременнаяsourceLocale
, экспортируемая сгенерированным вами модулемoutput.localeCodesModule
.targetLocales: string[]
: ПеременнаяtargetLocales
, экспортируемая сгенерированным вами модулемoutput.localeCodesModule
.loadLocale: (locale: string) => Promise<LocaleModule>
: Функция, загружающая локализованный шаблон. Возвращает обещание, разрешающее сгенерированный модуль локализованного шаблона для заданного кода локали. Примеры функций, которые вы можете использовать здесь, смотрите в Подходы к загрузке модулей локали.
configureLocalization
возвращает объект со следующими свойствами:
getLocale
: Функция, возвращающая код активной локали. Если началась загрузка новой локали,getLocale
будет продолжать возвращать код предыдущей локали, пока не закончится загрузка новой.setLocale
: Функция, которая начинает переключать активную локаль на заданный код и возвращает обещание, которое разрешается после загрузки новой локали. Пример использования:
Например:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
Автоматический рендеринг¶
Чтобы автоматически вызывать перерисовку компонента при переключении активной локали, примените функцию updateWhenLocaleChanges
в вашем конструкторе
при написании JavaScript, или примените декоратор @localized
к вашему классу при написании TypeScript.
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 19 |
|
Событие статуса¶
Событие lit-localize-status
срабатывает в window
каждый раз, когда начинается, завершается или не работает переключение локали. Вы можете использовать это событие для:
- Повторного рендеринга, когда вы не можете использовать декоратор
@localized
(например, при использовании функции Litrender
напрямую). - Рендерить, как только начинается переключение локали, даже до того, как она закончит загрузку (например, индикатор загрузки).
- Выполнять другие задачи, связанные с локализацией (например, установка cookie для предпочтений локали).
Типы событий¶
Строковое свойство detail.status
говорит о том, какой тип изменения статуса произошел, и может быть либо loading
, либо ready
, либо error
:
loading
-
Началась загрузка новой локали.
Объект
detail
содержит:loadingLocale: string
: Код локали, которая начала загружаться.
В случае, если вторая локаль запрашивается до того, как первая закончит загрузку, отправляется новое событие
loading
, а для первого запроса не будет отправлено событиеready
илиerror
.За статусом
loading
может следовать статусready
,error
илиloading
. ready
-
Новая локаль успешно загружена и готова к рендерингу.
Объект
detail
содержит:readyLocale: string
: Код локали, которая успешно загрузилась.
За статусом
ready
может следовать только статусloading
. error
-
Не удалось загрузить новую локаль.
Объект
detail
содержит:errorLocale: string
: Код локали, которую не удалось загрузить.errorMessage: string
: Сообщение об ошибке при неудачной загрузке локали.
За статусом
error
может следовать только статусloading
.
Пример использования события состояния¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
|
Подходы к загрузке модулей локали¶
Lit Localize позволяет загружать модули локали как угодно, поскольку в качестве опции loadLocale
можно передать любую функцию. Вот несколько распространенных шаблонов:
Lazy-load¶
Используйте динамический импорт для загрузки каждой локали только тогда, когда она становится активной. Это хороший вариант по умолчанию, потому что он минимизирует количество кода, который будут загружать и выполнять ваши пользователи.
1 2 3 4 5 6 7 8 9 10 11 |
|
Предварительная загрузка¶
Начните предварительную загрузку всех локалей при загрузке страницы. Динамический импорт по-прежнему используется для того, чтобы остальные сценарии на странице не блокировались, пока происходит выборка модулей локалей.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
Статический импорт¶
Используйте static imports для предварительной загрузки всех локалей таким образом, чтобы блокировать другие сценарии на странице.
Обычно такой подход не рекомендуется, поскольку в этом случае будет извлечено и выполнено больше кода, чем нужно, прежде чем успеет выполниться остальная часть сценария на странице, что заблокирует интерактивность. Используйте этот подход, только если ваше приложение очень маленькое, должно распространяться в одном файле JavaScript, или у вас есть другие ограничения, которые не позволяют использовать динамический импорт.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|