首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Emblem.js将翻译插入到占位符中

使用Emblem.js将翻译插入到占位符中
EN

Stack Overflow用户
提问于 2013-07-21 02:47:51
回答 4查看 1.5K关注 0票数 3

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

代码语言:javascript
复制
Em.TextField valueBinding="view.username" placeholder="#{t 'users.attributes.username}"
Em.TextField valueBinding="view.password" placeholder="#{t 'users.attributes.password'}" type="password"

如果我尝试一下,也会得到同样的响应:

代码语言:javascript
复制
= input value=view.username placeholder="#{t 'users.attributes.username}"
= input value=view.password placeholder="#{t 'users.attributes.password'}" type="password"

在这两种情况下,我都会收到以下错误消息:

代码语言:javascript
复制
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}"

我假设发生这种情况是因为我正在尝试从一个已经被编译的语句中编译一些东西。为了证明这一点,如果我将代码改为:

代码语言:javascript
复制
input value=view.username placeholder="#{t 'users.attributes.username}"
input value=view.password placeholder="#{t 'users.attributes.password'}" type="password"

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-03-03 19:10:02

正如Alexander指出的,这是Ember和Handlebar的局限性。我一直使用的变通方法是让placeholder引用一个控制器属性,然后该属性返回翻译后的字符串。例如:

代码语言:javascript
复制
{{input
    type="text"
    value=controller.filterText
    placeholder=controller.filterPlaceholder }}

然后在控制器中:

代码语言:javascript
复制
filterPlaceholder: function () {
    return i18n.t('players.filter');
}.property('model.name'),
票数 3
EN

Stack Overflow用户

发布于 2013-07-23 00:07:31

这超出了Emblem所能做的范围,因为这是Ember+Handlebars的固有限制。您要做的是使用input帮助程序,并在帮助程序调用中使用另一个帮助程序t来获取placeholder选项的值。你不能(目前)在Ember中做到这一点,所以Emblem不能为你做到这一点。

编辑:您应该尝试使用Ember i18n库。我还没有用过它,但是看起来你想要做的是在Ember.View中混入TranslateableAttributes混入,比如:

代码语言:javascript
复制
Ember.View.reopen(Em.I18n.TranslateableAttributes)

然后在您的徽章模板中,您可以执行以下操作

代码语言:javascript
复制
= input placeholderTranslation="button.add_user.title"
票数 3
EN

Stack Overflow用户

发布于 2013-07-21 13:31:30

我注意到第一个placeholder="#{t 'users.attributes.username}"中有一个拼写错误。它缺少右单引号。

Emblem syntax error, line 2: Expected BeginStatement or DEDENT but "\uEFEF" found.可能会产生误导。我发现这个错误与所报告的完全不同。例如,没有纯文本|linkTo会报告类似的错误。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17765527

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档