带有命名空间的 i18next 不获取预期的翻译文件

i18next with namespace does not fetch expected translation file

我正在尝试为现有应用程序设置本地化。我已经走得很远了。但是有点不对劲。

我的设置在文件中有多个翻译调用,如下所示:{attribute: 'stress', text: t('dass21::I found it hard to wind down')},

如您所见,我将命名空间分隔符更改为双 ::,因为我有很多医学特定句子很难找到关键,所以实际句子是关键。

要将翻译导出到 json 翻译文件,我使用:i18next 'src/**/*.js',效果很好。它为每种语言创建一个文件夹,并在该文件夹中为每个命名空间创建一个文件。 (例如,在这种情况下,它将创建一个文件 dass21.json)。

我的 i18next-parser 配置是:

module.exports = {
  // Since keys hold regular english I can't have the default settings
  namespaceSeparator: '::',
  keySeparator: '_',
  pluralSeparator: "|",

  locales: ['en', 'es'],

  output: 'assets/locales/$LOCALE/$NAMESPACE.json',
}

我在 i18next 初始化中匹配这些设置,如下所示:

import i18next from "i18next";

import HttpApi from 'i18next-http-backend';

i18next
.use(HttpApi)
.init({
  backend: {
    // for all available options read the backend's repository readme file
    loadPath: '/assessments/locales/{{lng}}/{{ns}}.json',
  },

  fallbackLng: 'en',
  lng: 'en',
  supportedLngs: ['en', 'es'],

  namespaceSeparator: '::',
  keySeparator: '_',
  pluralSeparator: "|",
});

const t = i18next.t

export default t

如您所见,我想通过 HTTP 加载我的翻译文件(由节点服务器提供服务并且可以正常工作)。但是,它只尝试加载我的特定命名空间文件的名为 translation.js 和 none 的通用翻译文件。即使调用了 tdass21::I found it hard to wind down 的调用。 (因为使用它的键可以在屏幕上看到它)。

如何确保它也尝试通过 http 加载特定于命名空间的文件,同时具有自定义命名空间分隔符?

如果您使用的是 i18next,请确保将所需的命名空间传递给 useTranslation 或 withTranslation 函数:https://react.i18next.com/guides/multiple-translation-files

或者,使用 ns init 选项并定义您的命名空间。