ember-i18n - 内化支持

时间:2014-05-07 13:24:52

标签: javascript jquery ember.js internationalization ember-i18n

我目前正在使用jamesarosen / ember-i18n在我的ember 1.5.1 app上进行内部化支持。

我有两种语言。英语和法语。

Em.I18n.translations = {
  en: {
    animal: {
      cat: 'cat',
      dog: 'dog'
    }
  },

  fr: {
    animal: {
      cat: 'chat',
      dog: 'chien'
    }
  }
};

在我的车把模板中,我有: -

{{t animal.cat}}

但是我收到了消息:

  

缺少翻译:animal.cat。

如果我放置它会起作用:

{{t en.animal.cat}} or {{t fr.animal.cat}}

使这种方法工作并使其在两种语言之间自动切换的最佳做法是什么?我已经尝试将此设置在我的文件顶部:

Em.I18n.locale = 'fr';

2 个答案:

答案 0 :(得分:2)

我找到了答案:

添加此助手:

Ember.Handlebars.registerHelper('i18n', function(property, options) {
  var params = options.hash,
      self = this;

  // Support variable interpolation for our string
  Object.keys(params).forEach(function (key) {
    params[key] = Em.Handlebars.get(self, params[key], options);
  });

  property = Em.I18n.locale + '.' + property;

  return Em.I18n.t(property, params);
});

确保设置:

Em.I18n.locale = 'en';

使用更新的把手参考:

{{i18n animal.cat}}

答案 1 :(得分:1)

@Tom's solution很好但只适用于助手。

更一般地说,如果你想使用例如Em.I18n.TranslateableProperties,您必须单独处理它们。

在我看来,一旦您想要更改区域设置,就可以更改Em.I18n.translations的全部内容。

这需要刷新页面,因为你没有在Ember.I18n.locale上设置任何监听器。它可以动态地完成,但它会变得更复杂。

除此之外,最好的选择可能是翻译来自后端。