在 Rails 文档中,I18N 字符串似乎有不同的默认位置,这取决于 I18N 查找是否是从视图、模型/验证、控制器、帮助器……,如果它是标签等启动的……
我如何才能看到 Rails 默认尝试在哪里查找内容,例如当我只使用 t('.something') 时?
在 Rails 文档中,I18N 字符串似乎有不同的默认位置,这取决于 I18N 查找是否是从视图、模型/验证、控制器、帮助器……,如果它是标签等启动的……
我如何才能看到 Rails 默认尝试在哪里查找内容,例如当我只使用 t('.something') 时?
您可以在开发模式下对 I18N 后端进行猴子修补,以打印出在后端查找的 I18n 密钥。
在这里检查:
http://www.unixgods.org/Rails/where_is_Rails_trying_to_lookup_L10N_strings.html
独立版I18n.t
不会以任何方式为您的翻译键添加前缀,这里是负责 rails 魔法的辅助方法/模块:
(点击方法描述下方的“来源”链接,查看里面发生了什么)
动作视图:
http://api.rubyonrails.org/classes/ActionView/Helpers/TranslationHelper.html#method-it
活动模型:
http://api.rubyonrails.org/classes/ActiveModel/Translation.html#method-i-i18n_scope
抽象控制器
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 助手会生成一个跨度,显示搜索了哪个键以进行翻译。这不是适用于所有情况(来自控制器等)的解决方案,但我认为它可能是许多搜索此问题的人的答案,其中来自上方的完整猴子补丁将超过顶部(猴子补丁在 i18n 0.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