1

我目前正在使用 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';
4

2 回答 2

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}}
于 2014-05-07T13:47:51.400 回答
1

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

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

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

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

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

于 2014-06-11T03:32:56.133 回答