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',
...