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

时间:2013-08-05 21:05:02

标签: ember.js

我在我的应用中使用Ember i18n。我还想在控制器中使用翻译字符串(在大多数情况下,在警报或确认消息中)。怎么办呢?

请参阅http://jsfiddle.net/cyclomarc/36VS3/2/

点击按钮应提醒“信息”,而不是“T1005”......

<script type="text/x-handlebars">
    {{t T1005}}<br>
    <button {{action 'clickMe' content}}>{{t T1005}} - Click me</button>
</script>

CLDR.defaultLanguage = 'en';

App.ApplicationController = Ember.Controller.extend({
    clickMe: function(){
        alert('T1005');
    }
})

我知道可能的解决方法是不再使用警报并确认并替换它们,例如bootstrap替代品。但是,我可以想象在某些情况下你会想要用Javascript中的字符串做一些事情(例如通过jQuery更新某个标签)。

有关如何在控制器中使用i18n字符串的任何想法都很有帮助。使用i18n库只有在应用程序的所有方面都可以翻译时才有用......

4 个答案:

答案 0 :(得分:4)

刚刚找到解决方案。只需通过Ember.I18n.t("T1005");

访问字符串即可

JSFiddle已更新:http://jsfiddle.net/cyclomarc/36VS3/7/

答案 1 :(得分:1)

可能会迟到,但是如here所述使用Em.I18n.TranslateableProperties mixin呢?

您可以执行以下操作:

App.ApplicationController = Ember.Controller.extend(Em.I18n.translateableProperties, {
    messageTranslation: 'T1005',

    clickMe: function(){
        alert(this.get('message'));
    }
});

在模板中,{{message}}也会保留翻译。

答案 2 :(得分:0)

对我有用的解决方案如下(使用Ember I18n):

App.ApplicationController = Ember.Controller.extend(Em.I18n.translateableProperties, {
  messageTranslation: 'T001',

  showMessage: function(){
    alert(this.get('message'));
  }
});

答案 3 :(得分:0)

来自cyclomarc的答案对我不起作用(它可能与2013年相关),但它指出了我正确的方向:

this.container.lookup('service:i18n').t('my.translation.id')