2009-08-28 78 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