Rails 3国际化label_tag翻译

5

人们可能认为以下代码可以访问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。您在这里提出了完全相同的问题:https://dev59.com/i1LTa4cB1Zd3GeqPdcQa。请删除其中一个问题。 - Zabba
2
谢谢您的回复,但这实际上是两个不同的问题。一个问题是关于在嵌套的has_many关系中使用f.label的具体用法。而这个问题涉及到label_tag的使用,它是Helpers::FormTagHelper的一个方法,而不是Helpers::FormHelper的方法。 - Garrett Lancaster
你有沒有找到一種方法來做這件事?我正在試圖避免在我的本地化文件中創建兩個條目... - Clay
抱歉耽搁了,但是我从来没有找到解决方法。我只是使用 label_tag t(:person_name) - Garrett Lancaster
当使用 label_tagt 方法时,您可能希望在 t 上使用 :scope 选项来帮助DRY化。 - mikeycgto
1个回答

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

1
再次感谢您的回复,但这是不行的。我不希望label_tag访问任何对象(例如person),因为该方法不像f.label那样在表单对象上调用。 - Garrett Lancaster
这种方法行不通,因为这样你会得到<label for="Translation">Translation</label>而不是<label for="SymbolName">Translations</label> - Rebecca Meritz
你可以先提供符号,然后将t()方法作为第二个参数,以提供翻译后的文本值。 - Brendon Muir

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