2010-12-18 95 views
3

人们会认为下面的代码将访问国际化:Rails 3中的I18n label_tag翻译

= label_tag(:person_name) 

,并期待en.helpers.label.person_name,或者类似的东西。然而,Rails代码似乎没有任何使用国际化:

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补丁上工作?任何输入赞赏。

+0

欢迎SO。你在这里问完全相同的问题:http://stackoverflow.com/q/4479950/382818。请删除其中一个问题。 – Zabba 2010-12-18 21:43:48

+2

感谢您的回应,但这些实际上是不同的问题。其中一个特别是在嵌套的has_many关系中使用f.label。这个问题涉及到使用label_tag,这是Helpers :: FormTagHelper,而不是Helpers :: FormHelper的一种方法。 – 2010-12-18 22:00:26

+0

你有没有想过办法做到这一点?我试图避免在我的本地化文件中创建两个条目... – Clay 2011-09-20 13:14:05

回答

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访问任何对象(如人),因为该方法不会像f.label那样在窗体对象上调用。 – 2010-12-18 22:04:25

+0

这是行不通的,因为那样你就得到了''而不是''。 – 2017-06-23 20:54:35