i18next动态更改resGetPath

时间:2015-05-26 09:51:34

标签: javascript node.js express i18next

我有一个节点应用程序,它使用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,或告诉我我做错了什么?

1 个答案:

答案 0 :(得分:2)

我明白了。

您必须在运行i18n.sync.resStore = {}之前运行init,然后才会强制重新加载。