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 此代码将允许您仅捕获需要处理不同的异常. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |