質問

私はレールの店がすべて解析された翻訳が配列/ハッシュのソートにファイルをYML推測しています。 この?にアクセスする方法はありますか

たとえば、私はファイルをしている場合:

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

私はI18n.translations_store、のような何かをしてもらえますか? 私はYAML ::負荷とYMLファイルを解析することができますが、私の場合、私は組織のサブフォルダにYMLファイルを分割さてきた、と私はかなり確信してレールがすでにそれらをすべて解析されていることです。

役に立ちましたか?

解決

あなたはバックエンドでプライベートメソッドを呼び出すようになりました。これは、あなたがアクセスを取得する方法です。

translations = I18n.backend.send(:translations)
translations[:en][:test_string] # => "testing this"

他のヒント

8xx8さんのコメントを1として、の簡単なバージョン:

I18n.t(:foo)
I18n.backend.send(:translations)[:en][:test_string]

タグであります
I18n.t(".")[:test_string]

この緩和するには、両方の予圧への翻訳を有するか、またはロケールを指定します。

あなたは、残念ながらI18n::Fallbacksを使用している場合は、それだけで中身現在のロケール(たとえば、「エンGB」)とフォールバックロケール(たとえば、「エン」)のいずれかから何を返すようごI18n.t('.')を使用することはできません。このラウンドを取得するには、それらを結合するためにフォールバックや使用deep_merge!を反復処理することができます。

module I18n
  class << self
    def all
      fallbacks[I18n.locale].reverse.reduce({}) do |translations, fallback|
        translations.deep_merge!(backend.translate(fallback, '.'))
      end
    end
  end
end

デフォルトの国際化のバックエンドは国際化である::バックエンド:: Simpleは、あなたに翻訳を公開しません。 (I18.backend.translationsを保護する方法である。)

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

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

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

あなたがrakeタスクでこれをやっている場合は、

は、的環境を含めることを忘れないでください、またはそれ以外の場合は、config/locales/の下に住んでいるあなた自身のロケールをロードしません。

require "./config/environment.rb" # Do not forget this

namespace :i18n do
  desc "Import I18n to I18n_active_record"
  task :setup do
    I18n.t(:foo)
    translations = I18n.backend.send(:translations)
  end
end

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

nl: &all

  ... translations here ...

  all:
    <<: *all
今、あなたは、単に自動的に初期化し、開発モードで翻訳をリロードする利点があるI18n.t("all")、使用してすべての翻訳抽出することができます(あなたが保護されたメソッドを呼び出す場合は発生しません、何かを。)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top