2009-08-28 103 views
16

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

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

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

感谢和问候,

回答

19

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 /初始化/ 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我相信他们将这些代码移植到了它自己的宝石中......我忘记了那个宝石被称为什么。

+0

Rails指南在这个主题上有一些内容(http://guides.rubyonrails.org/i18n.html#using-different-backends)。感谢您填补@Jason的空白! – captainpete 2013-03-08 05:40:41

1
+1

Hello Aram, 好吧,全球化可以很容易地翻译模型相关的内容,但是所有的静态内容如印记,电子邮件内容等呢? – xijo 2009-08-28 18:21:22

+0

我想象你将不得不编写自己的后端。你究竟想要做什么? – 2009-08-28 18:53:15

+0

我目前的项目必须处理大量的描述文本 - 但由于它将在未来变得更加动态,所以我们决定从一开始就使用rails。现在我们的yml文件有超过1000行!也许我会创建一个模型并在其中存储序列化的键值对。一点也不漂亮,但妥协.. – xijo 2009-08-28 19:48:15

9

我终于找到了我与斯文福克斯的帮助下寻找:

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

Dylan Stamat的这个非常棒的插件完全可以实现名称所指示的功能,并且可以处理缓存!

斯文也提到的,国际化/ 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

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

+0

好!很高兴听到你有一个很好的解决方案。感谢分享。 – 2009-08-30 21:39:37

0

我们与fast_gettext

它有一个带有一个控制器在网上做翻译一个DB支持后端一个很好的经验。 缓存是内置的,尽管我们必须在引导时对代码中的所有翻译进行预加载代码(速度要快得多,然后逐个缓存)。

+0

您可以在fast_gettext wiki中分享预加载,以便其他人可以重用它吗? – grosser 2012-05-01 18:06:37

+0

我也想那样! – caesarsol 2015-11-24 15:09:37