加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 21:38:53 所属栏目:百科 来源:网络整理
导读:我有一个多租户应用程序,我正在尝试使用i18n宝石,以允许我们的每个客户根据自己的喜好自定义系统,更改各种页面上的文本,自定义电子邮件等等.诚然,我没有使用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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读