9

我已经实现了 i18next,在获得了几个问题的帮助后,一切正常。我仍然无法理解支持站点上的部分文档。

我正在尝试复制这部分(在此处找到):

// given resources
{           
  'en-US': { translation: {  key: '__myVar__ are important' } }
};

i18n.t("key", { myVar: "variables" }); // -> variables are important

就我而言,这是 JSON 文件:

{
    "app": {"name": "mytranslation" },
    "back": "Back",
    "cancel": "Cancel",
    "closemenu": "Close Menu",
    "closeoptions": "Close options",
    "currency": "Currency symbol is __currencysymbol__",
    "date": "Date",
    "description": "Description"
}

和 HTML:

<body>
    <div data-i18n="currency"></div>
    <script src="javascript/i18next-1.7.3.min.js"></script>
    <script language="javascript" type="text/javascript">
        i18n.init({ preload: ['en', 'fr', 'ht', 'es', 'de', 'zh', 'vi', 'pt', 'it', 'th', 'dev'] });
        i18n.init({ detectLngQS: 'lang' });
        i18n.init(function(t) { 
            $("body").i18n();
            var appName = t("app.name");
        });
        i18n.t("currency", { currencysymbol: "$" }); //where do I place this code???
    </script>
</body>

注意: jQuery 2.1.1 和 jQuery Mobile 1.4.2 加载在标头中。

我确定我没有将各个部分放在它们应该去的地方,因为它不起作用(没有插入变量“currencysymbol”)。其余代码工作正常,因为我得到了所有翻译文本。

我真正想要实现的是能够创建将被称为翻译的一部分的变量(货币符号、公司名称、公司地址等...... - 用于附属目的),并能够替换那些值,因为它们在翻译文本中重复。

我想把这些变量放在一个地方,这样它们很容易调整,并且不会受到语言变化的影响。

4

2 回答 2

9

为了让 i18next 在i18n()针对 DOM 的一部分调用方法时插入变量,您必须:

  • useDataAttrOptions在初始化时设置选项
  • data-i18n-options在目标元素的属性中提供变量的值

您的示例 HTML 将变为:

<body>
    <div data-i18n="currency"
         data-i18n-options='{"currencysymbol": "$"}'></div>
    <script src="javascript/i18next-1.7.3.min.js"></script>
    <script language="javascript" type="text/javascript">
        i18n.init({
            preload: ['en', 'fr', 'ht', 'es', 'de', 'zh', 'vi', 'pt', 'it', 'th', 'dev'],
            detectLngQS: 'lang',
            useDataAttrOptions: true
        }, function(t) {
            $("body").i18n();
            var appName = t("app.name");
        });
    </script>
</body>

注意:选项是一个 JSON 对象,因此正确引用是必不可少的。在上面的代码中,data-i18n-options为了便于阅读,属性的值写在简单的引号之间。但出于品味、便利或受虐倾向的问题,您可以选择以下任何一种,也是有效的 HTML 选项:

  • 未引用:data-i18n-options={"currencysymbol":"$"}
  • 用 HTML 实体双引号:data-i18n-options="{&quot;currencysymbol&quot;: &quot;$&quot;}"
  • 用数字实体双引号:data-i18n-options="{&#34;currencysymbol&#34;: &#34;$&#34;}"
于 2014-07-31T17:54:27.510 回答
6

如今,您默认不使用__this__。你用{{this}}.

看这个例子:

{
    "key": "{{what}} is {{how}}"
}

i18next.t('key', { what: 'i18next', how: 'great' });

https://www.i18next.com/translation-function/interpolation

不过,插值的前缀/后缀可能会被覆盖。

i18next.init({
  interpolation: { 
    prefix: "__",
    suffix: "__"
  }
});
于 2018-12-10T17:21:10.330 回答