2

例如,我有項目模型和5個可用的語言環境。用戶應該能夠創建本地化爲5個語言環境的項目? 什麼是最好的方式來添加這種功能,是否有一些軌道的方式呢? 據我所知,我應該將所有這些翻譯存儲在數據庫中,但像text_en,text_pt,text_es,text_fr,text_it這樣的每個字段都令我感到害怕。 你能給我一個建議嗎?謝謝!本地化數據庫記錄的最佳方法

UPD。好像我找到這份工作很好的工具https://github.com/svenfuchs/globalize3 :)

回答

0

您可能要使用的語言環境相關的數據序列化的屬性,並定義一個標題(或任何東西)作爲哈希:

class Project 
    serialize :title, Hash 
... 

p.title[:pt] = "title in pt" 

的問題在於你無法對文本值進行SQL搜索。如果要按名稱搜索項目,只需將與區域相關的屬性提取到另一個表中:

class Project 
    has_many :titles 
end 

class Title 
    belongs_to :project 
    belongs_to :locale # or just put there a string attribute 
end 
0

我會創建另一個表。主表將只保留文本的關鍵。第二個表格將使用字段鍵和本地化鍵保留本地化文本。當然,文本鍵+定位鍵應該是唯一的。

您將選擇一種語言作爲主要語言。所以,例如,英文文本將成爲另一個關鍵。

希望它可以幫助..

+0

選擇某種語言中的短語作爲其他翻譯的關鍵問題有兩個問題:1)您無法輕鬆改進您的關鍵語言措辭,因爲它會迫使您更新所有其他翻譯,並且2)相同在兩種語境中使用的關鍵語言的句子可能需要其他一些語言的不同翻譯 - 並且這是不可能實現的。恕我直言,一個更好的主意是使用一些與語言無關的符號,並將其翻譯爲其他語言,而不偏向任何一種語言。 – Arsen7

+0

如果您使用關係,則可以使用級聯更新功能。所以,如果您改進了關鍵語言,您還可以在翻譯表中更改關鍵字。但這只是第二個想法。如果開發者適合他/她的情況,他可以決定使用或不使用。 – Jan

1

Globalize3是相當科爾,是的,但它可以在一些麻煩更大的引領項目。

主要是因爲它會爲您想要翻譯的每種數據類型創建一個表。我看到一個擁有超過35(!)個翻譯表的項目,這使得維護工作變得非常複雜。 想象一下這個項目的翻譯管理系統。這也可以避免一些複雜性。

使用序列化的思想是相當不錯的,我會的Postgres和jsonb(或hstore)推薦它。這將仍然允許你做一些全文搜索:

MyModel.where("name @> ?", {fr: "NomFrancais"}.to_json) 

操作@>意味着「包含」。搜索使用全文優化,因此成本不高。你可以在這裏瞭解更多信息:

http://www.postgresql.org/docs/9.4/static/datatype-json.html

否則,我做了一個創業板,這是仍不成熟,但它允許有數據庫的所有國際化在同一個表:https://github.com/anykeyh/rails_db_localize

這裏的優點是,您可以輕鬆構建翻譯界面,並且它完全覆蓋您的項目(當您要翻譯字段時無需更新模式)。

翻譯在我看來總是很痛苦,不應該低估:)

希望它能幫助!