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