2010-02-24 98 views
35

在國際化Rails(2.3.5)應用程序中,我想顯示從默認語言環境而不是「翻譯缺失」的翻譯 - 有一張票,但它似乎是它的仍然懸而未決:如果翻譯缺失

https://rails.lighthouseapp.com/projects/8994/tickets/2637-patch-i18n-look-up-a-translation-with-the-default-locale-when-its-missed-with-another-specific-locale

例如(從取票),有兩個翻譯文件,en.yml和es.yml:

en: 

    hello: 'hello' 

    hello_world: 'hello world' 



es: 

    hello_world: 'hola mundo' 

當我執行此代碼:

I18n.t :hello, :locale => :es 

Rails返回「hello」,而不是「翻譯缺失」的跨度。

由於故障單仍在處理中,我如何實現此功能?我知道我可以通過並更改所有I18n.t的電話以獲得:default選項,但如果我可以避免,我寧願不必瀏覽所有視圖!因爲它是一個補丁,我想我可以將它應用到Rails冰凍寶石上,但是如果可以的話我寧願避免。

回答

18

如果使用梁2,只要您使用了最新的I18n寶石,將它添加到一個初始化:

I18n.backend.class.send(:include, I18n::Backend::Fallbacks) 

然後您可以添加您回退是這樣的:

I18n.fallbacks.map('es' => 'en') 
+0

這解決了這個問題(我不得不安裝的i18n寶石 - 我還以爲它被列入Rails的,但無論如何它現在的工作很好,謝謝你非常想爲你的答案!) 乾杯 戴夫 – 2010-02-25 15:39:28

+0

基本功能包含在軌道中,但寶石包含更多,例如像activerecord後端和更好的插值等。從Rails 3我認爲它完全取代了內部的一個。 – 2010-02-25 23:25:10

+0

可能應該更新所選的答案,因爲它現在是今天的正確答案:) – jakeonrails 2014-06-09 19:33:00

-1

如果您不想將修補程序應用於Rails創業板,您可以創建自己的包含修補程序的代碼並將它們與創業板混合使用。

查看補丁時,需要在兩處更新代碼(第三位是測試部分)。

第一部分(i18n.rb)是一個模塊,所以通過編寫一個包含文件是這樣的

module I18n 
    @@use_default_locale_on_missing_translation = false 
    ...etc... 
end 

您可以添加修改後的代碼。第二個文件(simple.rb)可以以類似的方式更新,但它是您正在更新的類。

創建包含修改的2個文件後,需要將這兩個文件包含在application.rb中或類似的位置上。 Rails gem的代碼應該用您的自定義代碼進行更新。

0

我認爲最簡單的就是把它添加到你的配置文件中(例如application.rb):

​​

對於en-US,en-CA等區域語言環境非常有用,因爲它們可以自動回退到區域en。

吉米所指出的,你甚至可以改變與回退機制:

I18n.fallbacks.map('es' => 'en') 
137

Nowdays沒有必要使用單獨的國際化的寶石,在普通的Rails 3.0.6及以上(5。0含稅)安裝,fallbacks值可以是下列的之一:

# application.rb 

# rails will fallback to config.i18n.default_locale translation 
config.i18n.fallbacks = true 

# rails will fallback to en, no matter what is set as config.i18n.default_locale 
config.i18n.fallbacks = [:en] 

# fallbacks value can also be a hash - a map of fallbacks if you will 
# missing translations of es and fr languages will fallback to english 
# missing translations in german will fallback to french ('de' => 'fr') 
config.i18n.fallbacks = {'es' => 'en', 'fr' => 'en', 'de' => 'fr'} 
+17

這應該是正確的答案 – 2012-01-16 06:35:55

+2

@AlexeyZakharov那麼取決於您使用的Rails版本。原來的問題是在** Rails 2.3.5 **的上下文中,而這個答案是相關的** Rails 3.0.6 ** – 2013-04-09 20:03:59

+0

在Rails 4中工作,謝謝! – dusan 2014-07-03 17:43:12