i18next - 一个.json文件中的所有语言

时间:2014-03-25 21:36:24

标签: i18next

如何让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加载它,但这不是使用此库的最佳方法。

1 个答案:

答案 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 });