替换i18next中的变量

时间:2014-06-13 17:25:24

标签: jquery variables jquery-mobile i18next

我已经实现了i18next,在获得有关几个问题的帮助后,一切正常。 我仍然有一些问题需要了解支持网站上的部分文档。

我试图复制这部分(找到here):

// 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都加载在标题中。

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

我真正希望实现的是能够创建将作为翻译的一部分调用的变量(货币符号,公司名称,公司地址等...... - 用于关联公司目的),以及能够替换那些在翻译文本中重复的值。

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

2 个答案:

答案 0 :(得分:9)

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

  • 在初始时设置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;}"

答案 1 :(得分:0)

如今,您默认不使用__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: "__"
  }
});