Internationalization 将翻译插入到带有徽标.js的占位符中

Internationalization 将翻译插入到带有徽标.js的占位符中,internationalization,ember.js,emblem.js,Internationalization,Ember.js,Emblem.js,我正在尝试用ember.js/embody.js编写一个登录表单。一切正常,除非我尝试像这样设置占位符: Em.TextField valueBinding="view.username" placeholder="#{t 'users.attributes.username}" Em.TextField valueBinding="view.password" placeholder="#{t 'users.attributes.password'}" type="password" 如果我

我正在尝试用ember.js/embody.js编写一个登录表单。一切正常,除非我尝试像这样设置占位符:

Em.TextField valueBinding="view.username" placeholder="#{t 'users.attributes.username}"
Em.TextField valueBinding="view.password" placeholder="#{t 'users.attributes.password'}" type="password"
如果我尝试以下操作,我会得到相同的响应:

= input value=view.username placeholder="#{t 'users.attributes.username}"
= input value=view.password placeholder="#{t 'users.attributes.password'}" type="password"
在这两种情况下,我都会收到以下错误消息:

Pre compilation failed for: form
. . . .
Compiler said: Error: Emblem syntax error, line 2: Expected BeginStatement or DEDENT but "\uEFEF" found.   Em.TextField valueBinding="view.username" placeholder="#{t 'users.attributes.username}"
我假设发生这种情况是因为我试图从已经编译的语句中编译某些内容。为了证明这一点,如果我将代码更改为:

input value=view.username placeholder="#{t 'users.attributes.username}"
input value=view.password placeholder="#{t 'users.attributes.password'}" type="password"

但缺点是值绑定不再工作,这仍然使表单不可操作。有没有其他我没有考虑过的解决这个问题的方法?

我注意到第一个
占位符=“{t'users.attributes.username}”
中有一个输入错误。它缺少结束单报价


徽标语法错误,第2行:应为BeginStatement或DEDENT,但找到“\uEFEF”。
可能会产生误导。我发现这个错误完全与报告中的错误有关。例如,
linkTo
没有
|
的纯文本报告类似错误。

这超出了徽章的功能范围,因为它是余烬+把手的固有限制。您试图做的是使用
input
helper,并在helper调用中使用另一个helper
t
来获取
占位符
选项的值。你们不能(目前)在余烬这样做,所以徽章将不能为你们这样做

编辑:你应该试试这个库。我还没有使用它,但似乎您要做的是将translateableAttribute混入Ember.View,如:

Ember.View.reopen(Em.I18n.TranslateableAttributes)
然后在您的徽章模板中,您可以执行以下操作

= input placeholderTranslation="button.add_user.title"

正如亚历山大指出的,这是余烬和把手的限制。我一直在使用的解决方法是使
占位符
引用一个控制器属性,然后返回翻译后的字符串。例如:

{{input
    type="text"
    value=controller.filterText
    placeholder=controller.filterPlaceholder }}
然后在控制器中:

filterPlaceholder: function () {
    return i18n.t('players.filter');
}.property('model.name'),

您应该使用视图来格式化内容并将其放入模板中。控制器不需要知道模板上发生了什么

您还希望它成为一个属性,因此i18n只工作一次,然后您就可以使用缓存版本

模板:

{{input value=view.username placeholder=view.usernamePlaceholder}}
{{input value=view.password placeholder=view.passwordPlaceholder type="password"}}
视图:


可靠的建议。我是新加入ember.js的,从长远来看,这样的指针会有很大帮助。不幸的是,目前错误似乎仍然与占位符有关。当我删除该代码时,页面呈现良好。有了它,我就得到了错误。即使我添加了结束引号,这种情况仍然存在。不确定我还能提出什么建议。请尝试在上添加一个问题,@machty可能会有所帮助。感谢您的澄清。现在我将对占位符进行硬编码,并希望ember团队实现一种嵌套助手的方法。我为答案添加了一些可供选择的选项。太棒了。比我使用的解决方案优雅得多。控制器并不是添加这些东西的好地方。您应该为此创建一个视图。
export default Ember.View.extend({

  usernamePlaceholder: function() { 
    return Ember.I18n.t('users.attributes.username');
  }.property(),

  passwordPlaceholder: function() { 
    return Ember.I18n.t('users.attributes.password');
  }.property()

});