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

28

根据ActionView文档,引用:

标签的文本将默认为属性名称,除非在当前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应该翻译标签文本并将"Username"替换为"blahblah"。

但实际上这并没有发生,所以我可能漏掉了什么,希望能得到帮助。

3个回答

45

在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'

3
谢谢您。有没有发行说明或其他资料,我可以查看以了解更多关于这个格式的信息? - astjohn
1
该格式的描述可在 ActionView::Helpers::FormHelper.label 文档中找到。 - simonnordberg
4
如果 helpers: 路径不可用,i18n 将回退到 activerecord: 路径。使用优秀的 i18n-debug gem 时非常清楚。 - Pieter Jongsma
1
@PieterJongsma,感谢您提供这些宝贵的建议。非常有帮助。 - W.M.

33

如果你想要一个像“输入你的名字”的标签怎么办?我觉得设置这样的短语属性并不干净,可能会在某些特定情况下导致一些问题。请参考 Voldy 的答案以正确自定义表单标签。你甚至可以将两种方法结合在一起使用,但是 Voldy 的方法将覆盖这个方法在你的表单上的使用。 - mzrnsh

1
那是因为你调用的

谢谢,我不知道那个。form_forlabel方法都在ActionView::Helpers::FormHelper文档页面上,所以我只是假设它们可以像那样一起使用。我已经更改了我的代码为:<%= label :user, :username %>,并使用相同的yml文件,但我仍然无法获得翻译。这是否与label调用位于form_for块内有关? - rhardih
1
说实话,我从来没有让那个功能正常工作过。出于好奇,我刚刚查看了Rails代码,我认为这是一个旧功能,并且文档还没有修复:在form_helper.rb的第473行,content = (text.blank? ? nil : text.to_s) || method_name.humanize - Nicolas Buduroi
еңЁиҝҷз§Қжғ…еҶөдёӢпјҢжӮЁеә”иҜҘдҪҝз”Ёtж–№жі•пјҢ并жҢҮе®ҡ.ymlзҝ»иҜ‘ж–Ү件дёӯеӯҳеңЁзҡ„scopeгҖӮ <%= tпјҡtitleпјҢscopeпјҡ[:helpersпјҢ:labelпјҢ:post]пј…>гҖӮ - mariowise

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