我已经实现了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;)。其余的代码工作正常,因为我得到了所有翻译的文本。
我真正希望实现的是能够创建将作为翻译的一部分调用的变量(货币符号,公司名称,公司地址等...... - 用于关联公司目的),以及能够替换那些在翻译文本中重复的值。
我希望将这些变量放在一个地方,因此它们很容易调整,并且不会受到语言变化的影响。
答案 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":"$"}
data-i18n-options="{"currencysymbol": "$"}"
data-i18n-options="{"currencysymbol": "$"}"
答案 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: "__"
}
});