如何在Rails 4中翻译占位符文本?

8
我希望Rails可以像处理表单标签一样自动翻译占位文本。如何实现?
表单标签可以自动翻译,具体实现如下:
= f.text_field :first_name

这个助手使用本地化文件:

en:
  active_model:
    models:
      user:
        attributes:
          first_name: Your name

这将输出以下HTML代码

<label for="first_name">Your name</label>

我应该如何使占位符翻译?我需要像这样输入完整的范围吗:

= f.text_field :first_name,
    placeholder: t('.first_name', scope: 'active_model.models.user.attributes.first_name')

有更简单的方式吗?
3个回答

20

如果使用Rails 4.2,你可以将placeholder属性设置为true:

= f.text_field :first_name, placeholder: true

并在本地化文件中指定占位符文本,如下所示:

en:
  helpers:
    placeholder:
      user:
        first_name: "Your name"

嵌套模型需要使用accepts_nested_attributes_for :model - Artem P

1

在Rails >= 4.2中,您可以将占位符属性设置为true

= f.text_field :first_name, placeholder: true

并且在您的本地文件(例如en.yml)中:

ru:
  activerecord:
    attributes:
      user:
        first_name: Your name

否则(Rails >= 3.0),我认为你可以这样编写:
= f.text_field :attr,
    placeholder: "#{I18n.t 'activerecord.attributes.user.first_name'}"

这个答案出现在低质量审核队列中,可能是因为您没有提供任何关于代码的解释。如果这段代码回答了问题,请考虑在您的答案中添加一些解释代码的文字。这样,您更有可能获得更多的赞同 - 并帮助提问者学习新知识。 - lmo

0

您可以在http://rubydoc.info/docs/rails/ActionView/Helpers/Tags/Label上查看源代码,了解Rails是如何实现它的。可能并没有比您所拥有的更好的方法,但是如果您有很多这样的操作,您可以借鉴一些Rails的逻辑,并将其放入助手中。或者,您可以考虑使用自定义表单构建器来消除整个表单中的一些重复性,而不仅仅是占位符。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接