Railsのドキュメントでは、I18Nルックアップがビュー、モデル/検証、コントローラー、ヘルパー、...、ラベルなどから開始されたかどうかに応じて、I18N文字列のデフォルトの場所が異なるようです...
たとえば、t('。something')を使用する場合など、Railsがデフォルトで検索しようとしている場所を確認するにはどうすればよいですか?
Railsのドキュメントでは、I18Nルックアップがビュー、モデル/検証、コントローラー、ヘルパー、...、ラベルなどから開始されたかどうかに応じて、I18N文字列のデフォルトの場所が異なるようです...
たとえば、t('。something')を使用する場合など、Railsがデフォルトで検索しようとしている場所を確認するにはどうすればよいですか?
開発モードでI18Nバックエンドにモンキーパッチを適用して、バックエンドで検索されたI18nキーを印刷できます。
ここをチェックしてください:
http://www.unixgods.org/Rails/where_is_Rails_trying_to_lookup_L10N_strings.html
スタンドアロンI18n.t
では、翻訳キーのプレフィックスは一切ありません。レールの魔法の原因となるヘルパーメソッド/モジュールは次のとおりです。
(メソッドの説明の下にある「ソース」リンクをクリックして、内部で何が起こっているかを確認してください)
ActionView:
http://api.rubyonrails.org/classes/ActionView/Helpers/TranslationHelper.html#method-it
ActiveModel:
http://api.rubyonrails.org/classes/ActiveModel/Translation.html#method-i-i18n_scope
AbstractController
http://api.rubyonrails.org/classes/AbstractController/Translation.html
上記の解決策は、キーが検索されているファイルを見つけるのに役立ちません。これに対するエレガントな解決策は見つかりませんでした。以下は、私が思いついた最良の方法です。指示は、プロダクションボックスに適合させる必要があります。
bundle exec rails c
I18n.load_path.join("\n")
してクリップボードにコピーします。一部のクリップボードヘルパーでpryを使用する場合copy
は、コンソールで実行するだけです。pbpaste | ack 'en.yml$' | xargs ack 'key:'
。これにより、I18nがアクセスしようとしているキーを含むファイルのリストが出力されます。Rails 3.2(おそらく下位バージョン)では、翻訳のために検索されたキーを示すビューのtヘルパーによってスパンが生成されます。これは(コントローラーなどからの)すべての場合の解決策ではありませんが、上からの完全なモンキーパッチが上にあるこの質問を検索する多くの人々にとっては答えになると思います(モンキーパッチはi18n0.7.0でも機能し、詳細を示します)
title="translation missing: de.<path to key>"
デバッグしようとしている翻訳がコントローラーで設定されている場合は、簡単な解決策があります。
コントローラの変数を存在しないタグに設定し、変換がないという警告によって返されるパスを読み取ります。
たとえば、コントローラーで
@test = t('.choco_pizza')
あなたの見解では:
<%= @test %>
戻ります:
translation missing: fr.unexpected_namespace.controller_name.action_name.choco_pizza