【问题标题】:Rails i18n and yml structure for form labels表单标签的 Rails i18n 和 yml 结构
【发布时间】:2011-03-31 19:07:26
【问题描述】:

根据ActionView documentation。引用:

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

我有一个“用户”模型和一个注册表单。这是相关部分的sn-p:

<% 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”而不是“用户名”。

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

【问题讨论】:

    标签: ruby-on-rails internationalization yaml


    【解决方案1】:

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

    【讨论】:

    • 谢谢。是否有发行说明或我可以查看以了解有关此格式的更多信息?
    • ActionView::Helpers::FormHelper.label 文档中提供了此格式的说明。
    • 如果helpers: 路径不可用,i18n 将回退到activerecord: 路径。使用优秀的 i18n-debug gem 时非常清楚。
    • @PieterJongsma,感谢您的宝贵建议。很有帮助。
    【解决方案2】:

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

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

    dk:
      activerecord:
        attributes:
          user:
            username:
    

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

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

    【讨论】:

    • 如果你想要一个像“输入你的名字”这样的标签怎么办?我不觉得为这样的短语设置属性是干净的,在某些特定情况下可能会导致一些问题。有关自定义表单标签的正确方法,请参阅 Voldy 的答案。你甚至可以同时使用这两种方法,但是 Voldy 的方法会在你的表单上覆盖这个方法,它应该
    【解决方案3】:

    那是因为你调用的label 方法不是来自ActionView::Helpers::FormHelper 的方法,而是实际上来自ActionView::Helpers::FormTagHelperlabel_tag 方法。 form_for 方法通过将_tag 添加到使用的表单助手来重写给定块中的代码。所以你没有在寻找正确方法的文档!

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

    【讨论】:

    • 谢谢,我不知道。 form_for 和 label 方法都在ActionView::Helpers::FormHelper doc 页面上,所以我只是假设它们是这样一起工作的。我已将代码更改为:&lt;%= label :user, :username %&gt; 使用相同的 yml 文件,但我仍然没有得到翻译。 label 调用在 form_for 块内是否重要?
    • 说实话,我从来没有使用过这个功能。出于好奇,我刚刚查看了 Rails 代码,我认为这是一个旧功能,并且文档尚未修复:content = (text.blank? ? nil : text.to_s) || method_name.humanize at line 473 of form_helper.rb
    • 在这种情况下,您应该使用t 方法指定scope 存在于您的.yml 翻译文件中。 &lt;%= t :title, scope: [:helpers, :label, :post] %&gt;.
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-10
    相关资源
    最近更新 更多