Ember.js 余烬:如何在控制器代码中使用i18n翻译?
我正在我的应用程序中使用Ember i18n。我还想在控制器中使用翻译字符串(在大多数情况下是在警报或确认消息中)。如何做到这一点 看 点击按钮应提示“信息”,而不是“T1005”Ember.js 余烬:如何在控制器代码中使用i18n翻译?,ember.js,Ember.js,我正在我的应用程序中使用Ember i18n。我还想在控制器中使用翻译字符串(在大多数情况下是在警报或确认消息中)。如何做到这一点 看 点击按钮应提示“信息”,而不是“T1005” {{t T1005}} {{t T1005}-单击我 CLDR.defaultLanguage='en'; App.ApplicationController=Ember.Controller.extend({ clickMe:function(){ 警报('T1005'); } }) 我知道一个可能的解决办法是
{{t T1005}}
{{t T1005}-单击我
CLDR.defaultLanguage='en';
App.ApplicationController=Ember.Controller.extend({
clickMe:function(){
警报('T1005');
}
})
我知道一个可能的解决办法是不再使用alert和confirm,并用引导替代品来代替它们。然而,我可以想象,在某些情况下,您会希望使用Javascript中的字符串做一些事情(例如,通过jQuery等更新某个标签)
任何关于如何在控制器中使用i18n字符串的想法都是有帮助的。只有当应用程序的所有方面都可以翻译时,使用i18n库才有用…刚刚找到了解决方案。只需通过
Ember.I18n.t(“T1005”)访问字符串即可代码>
jsidle更新:这里可能会晚些,但是使用文档中的Em.I18n.translateableproperty
mixin怎么样
你可以这样做:
App.ApplicationController = Ember.Controller.extend(Em.I18n.translateableProperties, {
messageTranslation: 'T1005',
clickMe: function(){
alert(this.get('message'));
}
});
在模板中,{{message}
也将保存翻译。对我有效的解决方案如下(使用Ember I18n):
cyclomarc的答案对我不起作用(它来自2013年,可能与此相关),但它为我指明了正确的方向:
this.container.lookup('service:i18n').t('my.translation.id')
为什么要查找?为什么不直接注入像i18n:Ember.inject.service()这样的服务呢?
将获得i18n服务对象.True(我刚刚了解到这个.container不推荐使用)。关键是:无论哪种方式,都可以从控制器中获取转换后的字符串,这就回答了问题。顺便说一句:我更喜欢查找
方式的情况是在else
中使用。如果只使用了几次,我不需要每次都注入服务。我们可以使用Ember.getOwner(this.lookup
而不是this.container
App.ApplicationController = Ember.Controller.extend(Em.I18n.translateableProperties, {
messageTranslation: 'T001',
showMessage: function(){
alert(this.get('message'));
}
});
this.container.lookup('service:i18n').t('my.translation.id')