ember-i18n -内化支持



我目前正在使用jamesarosen/ember-i18n来支持我的ember 1.5.1应用程序的内部化。

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

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';

我找到了答案:

添加这个帮助器:

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';

使用更新后的handlebars reference:

{{i18n animal.cat}}

@Tom的解决方案很好,但只适用于助手。

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

在我看来,一旦你想改变语言环境,Em.I18n.translations的整个内容都可以改变。

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

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

最新更新