2012-06-18 33 views
0

我正在嘗試編寫I18n gem的自定義異常處理程序,該自定義異常處理程序將覆蓋默認的「轉換缺失」錯誤並針對特殊情況拋出嘈雜的異常,例如區域設置爲缺少以及何時缺少頂級命名空間。缺少語言環境只是檢查是否available_locales.include?(locale),但如何查看名稱空間是否已定義?基本上,我想要以下功能:如何確定在Ruby中的I18n命名空間的存在

def caption 
    begin 
    I18n.t("event.welcome", :locale => :en) 
    rescue MissingNamespace # should be thrown when "event" doesn't exist as a key under :en, (I18n would normally overspecify and say that "event.welcome" as a full key doesn't exist" 
    "Namespace is missing" 
    rescue 
    #other stuff 
    end 
end 

有沒有辦法做到這一點?或者我只能在一個關鍵的基礎上查找?

回答

0

這裏的竅門:

module I18n 
    def namespace_missing?(locale, key) 
    namespace = key.split(".")[0] # assuming you want the top level namespace 
    !backend.send(:translations)[locale][namespace] # this presupposes locale exists 
    end 
end 

...然後你可以扔掉,在你的異常處理程序

相關問題