Ember.js 余烬:如何在控制器代码中使用i18n翻译?

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'); } }) 我知道一个可能的解决办法是

我正在我的应用程序中使用Ember i18n。我还想在控制器中使用翻译字符串(在大多数情况下是在警报或确认消息中)。如何做到这一点

点击按钮应提示“信息”,而不是“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')