i18next - все языки в одном файле .json

Как я могу заставить 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, но это просто не лучший способ использовать эту библиотеку.


person Fractalf    schedule 25.03.2014    source источник


Ответы (1)


Предположим, что ваш translation.json загружен и назначен переменной с именем resStore:

var resStore = {
    en: { 
        translation: {
            test: "some string"
        }
    },
    no: { 
        translation: {
            test: "litt tekst"
        }
    }
};

Затем вы можете переопределить функцию загрузки ajax по умолчанию с помощью функции customLoad. Пример может выглядеть так:

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"
});

новое обновление 20 марта 2015 г.

Вы можете просто передать хранилище ресурсов с опцией resStore:

i18n.init({ resStore: resources });
person Cheton Wu    schedule 18.03.2015