2015-12-30 78 views
3

因此,我知道如何在讀取yaml文件時返回默認值,如果我收到「翻譯缺失:」。I18n.t翻譯缺失缺省值無

some = I18n.t("something.something_else", default: "value") 

但是,如果我想讓默認值爲零,我該如何在Ruby方式中做到這一點?我知道我可以正則表達式匹配「變量丟失:」從一些變量,如果匹配,我會把它分配給零。但我想要做的是有

some = I18n.t("something.something_else", default: nil) 

但它只是返回翻譯失蹤了我。有誰知道一個好方法?

回答

5

:default不能爲零。將值設置爲nil等同於根本不設置該選項。

但是,由於gem似乎爲only check whether the key is nil or not,因此可以嘗試將空字符串作爲默認值傳遞。在缺少翻譯的情況下,translate方法可能會返回空字符串。

some = I18n.t("something.something_else", default: "") 

我相信這是接近的解決方案,你可以得到的,除非你定義自定義translate方法在內部查找鍵的存在,如果該鍵不存在返回nil。

+0

所以基本上沒有什麼好的方法可以在翻譯缺失時返回零。感謝你的回答。我不明白爲什麼。這是一個實現功能嗎?或者代碼是如何編寫的? – Jeff

+0

您可以添加一個檢查存在,以便您確定獲得翻譯的字符串或零回: 'some = I18n.t(「something.something_else」,默認值:「」).presence' –

2

試試這個some = I18n.t!("something.something_else") rescue nil

好吧,這是一個不好的做法,執行rescue nil但是,它的短期和可愛:)

你可以做這樣的事情

def translate(key) 
    I18n.t!(key) 
rescue I18n::MissingTranslationData 
    nil 
end 

則...

some = translate("something.something_else")

+0

這對於具有大量字符串的應用程序來說不是非常有效,因爲引發異常並挽救它在解釋程序級別具有顯着的成本。最好的解決方案是在不觸發異常的情況下檢查密鑰的存在。 –

+0

我認爲這是一個決定......如果這段代碼在很大程度上影響了上下文中的表現,我同意你的看法。 – Leantraxxx