0

I18n gem のカスタム例外ハンドラーを作成しようとしています。これは、デフォルトの「翻訳がありません」というエラーをオーバーライドし、ロケールが見つからない場合やトップレベルの名前空間が見つからない場合などの特別な場合にノイズの多い例外をスローします。ロケールの欠落は if をチェックするだけの問題ですがavailable_locales.include?(locale)、名前空間が定義されているかどうかを確認するにはどうすればよいですか? 基本的に、次の機能が必要です。

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

これを行う方法はありますか?または、キーに基づいて検索することしかできませんか?

4

1 に答える 1

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

...そして、例外ハンドラーでそれをスローできます

于 2012-06-19T01:18:32.560 に答える