【问题标题】:How should I store localized versions of user-entered data in my database?我应该如何在我的数据库中存储用户输入数据的本地化版本?
【发布时间】:2011-05-22 17:19:06
【问题描述】:

我正在为需要 3 种语言(英语和其他 2 种语言)本地化的 Web 应用程序的客户工作。我了解如何在 ASP.NET 应用程序中使用资源来显示静态数据的本地化版本。但是,我不确定如何解决本地化用户输入数据的问题。例如,管理员可能想要在应用程序中添加一些新的元数据(例如新的产品类别)。这最终需要翻译成所有 3 种语言,但最初将使用管理员知道的任何语言输入。由于这种数据不是静态的,我们将其存储在数据库中。我们是否应该在主键中添加文化代码以区分相同数据的不同本地化版本?对于此类问题,是否有我不知道的“最佳实践”或模式?

【问题讨论】:

    标签: asp.net sql-server localization


    【解决方案1】:

    为您的实体创建一个子表,其中包含 MainItemID 和 LanguageCode(EN、DE、FR 等)的复合 PK。此子表存储您的语言特定文本。

    如果你总是有英语,或者它是一个后备,那么你可以有 DE、FR 等的子表和英语的主表。 LEFT JOIN 和 ISNULL 会处理这个问题。

    任何一种方式都可以,具体取决于您的确切需求,我怀疑这是第一个。当然,您需要确保在数据输入中至少有一个子行,例如新产品类别

    【讨论】:

      【解决方案2】:

      我建议您创建一个表来跟踪Language,然后在另一个表中使用语言ID 作为外键而不是语言代码。

      Language(LanguageID, Name)
      

      然后在其他表中使用 LanguageID 作为外键。

      例如您将本地化文本存储在表中

        LocalizedTextTable(ID,text,LanguageID)
      

      【讨论】:

      • 如果语言代码已经是唯一的,您是否有理由将此额外的连接添加到 Language 表中?
      【解决方案3】:

      我的解决方案是创建一个字符串列,其中包含所有受支持语言的编码数据。插入和提取数据需要特殊的应用程序逻辑。 支持多语言数据的专业文本编辑器也有很大帮助。

      【讨论】:

      • 这假设代码只有一个客户端,并且在数据库级别不可搜索,不是吗?
      • 实际上我使用了另外一个名为 DefaultTitle 的列来搜索和显示适当的位置。
      猜你喜欢
      • 1970-01-01
      • 2021-04-17
      • 2023-01-27
      • 1970-01-01
      • 2021-02-01
      • 2012-06-20
      • 1970-01-01
      • 1970-01-01
      • 2015-03-16
      相关资源
      最近更新 更多