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

Node.js i18next:回退到[相同语言+不同名称空间],而不是[不同语言+相同名称空间],node.js,i18next,Node.js,I18next,这是关于在node.js后端中使用i18next的。 这是初始化: i18next.init({ lng: 'de', fallbackLng: ['de'], ns: { namespaces: ['formal', 'informal'], defaultNs: 'formal' }, fallbackToDefaultNS: true, resStore: { de: resourcesDE,

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

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

    resStore: {
        de: resourcesDE,
        en: resourcesEN
    }
});
其中resourcesDE是一个结构为{formal:{},normal:{}的对象,resourcesEN具有相同的结构,但只有“formal”,没有“normal”,但即使resourcesEN中有“normal”,我也有这个问题

现在,我想要的是:

如果我请求将“非正式:myKey”翻译成英语,则搜索路径==回退为:

非正式的:myKey'>en'myKey'>de'unformal:myKey'>de'myKey' 或 非正式用语:myKey'>en'myKey'>de'myKey'

但实际情况是:

非正式的:myKey'>de'非正式的:myKey'>de'myKey'

这意味着,在尝试从不同的默认名称空间获取相同语言的文本之前,语言会发生更改


我怎样才能做到这一点,或者沿着这些思路去做。我也尝试过在这些备选方案中使用上下文而不是名称空间,但其行为似乎是相同的。不过,我很高兴被证明是错的。

最终为我找到的解决方案是:

我不使用名称空间,而是使用特殊的语言风格:“de-unformal”和“en-unformal”。如果在“en非正式”下未找到标签,则查找将返回到“en”,首先是开箱即用。如果fallbackLng设置为“de”,则如果中的标签未在“en”中找到,它也将返回到“de”