2016-03-20 5 views
0

私が国際化する必要があるアプリケーションを持っています。 現在、ほとんどの文字列はt('.whatever')を使用して変換キーに割り当てられています。エキスRailsアプリケーション内のすべての未翻訳のキー

私たちはそれらを解放する前に、すべてのキーが特定の言語に翻訳されていることを確認します。開発/テスト環境では、config.action_view.raise_on_missing_translations = trueを有効にできます。

しかし、deviseなどの一部と宝石で生成されたその他の部分は、テストでカバーされておらず、実際にすべてのページがリリース前にテストされているという受給者はいません。

私はすべてのキーを抽出し、行方不明のキーをソートし、追加するいくつかのロジックを持つことが好ましい、locales/xxx.ymlに追加ソリューションを好むだろう。

私は私の要件を満たしていなかった以下の宝石/プロジェクトを見て、持っていた:

追加情報

私たちのキーは、英語のある私たちのデフォルトの言語が:deですが、我々は[:de, :en, :fr, :it]

+0

あなたは(https://github.com/glebm/i18n-tasks)[国際化-タスク]を見ていたことがありますか? RSpecテストを使用して、リリース前にすべてのキーがすべての言語に翻訳されていることを確認することができます。 –

答えて

0

にすべてを翻訳する必要がここで私はそれについて移動したい方法は次のとおりです。

まず、参照/完全な一つであるロケールを決め、のは言わせて

I18n.backend.send(:init_translations)

:それは次にレールコンソールを起動(またはrakeタスクを作成)、および以下のように国際化のバックエンドを初期化 :de

です

I18n.backend.send(:translations)

{ 
    en: { 
    hello: 'Hello World' 
    }, 
    de: { 
    hello: 'Hallo Welt' 
    } 
} 

のようなものが今:deハッシュですべての翻訳キーを反復処理し、それらかどうかをチェックすなわちI18n.backend.send(:translations)[:de]、その後、あなたの参照のロケールを選ぶすなわち、あなたはすべてのロケールのためのすべての翻訳にアクセスすることができます

I18n.backend.exists?(:en, [:errors, :messages, :improbable_phone]) 01:I18n.backend.exists?(locale, translation_key)

例を用いて他のロケールに存在しますI18n.backend.exists?(:en, 'errors.messages.improbable_phone')

キーが存在しない場合は、 "## TRANSLATION MISSING ##"のようなスタブを付けてハッシュに追加し、最後にYAMLファイルとしてハッシュをディスクに書き込みます。

+0

ありがとう、それは私を助ける! – Mark

関連する問題