我正在研究聚合物1.0的解决方案,但我发现很难理解它是如何工作的。 发现这个https://github.com/Polymer/i18next-element,遗憾的是还没有准备好。同时我无法弄清楚如何使用i18next。我试图将我能找到的所有信息,https://github.com/tabacha/javascript-i18n-example/blob/master/i18next/examle.html与http://i18next.com/pages/sample.html的任意组合结合起来,并确保查看{{3} }。 问题是,我似乎弄错了所有内容,甚至是第一次导入所需的JSON字段的初始化。 对于初学者来说,i18next基于javascript函数,由于语法不同,这些函数无法在聚合物就绪函数内工作。
所以我的问题是,我遇到了什么问题,或者这对聚合物来说真的很难吗?有人有一个工作的例子可以分享吗?
试着用一个例子来解释我的意思,假设我的聚合物应用程序中有一个包含所有按钮标签的列表,其中标签以选择JSON文件的语言存储。 所以在属性中我得到一个空的buttons_list类型:数组属性。 准备好了:function()我按照文档中的步骤(当然导入了i18next.js文件之后)
var option = { resGetPath: '/localizeddata/english.json' };
i18n.init(option);
var bvalue1 = i18n.t("buttons.value1");
var bvalue2 = i18n.t("buttons.value2");
this.buttons_list = {value1: bvalue1,value2: bvalue2}
buttons_list似乎将buttonvalue1和2识别为未定义的值。
PS:我注意到很多人使用Dart,我之前没有使用它,这就是为什么到目前为止我只尝试过上面提到的解决方案。答案 0 :(得分:2)
这可能不是您问题的直接答案,但它仍然是一个解决方案。我们在Polymer 1.0中做了our own i18n behavior。
元素实现行为后,您可以按如下方式编写模板:
<template>
<span>[[localize('myString', locale)]]</span>
</template>
它将搜索myString
对象中的locale
键并返回本地化字符串。
您也可以使用this.localize('myString', locale)
以编程方式调用该方法。
答案 1 :(得分:1)
事实证明,如果在触发语言选择事件的函数中正确使用了一组函数并确定了范围,那么使用i18next确实可以实现Polymer 1.0中的国际化/本地化。
在语言选择功能中,这里是我输入的语法(更详细)
somefunction: function(){
var option = { resGetPath: '/localizeddata/english.json' };
i18n.init(option);
(function(ok) {
i18n.init(function(t) {
arg = {
var value1 = i18n.t("buttons.value1"),
var value2 = i18n.t("buttons.value2")
}
ok.secondaryfunction(arg);
});
})(this);
}
secondaryfunction:function(n){
this.buttons_list = n
}
这样我从secondaryfunction
中获得的内容就是整个页面的范围,并在secondaryfunction
中使用,其中(如果双重绑定正确)集合保持更新。
事情是,必须注意功能何时以及如何加载。
答案 2 :(得分:0)
我刚刚发布了一个简单的(大量开发中)元素(请参阅gitlab或阅读here)。它异步加载转换文件,使用非常简单:
<!-- Import it in head -->
<link rel="import" href="bower_components/quaintous-i18n/quaintous-i18n.html">
<!-- initialize it in body -->
<quaintous-i18n locales-path="/locales/fa.json"></quaintous-i18n>
现在您可以通过各种方式使用它:
I18N
作为元素behavior并翻译您的数据绑定,例如{{__('hello')}}
I18N
对象,例如I18N.__('hello')