簡體   English   中英

本地化數據庫記錄的最佳方法

[英]Best way to localize database records

例如,我有項目模型和5個可用的語言環境。 用戶應該能夠創建本地化到這5個語言環境的項目嗎? 添加此類功能的最佳方法是什么,是否有一些方法可以實現? 我知道我應該將所有這些翻譯存儲在數據庫中,但是每個字段的諸如text_entext_pttext_estext_frtext_it類的東西讓我感到恐懼。 能給我個建議嗎? 謝謝!

UPD。 似乎我為這項工作找到了不錯的工具https://github.com/svenfuchs/globalize3 :)

Globalize3非常不錯,是的,但是它可能會給大型項目帶來麻煩。

主要是因為它為每種要轉換的數據類型創建一個表。 我看到一個項目包含超過35個(!)轉換表,這使維護工作大大復雜化。 想象一下該項目的翻譯管理系統。 您也可以避免這種復雜性。

使用序列化的想法非常好,我建議將其與postgres和jsonb (或hstore )一起使用。 它仍然允許您進行全文搜索:

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

運算符@>表示“包含”。 搜索使用的是全文優化,因此成本不是很高。 您可以在此處獲得更多信息:

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

否則,我會制造一顆還不成熟的寶石,但它允許將所有數據庫的i18n放在同一張表中: https : //github.com/anykeyh/rails_db_localize

這樣做的好處是您可以輕松構建翻譯界面,並且該界面完全覆蓋您的項目(要翻譯字段時無需架構更新)。

我認為翻譯總是很痛苦的,絕不應該低估:)

希望能幫助到你!

您可能要對與語言環境相關的數據使用序列化屬性,然后將標題(或其他內容)定義為哈希:

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

我將創建另一個表。 主表將僅保留文本鍵。 第二個表將保留帶有字段鍵和本地化鍵的本地化文本。 當然,文本鍵+本地化鍵應該是唯一的。

您將選擇一種語言作為主要語言。 因此,例如英文文本將是另一個的關鍵。

希望能幫助到你..

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM