Режим локализации во время выполнения¶
В режиме выполнения 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 | |