如何让i18next只从一个文件加载所有语言?
我设法通过将每种语言放在一个单独的文件(translation-en.json,translation-no.json等)中来设法,并设法使用resStore选项输入语言,但是将它们全部放在一个单独的位置.json文件在任何地方都没有记录(我已经搜索了4个小时+现在)
我的js代码:
i18n.init({
debug: true,
lng: 'en',
resGetPath: 'translation.json'
},
function(t) {
console.log(t('test'));
});
我的translation.json文件:
{
en: {
translation: {
test: "some string"
}
},
no: {
translation: {
test: "litt tekst"
}
}
}
好的,所以我设法" hack"它将一个对象放入一个单独的.js文件中,将其包含在脚本标记中并使用resStore加载它,但这不是使用此库的最佳方法。
答案 0 :(得分:1)
假设您的translation.json
已加载并分配给名为resStore
的变量:
var resStore = {
en: {
translation: {
test: "some string"
}
},
no: {
translation: {
test: "litt tekst"
}
}
};
接下来,您可以使用customLoad
功能覆盖默认的ajax加载功能。示例可能如下所示:
var options = {
lng: 'en',
load: 'current',
lowerCaseLng: true,
fallbackLng: false,
resGetPath: 'i18n/__lng__/__ns__.json',
customLoad: function(lng, ns, options, loadComplete) {
var data = resStore[lng][ns];
loadComplete(null, data); // or loadComplete('some error'); if failed
},
ns: {
namespaces: ['translation'],
defaultNs: 'translation'
}
};
i18n.init(options, function(t) {
t('test'); // will get "some string"
});
2015年3月20日的最新动态
您只需使用resStore
选项传递资源商店:
i18n.init({ resStore: resources });