i18next translator missingKey en translation

时间:2017-09-12 08:06:43

标签: jquery i18next

我正试图在我的网站上实施i18next翻译,但无法取得成功。

i18next.init({
    debug: true,
    lng: 'en',
    resources: {
        en: {
            translation: {
                opt: {
                    page_title: 'Orders'
                },
            }
        },
        ru: {
            translation: {
                opt: {
                    page_title: 'Заказы'
                },
            }
        }
    }, function(err, t) {
        jqueryI18next.init(i18next, $);
    });

我的系统的某些部分需要有一组命名变量的词汇表。

i18next.addResources('en', 'desktop', {
    'Авиа'                          :   'Avia',
    'Ж/Д'                           :   'Train',
    'Произвольная услуга'           :   'Custom Service',

    'Текущий баланс'                :   'Current balance',
    'Оборот за предыдущий месяц'    :   'Turnover for the previous month',
    'Оборот за текущий месяц'       :   'Turnover for the current month',
    'Общий оборот'                  :   'Total turnover',
});

i18next.loadNamespaces('desktop');

下一个等式没有成功:

var fincanceDict = {
    company_balance                 :   $.t('Текущий баланс'),
    company_turnover_prev_month     :   $.t('Оборот за предыдущий месяц'),
    company_turnover_current_month  :   $.t('Оборот за текущий месяц'),
    company_turnover_full           :   $.t('Общий оборот')
}

我为每个翻译操作收到错误:

i18next.js?v=e988b1:142 i18next::translator: missingKey en translation Текущий баланс Текущий баланс
i18next.js?v=e988b1:142 i18next::translator: missingKey en translation Оборот за предыдущий месяц Оборот за предыдущий месяц
i18next.js?v=e988b1:142 i18next::translator: missingKey en translation Оборот за текущий месяц Оборот за текущий месяц
i18next.js?v=e988b1:142 i18next::translator: missingKey en translation Общий оборот Общий оборот

如果我查看i18next.translator.resourceStore.data我将获得en&的初始词汇。 ru语言对象与translation孩子拥有一组嵌套键/值对而没有我做过的扩展。

我填写了我遗漏的内容,我已尝试将namespace更改为default并返回desktop但两者都没有帮助。

2 个答案:

答案 0 :(得分:1)

loadNamespace - >确实通过后端加载命名空间(例如xhr-backend):https://www.i18next.com/api.html#loadnamespaces

翻译是默认的命名空间,这就是为什么你可以在不使用t函数的情况下访问翻译的原因。 https://www.i18next.com/configuration-options.html#languages-namespaces-resources

你可以创建一个" fixedT"功能

const desktopT = i18next.getFixedT(null, 'desktop');
desktopT('Текущий баланс');

答案 1 :(得分:0)

我在谷歌上搜索,找到了解决我的问题的东西,没有任何描述。我应该在$("#input_1_191").keyup(function() { if ($("#choice_1_190_2").is(':checked')) { var value = $(this).val(); $("#input_1_193").val(value); } }).keyup(); / i18next.t函数中使用名称空间值:

$.t

i18next.t('namespace:key')

这就是我解决问题的方法:

$.t('namespace:key')

我想知道如果我每次都要手动设置翻译$.t('desktop:Текущий баланс') i18next.loadNamespaces函数的作用是什么。