我有一个I18n应用程序,它实际上加载了一个带有返回JSON的ajax调用的语言环境的翻译。
现在,它将JSON放入Em.STRINGS。在HTML中,我有一个手柄标签,上面写着这样的内容
{{translate context key="LOGOUT_LABEL"}}
我在JS中编写了一个看起来像这样的帮助器
Ember.Handlebars.registerHelper('translate', function(property, options) {
var key = options.hash && options.hash.key,
replacants = options.hash && options.hash.values, value;
if (key) {
value = Em.String.loc(key, replacants ? Em.String.w(replacants) : []);
return value ;
}
});
当这个运行时,我的HTML首先被绘制,接下来会发生AJAX调用。所以,翻译有效地不会出现!我该如何解决这个问题?
答案 0 :(得分:0)
这不起作用:
var App = Em.Application.create({
locale: 'en_US',
init: function () {
var locale = this.get('locale') || 'en_US';
$.get("http://localhost:8000/translations.json", {
locale: locale
}, function (data) {
Ember.STRINGS = data;
});
}
});
如果你更换AJAX-Call,实际上你的小提琴是有效的。对本地主机的Ajax调用无法在小提琴中起作用。查看工作版here。
<强>更新强> 如果要为此用例编写自己的帮助程序,则必须创建绑定帮助程序。这可以在最新的ember版本(ember doc)中找到。您的代码可能如下所示:
Em.Handlebars.registerBoundHelper('translate', function (property, options) {
var key = options.hash && options.hash.key,
replacants = options.hash && options.hash.values,
value;
if (key) {
value = Em.String.loc(key, replacants ? Em.String.w(replacants) : []);
console.log(value);
console.log(Ember.STRINGS);
return value;
}
}, "Ember.STRINGS");
注意:强> 有一个名为ember-i18n的项目。你可能应该以此为基础,而不是在如此低级别的api上工作。