ngx-translate / core:即时方法从默认lang返回对象

时间:2018-12-28 11:05:56

标签: angular angular7 ngx-translate

语言回退不适用于西班牙用户,而是将[object Object]显示为转换后的值

场景:

en.json

"USER" : "User"

es.json

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

fr.json:

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

用法:

{{ 'USER' | envlabel }}

环境标签:通过检查用户类型进行翻译的管道

说明:

  • 对于en用户:应始终将“用户”显示为翻译后的标签
  • 对于es用户:如果用户类型为company或,则应显示“ Miembro” 如果用户类型为供应商,则为“供应商”;对于任何其他类型,为“用户”
  • 对于fr用户:如果用户类型是company或,则应显示“ Membre” 如果用户类型为供应商,则为“供应商”,对于任何其他类型,则为“咨询师”

实施:

  • 对于每个步骤,我们都有逻辑来检查“ USER。$ {TYPE}”类型以及是否 找不到,我们删除了类型,只翻译了“ USER”。
  • 对于西班牙用户:“ USER.COMPANY”和“ USER.VENDOR”将可以使用, 但是“ USER.DEFAULT”将不起作用。
  • 因此我们确实使用“ USER”进行翻译,该“ USER”从“ es.json”返回对象
  • 这是在“ angular-translate”中从“ en.json”返回“ User”
    而不是“ es.json”中的对象

现在解决:为了使其正常工作,我们通过使用use(defaultLang)更改语言并获取翻译后的字符串,然后在返回翻译后的文本之后再次使用(userLang)。

1 个答案:

答案 0 :(得分:0)

setDefaulrLang()仅对appComponent中app中的所有用户使用,或者如果您从浏览器中获得用户位置,则可以对其进行更改。我认为最好的方法是学习.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语言。

   $('.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:
};
}