ngx-translate / core: метод instant возвращает объект вместо языка по умолчанию - PullRequest
0 голосов
/ 28 декабря 2018

Язык откат не работает для испанского пользователя, когда пользователь, скорее он показывает [объект объекта] в качестве переведенного значения

Сценарий:

en.json

"USER" : "User"

es.json

"USER" : {
  "COMPANY" : "Miembro"
  "VENDOR" : "Vendedor"
}

fr.json:

"USER" : {
  "DEFAULT": "Consommateur"
  "COMPANY" : "Membre"
  "VENDOR" : "Vendeur"
}

Использование:

{{ 'USER' | envlabel }}

envlabel: Канал, который будет транслироваться с проверкой типа пользователя

Объяснение:

  • Для пользователя en: всегда должен отображаться «Пользователь»как переведенная метка
  • Для пользователя es: должно отображаться «Miembro», если тип пользователя - компания, или «Vendedor», если тип пользователя - поставщик, или «Пользователь» для любого другого типа
  • Дляfr user: должно отображаться «Membre», если типом пользователя является компания, или «Vendeur», если типом пользователя является поставщик, или «Consommateur» для любого другого типа

Реализация:

  • У нас есть логика для каждого шага для проверки с помощью типа "USER. $ {TYPE}", и если не найден, мы удаляем тип и просто переводим с помощью "USER".
  • Где для spanish user: «USER.COMPANY» и «USER.VENDOR» будут работать, но «USER.DEFAULT» не будет работать.
  • Поэтому мы выполняем перевод с использованием «USER», который возвращает объект из «es.json»
  • Это возвращало "User" из "en.json" в "angular-translate"
    вместо объекта из "es.json"

Fixсейчас: Чтобы заставить его работать, мы меняем язык с помощью (defaultLang) и получаем переведенную строку, после чего снова используем (userLang) перед возвратом переведенного текста.

1 Ответ

0 голосов
/ 04 января 2019

setDefaulrLang () используется только для всех пользователей в приложении в appComponent или если вы получаете местоположение пользователя из браузера, тогда вы можете изменить его.На мой взгляд, лучший способ узнать, как работают файлы .json, все файлы должны иметь одинаковые строки, поэтому в en.json не должно быть строк, таких как "user": "User" и в файле es user: {...}, потому что первая из них - это имя переменной: строковые данные и втораяодин - это имя переменной + данные карты !!!

пример того, как это должно быть написано:

en.json

"USER" : {
   "user": "user"
 }

es.json

"USER" : {
  "user": "Alejandro"
  "COMPANY" : "Miembro"
  "VENDOR" : "Vendedor"
}

fr.json:

"USER" : {
  "user": "Pedro"
  "DEFAULT": "Consommateur"
  "COMPANY" : "Membre"
  "VENDOR" : "Vendeur"
}

 {{ 'USER.user' | translate }}

Чтобы изменить язык в функции браузера пользователя для вызова события кнопки, который будет использовать corect languege.

   $('.dropdown-menu>li>button').on('click', function () {
    switch (this.id) {
        case "en":
            Cookies.set('user_lang', 'en', { expires: 60 });
            break;
        case "no":
            Cookies.set('user_lang', 'no', { expires: 60 });
            break;
        case "pl":
            Cookies.set('user_lang', 'pl', { expires: 60 });
            break;
        default:
    }
});

function langTriger(code) {
   $(code).trigger('click'); // trigger button to call back-end event
};

function trigerUserLang() {
  switch (Cookies.get('user_lang')) {
    case "en":
        langTriger('#en'); 
        break;
    case "no":
        langTriger('#no');
        break;
    case "pl":
        langTriger('#pl');
        break;
    default:
};
}
...