替换i18next中的变量

7 variables jquery jquery-mobile i18next

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

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

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

i18n.t("key", { myVar: "variables" }); // -> variables are important
Run Code Online (Sandbox Code Playgroud)

就我而言,这是JSON文件:

{
    "app": {"name": "mytranslation" },
    "back": "Back",
    "cancel": "Cancel",
    "closemenu": "Close Menu",
    "closeoptions": "Close options",
    "currency": "Currency symbol is __currencysymbol__",
    "date": "Date",
    "description": "Description"
}
Run Code Online (Sandbox Code Playgroud)

和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>
Run Code Online (Sandbox Code Playgroud)

注意:jQuery 2.1.1和jQuery Mobile 1.4.2都加载在头文件中.

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

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

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

Eri*_*don 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>
Run Code Online (Sandbox Code Playgroud)

注意:选项是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;}"


may*_*yid 6

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

看这个例子:

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

i18next.t('key', { what: 'i18next', how: 'great' });
Run Code Online (Sandbox Code Playgroud)

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

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

i18next.init({
  interpolation: { 
    prefix: "__",
    suffix: "__"
  }
});
Run Code Online (Sandbox Code Playgroud)