#angular #dynamic #typescript #internationalization #switching
#angular #динамический #машинопись #интернационализация #переключение
Вопрос:
Я ищу способ
- динамическая настройка текущего языка для отображения: я следил за последней поваренной книгой angular здесь об интернационализации, но в ней говорится: «язык пользователя жестко запрограммирован как глобальный документ.переменная locale в index.html «
Как это можно установить динамически в angular2 typescript?
Вот моя попытка из официального Angular2 plunkr: https://plnkr.co/edit/lWV4VhzpWYnCXeDBpzsn?p=preview где я прокомментировал
document.locale='en';
и попытался извлечь window.document внутри службы typescript и изменить там языковой стандарт, но, несмотря на то, что он вызывается и языковой стандарт установлен правильно (видно в консоли), интерфейс не отображается на выбранном языке при запуске.
Тогда, конечно, выпадающие кнопки также не работают, потому что используется тот же ошибочный способ, и отображение не обновляется, но это следующий шаг.
Комментарии:
1. Тем временем я создал версию, которая читает document. URL и устанавливает document.locale внутри файла i18n-providers.ts. Это, конечно, неправильный способ продолжить, но тем временем я могу продолжить работу с переводами plnkr.co/edit/TE7raLGC9pvYfaRu6Syg?p=preview (Этот пример не работает из-за plunkr, но работает локально)
Ответ №1:
Я сохраняю выбранный пользователем языковой ключ в локальное хранилище:
//<select name="selectLocate" (change)="onChange($event.target.value)">
public onChange(localeId: string): void {
localStorage.setItem('localeId', localeId);
location.reload(true);
}
Затем принудительная перезагрузка, и в i18n.provider.ts
let locale = localStorage.getItem('localeId');
Комментарии:
1. просто и здорово. Я изменил пример plunkr, и он отлично работает! plnkr.co/edit/JyE4l4TjEruuPsrbanmK
2. Я не использую systemsjs. Можно ли настроить его с помощью webpack?
3. @sardarCoder Не знаю, все еще ли вы боретесь с этим, но если да. Да, вы можете: просто используйте raw-loader для загрузки xlf-файлов:
{test: /.xlf/, loader: 'raw-loader'},
4. @GOB raw-loader — это загрузчик для webpack, который позволяет импортировать файлы в виде строки. Итак?
5. Что, если я получу настройки при загрузке приложения, и оно содержит язык, который я должен использовать? Мне нужен способ применить его без перезагрузки страницы (не хочу получать настройки дважды).