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

17
我正在寻找一种插件/ gem 解决方案,以扩展原生的Rails i18n,将翻译存储到我的数据库中。也许我使用了错误的搜索词,但我找到的所有信息都表明,更改后端实际上是可以进行的,以及这篇博客文章描述如何编写自己的后端。

很难想象,那么多的Rails应用程序都将它们的翻译存储在yml文件中,或者每个开发人员都编写自己的后端!

您是否了解可行的解决方案?在yml中存储多行文本真的让我感到沮丧!;)

谢谢和问候,

4个回答

21

在迁移中使用以下代码创建一个表:

   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版本开始,我相信他们将这段代码移至独立的gem中...我忘记那个gem的名字了。


Rails指南中有关于这个主题的一些内容(http://guides.rubyonrails.org/i18n.html#using-different-backends)。感谢@Jason填补了这些空白! - captainpete

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

关于这个主题的一些讨论正在进行中,可以在google i18n用户组中找到:

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

问题已经解决,感谢I18n Sven Fuchs先生! ;)


不错!很高兴听到你有一个好的解决方案。也谢谢你分享。 - Aram Verstegen

1

1
嗨,阿拉姆,好的,Globalize使得翻译模型相关的内容变得容易。但是其他静态内容如imprint(版权声明)、about(关于)和e-mail内容等呢? - xijo
我想你需要编写自己的后端。你具体想做什么? - Aram Verstegen
我的当前项目需要处理大量的描述文本 - 但由于它将来会更加动态化,我们决定从一开始就使用Rails。现在我们的yml文件已经超过了1000行!也许我会创建一个模型,并将序列化的键值对存储在其中。这样做并不美观,但是是一种妥协。 - xijo

0

我们使用fast_gettext的经验非常好。

它具有基于数据库的后端,配备了一个控制器,可以通过Web进行翻译。 缓存是内置的,尽管我们不得不在启动时编写预加载所有翻译的代码(这比使用缓存逐个获取它们要快得多)。


你能在 fast_gettext 的维基上分享预加载的内容吗?这样其他人就可以重复使用了。 - grosser

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接