我使用I18Next作为一个基于JavaScript的转换解决方案,这里是需要采取什么措施:自动加载i18next
- 默认命名空间“核心”被加载。它包含我想要的大多数键,但不是全部。
- 没有命名空间,没有固定的名单:所以我不能只告诉
i18n.init
的ns.namespace
正是我想要。 - 在页面加载过程中,可选地,一些“模块”被加载到应用程序中,并且它们也需要被翻译。他们应该在某处报告他们的i18n名称空间名称,然后国际化使该名称空间的键可用。
基本上是有i18next自动加载的命名空间的方式,因为他们叫什么名字?保证通过t("[SomeNamespace]Key.Key2");
调用的名称空间是有效的,当然存在。问题很简单,i18next不能“自动加载”,我无法找到一种方法使i18n“手动”加载资源文件之后 i18n.init被调用。
这是我目前的代码。
$.i18n.init(
{
lng: "en",
fallbackLng: "en",
useCookie: false,
resGetPath: "System/i18n/__ns__/__lng__.json",
ns: "Core"
},
function(t) {
System.I18N = t;
alert(System.I18N("LoginUI:Messages.Name"));
}
);
正如预期的那样,它只是表明我LoginUI:Messages.Name
,而不是翻译System/i18n/LoginUI/en.json
:
{
"Messages": {
"Name": "Logon Interface"
}
}
(核心/ en.json在这种情况下不相关的所有我现在需要的是“LoginUI/EN以.json”被自动加载或者我可以强制进行手动装载。)
作为加载资源工作在默认情况下异步自动加载不是简单地实现。但是您可以将新的命名空间添加到您的配置中,您可以使用它来初始化i18next并仅重新启动它。可能不是最好的解决方案...只要在github上添加一个这样的功能请求...将为下一个版本添加这样的功能。 – jamuhl
打开功能请求:https://github.com/jamuhl/i18next/issues/109 – dna