带有命名空间的 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 的通用翻译文件。即使调用了 t
和 dass21::I found it hard to wind down
的调用。 (因为使用它的键可以在屏幕上看到它)。
如何确保它也尝试通过 http 加载特定于命名空间的文件,同时具有自定义命名空间分隔符?
如果您使用的是 i18next,请确保将所需的命名空间传递给 useTranslation 或 withTranslation 函数:https://react.i18next.com/guides/multiple-translation-files
或者,使用 ns init 选项并定义您的命名空间。
我正在尝试为现有应用程序设置本地化。我已经走得很远了。但是有点不对劲。
我的设置在文件中有多个翻译调用,如下所示:{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 的通用翻译文件。即使调用了 t
和 dass21::I found it hard to wind down
的调用。 (因为使用它的键可以在屏幕上看到它)。
如何确保它也尝试通过 http 加载特定于命名空间的文件,同时具有自定义命名空间分隔符?
如果您使用的是 i18next,请确保将所需的命名空间传递给 useTranslation 或 withTranslation 函数:https://react.i18next.com/guides/multiple-translation-files
或者,使用 ns init 选项并定义您的命名空间。