【问题标题】:Localization/Internationalization for Polymer 1.0Polymer 1.0 的本地化/国际化
【发布时间】:2023-07-07 01:58:01
【问题描述】:

我正在研究聚合物 1.0 的解决方案,但我发现很难理解它是如何工作的。 找到了这个https://github.com/Polymer/i18next-element,不幸的是它还没有准备好。同时我不知道如何使用 i18next。我正在尝试结合我能找到的所有信息,然后是 https://github.com/tabacha/javascript-i18n-example/blob/master/i18next/examle.htmlhttp://i18next.com/pages/sample.html 的任何组合,并确保查看 http://japhr.blogspot.gr/2014/02/getting-started-with-i18next-and-polymer.html 。 问题是,我似乎弄错了一切,即使是导入所需 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,我之前没有使用过,这就是为什么到目前为止我只尝试了上面提到的解决方案。

【问题讨论】:

    标签: localization internationalization polymer i18next


    【解决方案1】:

    事实证明,如果在触发语言选择事件的函数中正确使用和限定了一组函数,那么 i18next 确实可以使用 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】:

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

      【讨论】:

        【解决方案3】:

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

        元素实现行为后,你可以编写如下模板:

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

        它将在locale对象中搜索myString键并返回本地化字符串。

        您也可以使用this.localize('myString', locale) 以编程方式调用该方法。

        【讨论】: