2010-12-18 106 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