我有一个节点应用程序,它使用i18next模块来处理i18n,但我遇到了一个我似乎无法解决的问题。
该应用程序内置于node
并使用express
框架。
在作为ap的入口点的主app.js
文件中,我需要i18n
模块并运行init
方法。
这是为了在客户端使用它。
稍后在另一个文件中,我尝试重置resGetPath
属性,以便将转换文件加载到与正常文件不同的位置(某些文件位于默认的locales/__lng__/__ns__.json
路径中,其他人在他们自己的单独文件夹中。)
我似乎无法在i18n
对象上找到一个特定方法来执行此操作,因此我一直尝试使用回调再次运行init
方法。
但即使我这样做,resGetPath
属性也不会更改,也不会从新文件中获取翻译字符串。
如果我在resGetPath
中的第一个init
来电中设置了app.js
属性,尽管它按预期工作(尽管它失去了locales/__lng__/__ns__.json
中的正常翻译)
基本上这就是我想要做的事情:
app.js
i18n.init({
detectLngQS: 'lang',
debug: false,
useCookie: false,
detectLngFromHeaders: true,
fallbackLng: ['en-GB', 'dev']
});
after-app.js
i18n.init({
resGetPath: path.join(__dirname, '../new-path.json')
}, function(t) {
// Here `t` does not get the strings in the new resGetPath
});
有人可以告诉我如何动态更改resGetPath
,或告诉我我做错了什么?
答案 0 :(得分:2)
我明白了。
您必须在运行i18n.sync.resStore = {}
之前运行init
,然后才会强制重新加载。