【问题标题】:How to debug Rails I18N lookup?如何调试 Rails I18N 查找?
【发布时间】:2011-12-08 21:20:20
【问题描述】:

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

我如何才能看到 Rails 默认尝试在哪里查找内容,例如当我只使用 t('.something') 时?

【问题讨论】:

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


    【解决方案1】:

    您可以在开发模式下对 I18N 后端进行猴子修补,以打印出在后端查找的 I18n 密钥。

    在这里查看:

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

    【讨论】:

    • 为我工作。使用 RubyMine,您可以打开 gem 并将这些 put 插入代码中,然后在 RM 中运行服务器。干净的。不过,我更喜欢config.i18n.lookup_debug = true
    • 对不起,这是一个愿望。它不存在AFAIK。你有提到 Sven Fuchs 的声明吗?
    • 我在 Twitter 上与他进行了对话 - 搜索“@svenfuchs config.i18n.lookup_debug”并点击“展开”
    • 很遗憾config.i18n.lookup_debug 不存在。
    • 链接现在好像是 404。
    【解决方案2】:

    独立的 I18n.t 不会以任何方式为您的翻译键添加前缀,这里是负责 rails 魔法的辅助方法/模块:

    (点击方法描述下方的“来源”链接查看里面发生了什么)

    动作视图:

    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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • 对于I18n.load_path.join("\n"),当多个文件定义同一个key时,根据load_paths的顺序,I18n最终会使用哪个文件定义?
      【解决方案4】:

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

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

      【讨论】:

        【解决方案5】:

        如果您尝试调试的翻译是在控制器中设置的,有一个简单的解决方案:

        将控制器中的变量设置为不存在的标签,并读取翻译丢失警告返回的路径。

        例如在控制器中

        @test =  t('.choco_pizza')
        

        在你看来:

        <%= @test %>
        

        将返回:

        translation missing: fr.unexpected_namespace.controller_name.action_name.choco_pizza

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-07-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-05-12
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多