跟踪ActiveRecord的i18n验证消息的最佳方法是什么?

时间:2011-06-30 22:57:43

标签: ruby-on-rails activerecord internationalization

我经常忘记在我的所有应用语言中翻译activerecord.errors.models.user.attributes.name.blank之类的内容。有没有人有任何关于跟踪翻译缺失的建议?

4 个答案:

答案 0 :(得分:3)

您可以做的一件事是在测试环境中设置I18n.config.exception_handler = :raise_i18n_exception。它不会捕捉到一切,但它超级简单,比没有更好。

(在config / environments / test.rb中,它只是I18n.exception_handler = :raise_i18n_exception

答案 1 :(得分:2)

Gettext是翻译中事实上的标准。它非常丰富,坦率地说我讨厌尝试重新发明轮子的应用程序。这就是为什么我总是切换到gettext-rails(或fastgettext)插件。

适用于模特:http://www.yotabanana.com/hiki/ruby-gettext-howto-rails.html#Models

而且......它解决了你的问题。 Gettext可以帮助您跟踪未翻译的字符串 - 您可以配置为尖叫或只返回未翻译的字符串(默认)。

答案 2 :(得分:2)

您可以查看为您的翻译密钥添加一个小型Web管理控制台的translate插件(并显示缺少哪些密钥以及在哪里)。

这可能有点旧了,但是可以使用Rails 2,如果你能解决一些配置问题(或者只是拿起那里已有的拉取请求),那么即使是3也应该可以工作。

答案 3 :(得分:1)

前段时间我想用一种简单的方法来分享所有应用中的所有常见翻译。这railscasts episode给了我一个关于如何做到这一点的想法。

简而言之,你可以链接不同的翻译后端,i18n gem将按照定义的顺序使用它们,所以我想使用Redis后端*存储所有常见的翻译(例如AR验证消息)并将其用作后备所有需要i18​​n的应用程序的后端。

这种方法可以从另一个角度解决您的问题:编写一次翻译并永久分享。此外,每当您发现缺少翻译时,您都会为使用共享后端的所有应用程序修复它。

我还没有实现这个,因为我没有时间这样做,但我的想法是做一些类似上面提到的translate interface来管理翻译并使用railscast中显示的方法分享它们。

希望这会有所帮助。

* Redis或任何其他持久性网络键值存储可以用于该任务。