Языковой переключатель Angular2 i18n

#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. Что, если я получу настройки при загрузке приложения, и оно содержит язык, который я должен использовать? Мне нужен способ применить его без перезагрузки страницы (не хочу получать настройки дважды).