【问题标题】:i18next translator missingKey en translationi18next 翻译缺失Key en 翻译
【发布时间】:2017-09-12 22:03:12
【问题描述】:

我正在尝试在我的网站上实现 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,我将获得enru 语言对象的初始词汇表,其中translation 孩子拥有一组嵌套的键/值对,我没有扩展。

我补充说我遗漏了一些东西,我尝试将 namespace 更改为 default 并返回到 desktop 都没有帮助。

【问题讨论】:

    标签: jquery i18next


    【解决方案1】:

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

    translation 是默认命名空间,这就是为什么您可以在其中访问翻译而无需在 t 函数中添加它。 https://www.i18next.com/configuration-options.html#languages-namespaces-resources

    你可以创建一个“fixedT”函数

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

    【讨论】:

      【解决方案2】:

      我在谷歌上四处搜索,发现了一些可以解决我的问题但没有描述的东西。我应该在 i18next.t / $.t 函数中使用命名空间值:

      i18next.t('namespace:key')

      $.t('namespace:key')

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

      $.t('desktop:Текущий баланс')
      

      我想知道如果我每次都要手动设置翻译namespacei18next.loadNamespaces 函数会做什么。

      【讨论】:

        猜你喜欢
        • 2016-12-28
        • 2012-10-27
        • 2015-11-04
        • 1970-01-01
        • 2021-04-21
        • 2017-07-22
        • 2021-06-26
        • 2021-08-14
        • 2015-12-27
        相关资源
        最近更新 更多