后备翻译文化>语言>默认

时间:2017-01-25 01:14:06

标签: angular typescript ionic2 ng2-translate

我正在开发一个Ionic2应用程序(Typescript),只是添加了i18n。

我正在用我的母语(en)开发 - 并且希望支持语言的文化变体(例如fr vs fr-CA vs vs fr-BE ......)。随着时间的推移,将开发和添加这些变体。

我在过去的项目中使用了requirejs i18n,并且能够在3 +级别进行语言回退/合并:即fr-CA-Quebec> fr-CA> fr>烯

我无法解决ng2-translate如何使用.use('').setDefaultLang('')获得2级以上的任何内容

我想要达到的目标是:

file: /i18n/fr-CA.json:
    {
        "dinner": "souper"
    }

file: /i18n/fr.json:
    {
        "hello": "bonjour",
        "dinner": "dîner"
    }

file: /i18n/en.json:
    {
        "title" "my title",
        "hello": "hello",
        "dinner": "dinner"
    }

因此,对于加拿大用户,我设置.use('fr-CA')setDefaultLang('en'),结果应为:

  • 晚餐> souper
  • 你好&gt; bonjour << this is the problem
  • title&gt;我的头衔

1 个答案:

答案 0 :(得分:0)

似乎没有人能够为我回答这个问题,所以我想出了一个解决方案,看起来不那么优雅,但是工作得很好。

首先,我设置了一个onLangChange处理程序:

translate.onLangChange.subscribe((event: LangChangeEvent) => {

  var langs = translate.getLangs();

  if (langs.length === 3) {
    var baseObs = translate.getTranslation(langs[1]);
    baseObs.subscribe(x => {
      //Here, I extend the cultural language with keys from the base language
      translate.setTranslation(langs[2], x, true);
    });
  }
});

接下来,我在基础和文化语言变体上调用lang.use(如果这种语言有文化部分)

translate.setDefaultLang('en');

let defLang = translate.getBrowserCultureLang();

const langParts = defLang.split('-');
if (langParts.length > 1 && langParts[0] !== 'en')
  translate.use(langParts[0]);

translate.use(defLang);