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和接合与原来的翻译文本。

唯一的技巧就是你的原始文本需要被识别,例如,如果你有一个同名的产品和团队,你会得到相同的翻译。命名约定在这里很有用。