11

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

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

4

5 回答 5

7

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

在这里检查:

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

于 2011-10-16T20:56:23.847 回答
3

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

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

动作视图:

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

scope_key_by_partial

活动模型:

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

抽象控制器

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

于 2011-10-16T21:05:21.183 回答
1

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

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

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

title="translation missing: de.<path to key>"
于 2015-03-12T08:57:00.853 回答
0

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

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

例如在控制器中

@test =  t('.choco_pizza')

在您看来:

<%= @test %>

将返回:

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

于 2021-09-02T13:13:00.097 回答