Как получить переведенное значение без изменения текущего языка в NGX Translate?

У меня вопрос о переводе ngx в angular2. Мой проект поддерживает 2 языка: английский и арабский, поэтому есть файлы en.json и ar.json. Приведенный ниже код даст мне переведенное значение ключа на основе моего текущего языка.

this.translate.get('key').subscribe((msg: string) => {
    console.log(msg);
  }

Вопрос: Как передать определенный язык в качестве ввода и получить перевод для этого конкретного языка? Например, мой текущий язык - английский (и я не хочу менять текущий язык), но из файла ts мне нужно получить арабский перевод ключа из ar.json без изменения текущего языка.


person Haf_Elm    schedule 18.10.2017    source источник
comment
Вы пытались использовать примеры из раздела Как использовать ngx-translate? в ngx-translate Веб-сайт?   -  person Jeroen Heier    schedule 18.10.2017


Ответы (5)


Я бы рекомендовал не использовать ngx translate для этого конкретного требования. Цель ngx translate - привязать его к представлению и загрузить JSON текущего выбранного языка. Альтернативный вариант - просто настроить другую службу, которая загружает нужный файл json, передав строку, например, en для английского языка и ar для арабского. Затем вы можете использовать этот JSON в своем ts по мере необходимости.

person user2842256    schedule 18.10.2017

Я не нашел официального решения, но нашел обходной путь.

const interval = Observable.interval(1000);
const langObservable = Observable.from(['EN', 'PL']);
langObservable.zip(interval, (v1, v2) => {
  return v1;
}).subscribe(lang => {
  this.translate.getTranslation(lang).subscribe(values => {
    const value = values['TRANSALTION_KEY'];
    this.messageProvider.next(value);
  });

});
person wtk300    schedule 14.02.2018

Также я не нашел официального решения, но сделал следующее:

this.preferences.languages.forEach((lang) => {
   this.translate.getTranslation(lang).subscribe(values => {
     this.languages.push({ label: values.i18n.LANG, value: lang});
   });
 });

В котором lang - это что-то вроде 'en', 'pt' и т. Д., Которое должно совпадать с именем ожидаемого значения для аргумента getTranslation.

person mluis    schedule 21.03.2018

Здравствуйте, попробуйте этот пакет https://www.npmjs.com/package/ngx-translate-in на основе ngx-translate

Вы можете получить перевод на конкретный язык, отличный от текущего

{{'key' | translateIn : 'fr' | async}}

просто импортируйте модуль tjis NgxTranslateInModule и используйте канал translateIn

person Fateh Mohamed    schedule 18.10.2020

Привет, мы нашли способ сделать это (использовать переводы на другой язык без изменения языка системы) с помощью ngx-translate:

this.translateService.getTranslation(this.languageId).subscribe...

Сначала мы загружаем желаемый языковой перевод в translateService, после этого мы можем искать перевод в сервисе с помощью:

var transaltedValue = this.translateService.getParsedResult(this.translateService.translations[this.languageId], 'resourceKey')

это можно использовать в машинописном тексте, а для HTML вы можете создать канал, используя ту же логику

person Javorov1103    schedule 16.07.2021