数据库
首页 > 数据库> > ASP.Net / MySQL:将内容翻译成多种语言

ASP.Net / MySQL:将内容翻译成多种语言

作者:互联网

我有一个ASP.Net网站,它使用MySQL数据库作为后端.该网站是一个英语电子商务系统,我们正在研究将其翻译成其他五种语言(法语,西班牙语等)的可能性.我们将让人工翻译人员进行翻译 – 我们看过自动化服务但这些还不够好.

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

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

> productId(int)
> categoryId(int)
> title(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的记录)

标签:mysql,asp-net,translation,localization,multilingual
来源: https://codeday.me/bug/20190827/1742739.html