我正在做一个使用
i18next
、react-i18next
和 i18next-http-backend
的项目。有两个命名空间:common 是存储在应用程序中的翻译,而 db 是从后端获取的。初始化看起来像这样:
i18n
.use(LanguageDetector)
.use(HttpBackend)
.use(initReactI18next)
.init({
react: {
useSuspense: false,
},
fallbackLng: (code) => getLanguageCode(code),
ns: ["common", "db"],
defaultNS: "common",
fallbackNS: false,
lowerCaseLng: true,
cleanCode: true,
debug: Settings.DEBUG_I18NEXT,
resources,
backend: {
loadPath: `${Settings.API_BASE_HOST}/admin/api/translations/{{lng}}.json`,
},
})
.then(() => i18n.reloadResources(null, ["db"], () => {}));
问题是,当我有两个数据库键,例如
kp.key
和 kp.key.subkey
,其中第一个有所选语言的翻译,但第二个没有,t("kp.key.subkey")
被翻译成 kp.key
的翻译而不是返回它自己的默认值(键,空字符串或其他..)
我怎样才能让它不这样做?!?!?我觉得我已经弄乱了这里找到的所有可能的选项:https://www.i18next.com/overview/configuration-options 没有任何运气。使问题复杂化的一件事是,共同的翻译是嵌套的 JSON 结构,而数据库键作为平面 JSON 对象返回,键名是通常使用“.”的字符串。作为分隔符,但现在改变这个有点晚了..