ruby-on-rails – Rails i18n:我可以关闭“翻译错误”错误吗?

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – Rails i18n:我可以关闭“翻译错误”错误吗?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个多租户应用程序,我正在尝试使用i18n宝石,以允许我们的每个客户根据自己的喜好自定义系统,更改各种页面上的文本,自定义电子邮件等等.诚然,我没有使用i18n,因为它是打算使用,因为我没有实际翻译不同的“语言”,一切都是英文,但每个客户有一个不同的英语,如果这是有道理的.

不过,我已经看到我认为在i18n宝石中的一个可怕的设计决定:如果一个翻译不存在,而不是简单地不做翻译和打印任何通常的情况,它会引发一个错误.例如,

<%= distance_of_time_in_words_to_now @press_release.submitted_at %>

出来作为

translation missing: en,datetime,distance_in_words,x_days

我的意思是来吧!我甚至不想要翻译.

我明白这是发生的原因是因为我没有加载默认的翻译,但我正在使用ActiveRecord作为后端,我想保持干净. “解决方案”将导入所有的yaml翻译文件到我的数据库翻译商店,但似乎不是一个好主意.如果我以后升级rails怎么办?我将不得不担心所有这些翻译都保持同步.

再次,我不能理解为什么这是默认行为.什么时候ANYBODY想要这个时髦的错误信息显示而不是使用默认的“3天前”?

无论如何,我的问题是,如果翻译不存在,是否有办法自动关闭翻译并使用未翻译的消息?谢谢!

解决方法

如果您有意使用默认的异常处理程序来处理其他异常,那么来自Philip Brocoum的回答的修改后的代码应该会做到这一点(Rails 3.2.2版本):
i18n_simple_backend = I18n::Backend::Simple.new
old_handler = I18n.exception_handler
I18n.exception_handler = lambda do |exception,locale,key,options|
  case exception
  when I18n::MissingTranslation
    i18n_simple_backend.translate(:en,options || {})
  else
    old_handler.call(exception,options)
  end
end

代码将允许您仅捕获需要处理不同的异常.

猜你在找的Ruby相关文章