我有一个使用 MySQL 数据库作为后端的 ASP.Net 网站。该网站是一个英文电子商务系统,我们正在考虑将其翻译成大约五种其他语言(法语、西类牙语等)的可能性。我们将让人工翻译来执行翻译——我们已经研究过自动化服务,但这些还不够好。

网站上的静态文本(例如标题、按钮等)可以通过 .Net 的内置本地化功能(resx 文件等)轻松地以多种语言提供。

我不太确定如何最好地在数据库中存储和检索多语言内容。例如,有一个包含这些字段的产品表...

  • productId (int)
  • categoryId (int)
  • 标题 (varchar)
  • 摘要 (varchar)
  • 描述(文本)
  • 特征(文本)

  • 标题、摘要、描述和功能文本需要以所有不同的语言提供。

    这是我想出的两个选项......

    为每种语言创建附加字段
    例如,我们可以为所有语言设置 titleEn、titleFr、titleEs 等,并对所有文本列重复此操作。然后,我们将根据所选语言调整我们的代码以使用适当的字段。这感觉有点hacky,并且还会导致一些非常大的表。此外,如果我们将来想添加其他语言,添加更多列将非常耗时。

    使用查找表
    我们可以使用以下格式创建一个新表...
    textId | languageId | content
    -------------------------------
    10     | EN         | Car
    10     | FR         | Voiture
    10     | ES         | Coche
    11     | EN         | Bike
    11     | FR         | Vélo
    

    然后,我们将调整我们的产品表以引用适当的 textId 用于标题、摘要、描述和功能,而不是将文本存储在产品表中。这看起来更优雅,但我想不出一种简单的方法可以在不使用复杂的 SQL 语句的情况下将这些数据从数据库中取出并放到页面上。当然,与以前的选项相比,将来添加新语言将非常简单。

    对于实现这一目标的最佳方法的任何建议,我将不胜感激!是否有任何“最佳实践”指南?以前有人这样做过吗?

    最佳答案

    在您的情况下,我建议使用两个表:

    Product
    -------------------------------
    ProductID  |  Price   |  Stock
    -------------------------------
    10         |   10     |   15
    
    
    ProductLoc
    -----------------------------------------------
    ProductID  | Lang   | Name      |  Description
    -----------------------------------------------
     10        |  EN    | Bike      |  Excellent Bike
     10        |  ES    | Bicicleta |  Excelente bici
    

    这样你就可以使用:
    SELECT * FROM
    Product LEFT JOIN ProductLoc ON Product.ProductID = ProductLoc.ProductID
                                   AND ProductLoc.Lang = @CurrentLang
    

    (左连接以防万一 ProductLoc 表中没有当前 lang 的记录)

    关于ASP.Net/MySQL : Translating content into several languages,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1438260/

    10-11 23:56
    查看更多