【问题标题】:i18next - All languages in one .json filei18next - 一个 .json 文件中的所有语言
【发布时间】:2014-05-04 00:25:44
【问题描述】:

如何让 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"
        }
    }
}

好的,所以我设法通过将对象放入单独的 .js 文件中来“破解”它,将其包含在脚本标签中并使用 resStore 加载它,但这并不是使用此库的最佳方式.

【问题讨论】:

    标签: i18next


    【解决方案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 });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-25
      • 2021-11-19
      • 2020-09-09
      • 2021-03-22
      • 2013-10-07
      • 2023-01-15
      相关资源
      最近更新 更多