【问题标题】:How to show all asked-for Translation Strings in Rails?如何在 Rails 中显示所有要求的翻译字符串?
【发布时间】:2010-06-22 13:39:18
【问题描述】:

当 Rails 函数要求翻译 (I18n.translate) 时,我不想分析它们的代码以获得确切的范围等。

如何在控制台中为每个请求的字符串添加调试输出?

示例:

I18n.t 'errors.messages.invalid', :scope => :active_record 
# Translation for 'activerecord.errors.messages.invalid' (not) found

label(:post, :title)
# Translation for 'activerecord.attributes.post.title' not found
# Translation for 'views.labels.post.title' not found

【问题讨论】:

  • 到目前为止,我没有比“阅读 Rails 代码”或“使用您自己的翻译字符串”(如第一个示例)更好的答案了。

标签: ruby-on-rails debugging internationalization


【解决方案1】:

这不是一个非常优雅的解决方案,但它对我有用。我创建了一个初始化程序:

require 'i18n'

if (Rails.env.development? || Rails.env.test?) && ENV['DEBUG_TRANSLATION']
  module I18n
    class << self
      def translate_with_debug(*args)
        Rails.logger.debug "Translate : #{args.inspect}"
        translate_without_debug(*args)
      end
      alias_method_chain :translate, :debug
    end
  end
end

然后您可以运行如下命令:

$ DEBUG_TRANSLATION=true rake cucumber

...您会看到所有尝试转储到 STDOUT 的翻译。不过我不考虑这个生产代码,所以我把它保存在Gist 中,并且在这个阶段没有将它签入我的主要项目源代码控制中。

Noddy,但它确实有效。

【讨论】:

  • 我已更新以包含来自 Andrea D'Amico 的更改(请参阅其他答案)。谢谢安德里亚 - 不知道为什么我一开始不这样做!
【解决方案2】:

将 I18n 调试消息放入日志中的小改动:

替换这一行:

puts "Translate: #{args.inspect}"

Rails.logger.debug "Translate : #{args.inspect}"

【讨论】:

  • 谢谢安德里亚;我已在上面的答案中包含此更改。 +1。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-08-29
  • 2017-01-26
  • 2010-09-30
  • 1970-01-01
  • 2021-02-28
  • 2015-01-04
  • 1970-01-01
相关资源
最近更新 更多