用于表单标签的Rails i18n和yml结构

时间:2010-08-18 20:39:05

标签: ruby-on-rails internationalization yaml

根据ActionView documentation。引用:

  

除非在当前的I18n语言环境中找到翻译(通过views.labels。< modelname>。< attribute>),否则标签文本将默认为属性名称,或者您明确指定它。

我有一个“用户”模型和一个注册表单。以下是相关部分的片段:

<% form_for(@user) do |f| %>
    ...
    <p>
    <%= f.label :username %>
    <%= f.text_field :username, :class => 'full_width' %>
    </p>
    ...
<% end %>

点隐藏不重要的代码。

据我了解文档,如果我在我的语言环境文件中提供翻译,在这种情况下:dk,我的dk.yml看起来像这样:

dk:
    views:
        labels:
            user:
                username:
                    "blahblah"

Rails应该翻译标签文本并插入“blahblah”而不是“Username”。

这种情况没有发生,所以我一定错过了什么。任何帮助表示赞赏。

3 个答案:

答案 0 :(得分:42)

在Rails 3.1中有点改变。

<% form_for @post do |f| %>
  <%= f.label :title %>
  <%= f.text_field :title %>
  <%= f.submit %>
<% end %>

en:
  helpers:
    label:
      post:
        title: 'Customized title'

答案 1 :(得分:29)

我想我在这里找到了另一种解决方案。

我的应用是版本2.3.5。我现在已将其更改为2.3.8,<%= f.label :username %>现在使用以下翻译:

dk:
  activerecord:
    attributes:
      user:
        username:

我在这张票中找到了提示:

https://rails.lighthouseapp.com/projects/8994/tickets/745-form-label-should-use-i18n

答案 2 :(得分:1)

这是因为您调用的label方法不是来自ActionView::Helpers::FormHelper的方法,而是来自label_tag的{​​{1}}方法。 ActionView::Helpers::FormTagHelper方法通过向使用的表单助手添加form_for来重写给定块中的代码。所以你不是在寻找正确方法的文档!

我还没有使用过这种方法,因为有时字段的标签可能与使用相同模型的多个表单不同,所以我编写了自己的帮助器。