2

我在我的应用程序中使用 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');
    }
})

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

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

4

4 回答 4

4

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

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

于 2013-08-05T21:05:45.947 回答
1

这里可能会迟到,但是使用这里Em.I18n.TranslateableProperties记录的 mixin怎么样?

您可以执行以下操作:

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

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

在模板中,{{message}}还会保存翻译。

于 2014-01-30T14:39:16.810 回答
0

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

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

  showMessage: function(){
    alert(this.get('message'));
  }
});
于 2015-01-05T09:20:54.943 回答
0

cyclomarc 的答案对我不起作用(它是从 2013 年开始的,这可能是相关的),但它为我指明了正确的方向:

this.container.lookup('service:i18n').t('my.translation.id')
于 2017-07-11T11:20:57.997 回答