1

我們有需要本地化成幾種語言實體,例如數:推薦的方法本地化數據

A TEAM has a NAME and an ABBREVIATION. 
A PRODUCT has a NAME and a DESCRIPTION 

到現在爲止,我們已經創建與本地化領域的每個表的本地化版本,以及一種文化。因此,對於產品表,我們也會有一個本地化產品表。

它可以工作,但正如您可以想象的那樣,表和實體的數量在不斷增長,並且越來越多地爲所有這些對象創建管理界面。

我正在考慮更改爲EAV(實體/屬性/值)方法,而所有這些本地化文本將作爲屬性存儲在實體上,而表格字段將是屬性。該實體可以是本地化的。

但是我對這種方法有點謹慎,因爲我之前實現了EAV,並且知道還有很多其他與這種方法相關的問題(難以查詢數據,很難在數據庫中強制約束,需要一個很多工作來處理數據驗證等)

我想聽聽其他已完成數據本地化的人,您採取了哪些方法?

回答

0

一種選擇是設計數據庫猶如一個單一的語言,但增加了一個表:

localization (keytext PK, language PK, translated) 

現在,當你需要一個翻譯,你可以按照您想翻譯領域本表時,例如:

SELECT prod.id, prodname.translated AS name, proddesc.translated AS description 
FROM product prod 
INNER JOIN localization prodname ON prod.name = prodname.keytext AND prodname.language = 'en' 
INNER JOIN localization proddesc ON prod.description = proddesc.keytext AND proddesc.language = 'en' 

如果你擔心不完整的翻譯,改變INNER JOIN到LEFT JOIN和接合與原來的翻譯文本。

唯一的技巧就是你的原始文本需要被識別,例如,如果你有一個同名的產品和團隊,你會得到相同的翻譯。命名約定在這裏很有用。