Rails:将翻译存储在数据库中

时间:2009-08-28 13:22:57

标签: ruby-on-rails database internationalization backend

我正在寻找插件/ gem解决方案来扩展本机rails i18n以将我的翻译存储到我的数据库中。也许我使用了错误的搜索词,但我找到的只是信息,改变后端实际上是可能的,而blog entry描述了如何编写我自己的后端。

很难想象,所有那些rails应用程序都将其翻译存储在yml文件中,或者每个开发人员都编写了自己的后端!

你知道为此工作的解决方案吗?在yml中存储多行文本真的让我失望! ;)

谢谢和问候,

4 个答案:

答案 0 :(得分:21)

i18n内置支持将数据库用作翻译后端。

在迁移中使用此代码创建表:

   create_table :translations do |t|
     t.string :locale
     t.string :key
     t.text   :value
     t.text   :interpolations
     t.boolean :is_proc, :default => false
   end

然后在config / initializers / i18n.rb中添加一个包含内容的初始值设定项:

   I18n.backend = I18n::Backend::ActiveRecord.new

最后......将翻译放在表格中。类似的东西:

locale key      value
en     Cool     Cool
es     Cool     Frio
en     nav.Home home
es     nav.Home casa
...

从i18n 0.5.0开始,我相信他们将这些代码移到了它自己的宝石中......我忘记了那个宝石的名字。

答案 1 :(得分:9)

我终于在Sven Fuchs的帮助下找到了我想要的东西:

  

http://github.com/dylanz/i18n_backend_database/tree/master

Dylan Stamat的这个非常棒的插件完全符合名称所指示的内容并另外处理缓存!

Sven还提到,i18n / active_record的当前分支也提供了ActiveRecord后端:

  

http://github.com/svenfuchs/i18n/blob/active_record/lib/i18n/backend/active_record.rb

关于这个主题的一些讨论正在goolge i18n用户组中进行:

  

http://groups.google.com/group/rails-i18n/browse_thread/thread/6b7ba3c401890a7e

问题解决了,感谢Mr I18n Sven Fuchs! ;)

答案 2 :(得分:1)

答案 3 :(得分:0)

我们使用fast_gettext

获得了很好的体验

它有一个由DB支持的后端,它带有一个控制器,可以通过Web进行翻译。 缓存是内置的,虽然我们必须在启动时对所有翻译的预加载进行编码(它比使用缓存一个接一个地快得多)。