【问题标题】:Rails 3 I18n label_tag translationRails 3 I18n label_tag 翻译
【发布时间】:2010-12-18 21:21:19
【问题描述】:

有人会认为以下代码会访问 I18n:

= label_tag(:person_name)

然后查找 en.helpers.label.person_name 或类似的东西。但是,rails 代码似乎并没有使用 I18n:

159:       def label_tag(name = nil, content_or_options = nil, options = nil, &block)
160:         options = content_or_options if block_given? && content_or_options.is_a?(Hash)
161:         options ||= {}
162:         options.stringify_keys!
163:         options["for"] = sanitize_to_id(name) unless name.blank? || options.has_key?("for")
164:         content_tag :label, content_or_options || name.to_s.humanize, options, &block
165:       end

所以看来唯一的选择是显式调用label_tag(:person_name, I18n.t(:person_name))。这似乎没有必要,所以我在这里遗漏了什么还是应该在 Rails 补丁上工作?任何意见表示赞赏。

【问题讨论】:

  • 欢迎来到 SO。您在这里提出了完全相同的问题:stackoverflow.com/q/4479950/382818。请删除其中一个问题。
  • 感谢您的回复,但这些实际上是不同的问题。一个是专门在嵌套的 has_many 关系中使用 f.label 。这个问题涉及label_tag的使用,它是Helpers::FormTagHelper的方法,而不是Helpers::FormHelper。
  • 你有没有想出办法做到这一点?我试图避免在本地化文件中创建两个条目...
  • 抱歉耽搁了,但我从来没有想出办法。我只是使用label_tag t(:person_name)
  • 当使用t 方法和label_tag 时,您可能希望在t 上使用:scope 选项来帮助干燥。

标签: internationalization label ruby-on-rails-3


【解决方案1】:

= label_tag(:person_name) 将不起作用。但是你可以使用t() 方法来得到这个 工作。

= label_tag(t(:person_name))

然后可以添加翻译:

然后在文件en.yml

en: 
  person_name: John

您还可以将翻译绑定到它所在的视图:

app/views/something/index.html.haml

= label_tag(t('.person_name'))

将在文件 en.yml 中查找此翻译:

 en
  something
    index
      person_name: John

【讨论】:

  • 再次感谢您的回复,但这是不行的。我不希望 label_tag 访问任何对象(例如人),因为不会在像 f.label 这样的表单对象上调用该方法。
  • 这行不通,因为你会得到<label for="Translation">Translation</label> 而不是<label for="SymbolName">Translations</label>
  • 您可以先提供符号,然后将 t() 方法作为第二个参数提供翻译后的文本值。
猜你喜欢
  • 1970-01-01
  • 2015-04-20
  • 2011-07-27
  • 1970-01-01
  • 2015-03-25
  • 2011-10-11
  • 2015-10-27
  • 2014-12-18
  • 1970-01-01
相关资源
最近更新 更多