【问题标题】:Recommended approaches for localizing data本地化数据的推荐方法
【发布时间】:2026-02-08 18:40:02
【问题描述】:

我们有许多实体需要本地化为多种语言,例如:

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

到目前为止,我们一直在为每个表创建本地化版本,其中包含可本地化的字段和文化。所以对于 Product 表,我们也会有一个 LocalizedProduct 表。

它可以工作,但正如您可以想象的那样,表和实体的数量在增加,创建所有这些对象的管理界面变得越来越令人沮丧。

我正在考虑改为使用 EAV(实体/属性/值)方法,因此所有这些本地化文本都将存储为实体上的属性,而表字段将是属性。然后该实体将是可本地化的。

但是我对这种方法有点谨慎,因为我之前已经实现了 EAV,并且知道还有很多与这种方法相关的其他问题(难以查询数据,难以在数据库中实施约束,需要很多处理数据验证等的工作)

我想听听其他做过数据本地化的人,你们采取了什么方法?

【问题讨论】:

    标签: database database-design localization attributes translation


    【解决方案1】:

    一种选择是将数据库设计为针对单一语言,但添加一个表:

    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 并将翻译后的文本与原文合并。

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

    【讨论】: