我们有许多需要本地化为多种语言的实体,例如:
A TEAM has a NAME and an ABBREVIATION.
A PRODUCT has a NAME and a DESCRIPTION
到目前为止,我们一直在创建每个表的本地化版本,其中包含可本地化的字段以及文化。因此,对于产品表,我们也会有一个 LocalizedProduct 表。
它可以工作,但是你可以想象表和实体的数量在不断增长,而且创建所有这些对象的管理界面变得越来越令人沮丧。
我考虑改为使用EAV(实体/属性/值)方法,因此所有这些本地化文本都将作为属性存储在实体上,而表字段将是属性。然后该实体可以本地化。
但是我对这种方法有点警惕,因为我之前已经实施了EAV,并且知道有很多其他问题与此方法相关(难以查询数据,难以执行)数据库中的约束,需要大量的工作来处理数据验证等。)
我想听听那些已经完成数据本地化的人,你采取了什么方法?
答案 0 :(得分: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,并将翻译后的文本与原始文件结合使用。
这方面的唯一技巧是您的原始文本需要识别,例如如果您的产品和团队名称相同,则您可以获得相同的翻译。命名约定在这里很有用。