Localization/Internationalization 聚合物 1.0

Localization/Internationalization for Polymer 1.0

我正在研究 Polymer 1.0 的解决方案,但我发现很难理解它是如何工作的。 找到这个 https://github.com/Polymer/i18next-element which is unfortunately not even ready yet. Meanwhile I cannot figure out how to use i18next.I'm trying to combine all the info i can find, followed https://github.com/tabacha/javascript-i18n-example/blob/master/i18next/examle.html with any combinations from http://i18next.com/pages/sample.html and made sure to take a look at http://japhr.blogspot.gr/2014/02/getting-started-with-i18next-and-polymer.html 。 问题是,我似乎弄错了一切,甚至是导入所需 JSON 文件的第一个初始化。 对于初学者来说,i18next 基于 javascript 函数,由于语法差异,这些函数无法在聚合物就绪函数中运行。

所以我的问题是,我是不是弄错了什么,或者这真的很难用聚合物来做吗?有人有工作示例可以分享吗?

试着用一个例子来解释我的意思,假设我的聚合物应用程序中有一个包含所有按钮标签的列表,其中标签存储在选择语言 JSON 文件中。 所以在属性中我得到了一个空的 buttons_list 类型:数组 属性。 然后在 ready: 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,我以前没用过,所以到目前为止我只尝试了上面提到的解决方案。

这可能不是您问题的直接答案,但它仍然是一个解决方案。我们在 Polymer 1.0 中制作了 our own i18n behavior

元素实现行为后,您可以按如下方式编写模板:

<template>
    <span>[[localize('myString', locale)]]</span>
</template>

它会搜索 locale 对象中的 myString 键和 return 本地化字符串。

您也可以使用 this.localize('myString', locale).

以编程方式调用该方法

事实证明,如果在触发语言选择事件的函数中正确使用和限定了一组函数,那么 Polymer 1.0 中的 internationalization/localization 确实可以使用 i18next。

在语言选择功能中,这是我输入的语法(更详细)

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 中使用(如果双绑定正确)集合保持更新。 问题是,必须小心函数加载的时间和方式。

我刚刚发布了一个简单的(大量开发中的)元素(在 gitlab or read about it 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')