回退翻译文化>语言>默认
Fallback translations culture > language > default
我正在开发 Ionic2 应用程序 (Typescript) 并添加 i18n。
我正在使用我的母语 (en) 进行开发 - 并希望支持语言的文化变体(例如 fr vs fr-CA vs fr-BE...)。随着时间的推移,这些变体将被开发和添加。
我在过去的项目中使用过 requirejs i18n,它能够在 3 个以上级别上进行语言 fallback/merge:即 fr-CA-Quebec > fr-CA > fr > en
我无法在 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')
,结果应该是:
- 晚餐>汤
- 你好>你好
<< this is the problem
- 标题 > 我的标题
似乎没有人能够为我回答这个问题,所以我想出了一个解决方案,它看起来不够优雅,但效果很好。
首先,我设置了一个 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);
我正在开发 Ionic2 应用程序 (Typescript) 并添加 i18n。
我正在使用我的母语 (en) 进行开发 - 并希望支持语言的文化变体(例如 fr vs fr-CA vs fr-BE...)。随着时间的推移,这些变体将被开发和添加。
我在过去的项目中使用过 requirejs i18n,它能够在 3 个以上级别上进行语言 fallback/merge:即 fr-CA-Quebec > fr-CA > fr > en
我无法在 ng2-translate 中解决如何使用 .use('')
和 .setDefaultLang('')
我想实现的是:
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')
,结果应该是:
- 晚餐>汤
- 你好>你好
<< this is the problem
- 标题 > 我的标题
似乎没有人能够为我回答这个问题,所以我想出了一个解决方案,它看起来不够优雅,但效果很好。
首先,我设置了一个 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);