react-i18next 回退后端组合问题
react-i18next fallback backend combination issue
我已经使用“i18next-chained-backend”库来加载多个 i18n 后端,但它似乎并没有像我预期的那样工作。我希望它会从这些后端加载多个资源,然后当我翻译一些键时,它会按顺序在这些后端上逐个检查该键。
目前,我认为当第一个后端成功加载时,它将使用该后端并忽略其余部分。我怎样才能达到我的期望?感谢您的帮助,提前致谢。
为此,您可能需要创建自己的 i18next 后端插件:https://www.i18next.com/misc/creating-own-plugins
这是我解决多个后端问题的设置:
例如我有 2 个后端调用:backend1(第一优先级)、backend2。
在 backend1 上,我创建了 namespace1,然后将 namespace1 作为默认命名空间。
在 backend2 上,我创建了 namespace2,然后将 namespace2 作为后备命名空间。
所以在 namespace1 (backend1) 我有
{
"key1": "different Key1"
}
在命名空间 2(后端 2)中我有
{
"key1": "Key1",
"key2": "Key2"
}
结果如下:
t("key1") 将是 "different Key1" --> 因为它默认在 namespace1 中找到(因为它是第一优先级)
t("key2") 将是 "Key2" --> 因为在命名空间 1 中找不到它,所以它将查看后备命名空间 (namespace2)。
如果有人偶然发现并使用 phrase.com、following their tutorial - 您必须调整相应的代码以加载短语后端。如果不进行调整,resourcesToBackend 函数将覆盖您的 localTranslation
.
const localResources = {
'en-US': {
localTranslation: translationEN,
},
};
...
const backendPhrase = resourcesToBackend((language, namespace, callback) => {
if (namespace === 'localTranslation') {
// we don't want to let phrase.com overwrite the localTranslation
callback(null, null);
return;
}
phrase
.requestTranslation(language)
.then((remoteResources) => {
callback(null, remoteResources);
})
.catch((error) => {
callback(error, null);
});
稍后在初始化您的 i18n 实例时 - 相应地配置名称空间:
...
ns: ['localTranslation', 'translation'],
defaultNS: 'translation',
fallbackNS: 'localTranslation',
...
我已经使用“i18next-chained-backend”库来加载多个 i18n 后端,但它似乎并没有像我预期的那样工作。我希望它会从这些后端加载多个资源,然后当我翻译一些键时,它会按顺序在这些后端上逐个检查该键。
目前,我认为当第一个后端成功加载时,它将使用该后端并忽略其余部分。我怎样才能达到我的期望?感谢您的帮助,提前致谢。
为此,您可能需要创建自己的 i18next 后端插件:https://www.i18next.com/misc/creating-own-plugins
这是我解决多个后端问题的设置:
例如我有 2 个后端调用:backend1(第一优先级)、backend2。
在 backend1 上,我创建了 namespace1,然后将 namespace1 作为默认命名空间。
在 backend2 上,我创建了 namespace2,然后将 namespace2 作为后备命名空间。
所以在 namespace1 (backend1) 我有
{
"key1": "different Key1"
}
在命名空间 2(后端 2)中我有
{
"key1": "Key1",
"key2": "Key2"
}
结果如下:
t("key1") 将是 "different Key1" --> 因为它默认在 namespace1 中找到(因为它是第一优先级)
t("key2") 将是 "Key2" --> 因为在命名空间 1 中找不到它,所以它将查看后备命名空间 (namespace2)。
如果有人偶然发现并使用 phrase.com、following their tutorial - 您必须调整相应的代码以加载短语后端。如果不进行调整,resourcesToBackend 函数将覆盖您的 localTranslation
.
const localResources = {
'en-US': {
localTranslation: translationEN,
},
};
...
const backendPhrase = resourcesToBackend((language, namespace, callback) => {
if (namespace === 'localTranslation') {
// we don't want to let phrase.com overwrite the localTranslation
callback(null, null);
return;
}
phrase
.requestTranslation(language)
.then((remoteResources) => {
callback(null, remoteResources);
})
.catch((error) => {
callback(error, null);
});
稍后在初始化您的 i18n 实例时 - 相应地配置名称空间:
...
ns: ['localTranslation', 'translation'],
defaultNS: 'translation',
fallbackNS: 'localTranslation',
...