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

时间:2014-09-05 00:40:27

标签: ruby-on-rails internationalization rails-i18n

我希望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 个答案:

答案 0 :(得分:14)

如果使用Rails 4.2,您可以将占位符属性设置为true:

= f.text_field :first_name, placeholder: true

并在语言环境文件中指定占位符文本,如下所示:

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

答案 1 :(得分:1)

使用Rails&gt; = 4.2,您可以将占位符属性设置为true

= f.text_field :first_name, placeholder: true

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

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

否则(Rails&gt; = 3.0)我认为你可以这样写:

= f.text_field :attr,
    placeholder: "#{I18n.t 'activerecord.attributes.user.first_name'}"

答案 2 :(得分:0)

您可以在http://rubydoc.info/docs/rails/ActionView/Helpers/Tags/Label查看渲染源,了解Rails的工作原理。它可能没有比你更好的东西,但你可以刷一些Rail的逻辑,并把它粘在一个帮手,如果你有很多事情要做。或者,您可以考虑使用自定义表单构建器来删除整个表单中的一些重复,而不仅仅是占位符。