i18next:回退到[相同语言+不同名称空间]而不是[不同语言+相同名称空间]

时间:2015-04-16 21:14:05

标签: node.js i18next

这是关于在node.js后端使用i18next。 这是初始化:

i18next.init({
    lng: 'de',
    fallbackLng: ['de'],
    ns: {
        namespaces: ['formal', 'informal'],
        defaultNs: 'formal'
    },
    fallbackToDefaultNS: true,

    resStore: {
        de: resourcesDE,
        en: resourcesEN
    }
});

其中resourcesDE是一个具有结构{formal:{}的对象,非正式:{}}和resourcesEN具有相同的结构,但只有'正式',没有'非正式'(但即使有'非正式',我也有这个问题在resourcesEN)。

现在,我想要拥有的是:

如果我要求为英语翻译'非正式:myKey',那么搜索路线(==后备)是:

(en)'非正式:myKey'> (en)'myKey'> (de)'非正式:myKey'> (DE) '的myKey' 要么 (en)'非正式:myKey'> (en)'myKey'> (DE) '的myKey'

实际发生的是:

(en)'非正式:myKey'> (de)'非正式:myKey'> (DE) '的myKey'

意味着语言在尝试从不同的(默认)命名空间中获取相同语言的文本之前就会发生变化。

我怎样才能实现这一点或类似的东西。我也尝试过使用上下文而不是命名空间来实现这些替代方案,但这似乎表现得相同。我很高兴被证明是错的。

1 个答案:

答案 0 :(得分:0)

最终为我解决的解决方案:

我使用特殊的语言风格而不是命名空间:' de-INFORMAL'和' en-INFORMAL'。如果在' en-INFORMAL'下找不到标签,则查找将首先退回到' en'首先开箱即用。如果fallbackLng设置为' de'如果在' en'中找不到标签,它将会回退。