如何调试Rails I18N查找?

时间:2011-10-16 20:49:07

标签: ruby-on-rails ruby-on-rails-3 internationalization ruby-on-rails-3.1 ruby-on-rails-2

在Rails文档中,I18N字符串似乎有不同的默认位置,具体取决于I18N查找是从视图,模型/验证,控制器,帮助程序,...,如果它是标签等启动的。

如何在默认情况下查看Rails尝试查找内容的位置,例如当我只使用t('。something')?

4 个答案:

答案 0 :(得分:7)

您可以在开发模式下修补I18N后端,以打印出在后端查找的I18n键。

点击此处:

http://www.unixgods.org/Rails/where_is_Rails_trying_to_lookup_L10N_strings.html

答案 1 :(得分:3)

独立I18n.t不会以任何方式为您的翻译密钥添加前缀,以下是负责rails魔术的帮助方法/模块:

(点击方法说明下面的“来源”链接,看看里面发生了什么)

<强>的ActionView:

http://api.rubyonrails.org/classes/ActionView/Helpers/TranslationHelper.html#method-i-t

scope_key_by_partial

<强>加载ActiveModel:

http://api.rubyonrails.org/classes/ActiveModel/Translation.html#method-i-i18n_scope

<强>一个AbstractController

http://api.rubyonrails.org/classes/AbstractController/Translation.html

答案 2 :(得分:1)

上面的解决方案无法帮助找到正在查找密钥的文件。我没有找到任何优雅的解决方案,下面是我提出的最佳方法。这些说明必须适用于生产箱。

  1. 打开rails控制台bundle exec rails c
  2. 运行I18n.load_path.join("\n")并将其复制到剪贴板。如果您对some clipboard helpers使用pry,只需在控制台中运行copy
  3. 即可
  4. 打开一个新的终端窗口并运行pbpaste | ack 'en.yml$' | xargs ack 'key:'这将打印出包含I18n正在尝试访问的密钥的文件列表

答案 3 :(得分:0)

在rails 3.2(也许是较低版本)中,t - helper在视图中生成一个span,显示搜索了哪个键进行了翻译。对于所有情况(来自控制器等),这不是解决方案,但我认为这可能是许多搜索此问题的人的答案,其中上面的完整猴子补丁将超过顶部(猴子补丁也适用于我在i18n 0.7.0并提供更多细节)

title="translation missing: de.<path to key>"