34

Railsは、解析されたすべての翻訳ymlファイルを一種の配列/ハッシュに保存していると思います。これにアクセスする方法はありますか?

たとえば、ファイルがある場合:

en:
  test_string: "testing this"
  warning: "This is just an example

I18n.translations_store[:en][:test_string] のようなことはできますか? YAML::load を使用して yml ファイルを解析できましたが、私の場合、整理のために yml ファイルをサブフォルダーに分割しました。Rails は既にそれらすべてを解析していると確信しています。

4

6 に答える 6

65

バックエンドでプライベート メソッドを呼び出す必要があります。アクセス方法は次のとおりです。

translations = I18n.backend.send(:translations)
translations[:en][:test_string] # => "testing this"
于 2010-10-29T17:52:29.613 に答える
2

デフォルトの I18n バックエンドは I18n::Backend::Simple で、翻訳を公開しません。(I18.backend.translations は保護されたメソッドです。)

これは一般的には良い考えではありませんが、本当にこの情報が必要でファイルを解析できない場合は、バックエンド クラスを拡張できます。

class I18n::Backend::Simple
  def translations_store
    translations
  end
end

その後、 を呼び出しI18n.backend.translations_storeて、解析された翻訳を取得できます。長期的な戦略としてこれに頼るべきではないかもしれませんが、今必要な情報を得ることができます。

于 2010-09-29T16:40:18.003 に答える
0

この古い質問に迷い込んでいる人のために、保護されたメソッドを呼び出す必要のない解決策があります。yml次のようにファイルを変更します。

nl: &all

  ... translations here ...

  all:
    <<: *all

を使用してすべての翻訳を簡単に抽出できるようI18n.t("all")になりました。これには、開発モードで翻訳を自動的に初期化して再読み込みできるという利点があります (保護されたメソッドを呼び出した場合には発生しません)。

于 2015-02-25T16:20:45.463 に答える