我目前正在使用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';
答案 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上设置任何监听器。它可以动态地完成,但它会变得更复杂。
除此之外,最好的选择可能是翻译来自后端。