微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐