9

我使用的是Ruby on Rails 3.1,我想知道如何正確處理與部分模板文件相關的國際化。也就是說,...在部分模板文件中使用國際化的麻煩

...我app/views/users/flag.html.erb文件我有:

<%= t('.test_key1') %> 
<%= render :partial => "https://stackoverflow.com/users/flag_form" %> 

...我app/views/users/_flag_form.html.erb文件我有:

<%= t('.test_key2') %> 

如果我config/locales/views/users/en.yml文件( note:我按照official RoR guide的規定組織檔案)我用

en: 
    users: 
    flag: 
     test_key1: Test 1 text 
     test_key2: Test 2 text 

Test 1 text的顯示在 「主」 模板app/views/users/flag.html.erbTest 2 text不是用於部分模板app/views/users/_flag_form.html.erb)。 我該如何解決這個問題,以便正確顯示Test 2 text

+0

這不會解決你的問題(和我),但可以幫助理解其中軌尋找翻譯https://github.com/256dpi/rails-i18n-debug – masciugo 2012-11-19 15:33:39

回答

10

一種方法是使用範圍,而不是使用句號的「延遲加載」。 像這樣的東西應該工作:

I18n.t :test_key2, :scope => 'users.flag' 

或使用:

I18n.t "users.flag.test_key2" 

最後,你甚至可以將它傳遞給部分在

<%= render :partial => "https://stackoverflow.com/users/flag_form", :locals => { :test_key => t('.test_key1') } %> 

你也應該檢出的附錄部分在這個網站上,因爲它可能會列出我丟失的東西: http://www.unixgods.org/~tilo/Rails/where_is_Rails_trying_to_lookup_L10N_strings.html

+0

你的鏈接是死的:( – 2015-10-30 14:22:57

0

我寫過這個。你怎麼看待這件事?

def translate_for_partials key, *args 
    I18n.t("#{params[:controller].gsub('/', '.')}.#{params[:action]}.#{key}", *args) 
end 

這樣做是不是很糟糕?

+0

在意見,你可以做一個更清潔的版本: I18n.t(「#{controller_name}。#{controller.action_name}。#{key}」) – Magnuss 2013-05-08 08:12:05

+0

Magnuss,這是嵌套控制器'params [:控制器] .gsub('/','。')' – 2016-01-18 09:10:58

15

配置/語言環境/ en.yml

en: 
    users: 
    flag: 
     test_key1: Test 1 text 
    flag_form: 
     test_key2: Test 2 text 

應用/視圖/用戶/ flag.html.erb

<%= t('.test_key1') %> 
<%= render :partial => "https://stackoverflow.com/users/flag_form" %> 

應用/視圖/用戶/ _flag_form.html .erb

<%= t('.test_key2') %> 

NB:

  1. 滑軌路徑視圖必須YAML路徑分配給符號匹配。您需要在YAML文件中創建與視圖名稱匹配的條目。由於它是局部的,省略尾部下劃線。
  2. 瞭解更多關於lazy lookups
+2

TL; DR在_partial文件名中保留下劃線,不加下劃線地構建你的YAML樹en:user:partial: – givanse 2013-12-10 23:02:20