2009-09-17 108 views
3

我有一个使用MySQL数据库作为后端的ASP.Net网站。该网站是一个英文电子商务系统,我们正在考虑将其翻译成约五种其他语言(法文,西班牙文等)的可能性。我们会让翻译人员执行翻译 - 我们已经看过自动化服务,但这些都不够好。ASP.Net/MySQL:将内容翻译成多种语言

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

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

  • 的productId(INT)
  • 的categoryId(INT)
  • 标题(VARCHAR)
  • 摘要(VARCHAR)
  • 描述(文本)
  • 特征(文本)

标题,概述,描述和功能特t将需要以所有不同的语言提供。

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

为每种语言的所有语言创建其他领域 例如,我们可以有titleEn,titleFr,titleEs等,并重复这适用于所有文本列。然后,我们将根据所选语言调整我们的代码以使用适当的字段。这感觉有点冒失,也会导致一些非常大的桌子。另外,如果我们希望将来添加更多语言,添加更多列将会非常耗时。

使用查表 我们可以创建一个新的表具有以下格式...

textId | languageId | content 
------------------------------- 
10  | EN   | Car 
10  | FR   | Voiture 
10  | ES   | Coche 
11  | EN   | Bike 
11  | FR   | Vélo 

然后我们会调整我们的产品表格来引用相应的文本ID为标题,摘要,描述和功能,而不是将文本存储在产品表中。这似乎更加优雅,但我想不出一种简单的方法,无需使用复杂的SQL语句即可将数据从数据库中移出并放到页面上。当然,与以前的选项相比,将来添加新语言将会非常简单。

我非常感谢任何有关实现此目标的最佳方法的建议!那里是否有任何“最佳实践”指导?有没有人做过这个?

回答

4

在你的情况,我会建议使用两个表:

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的记录)

+0

伟大的想法,我认为这将工作得很好。非常感谢您的回复。 – philwilks 2009-09-18 09:05:00

2

仅仅向现有表添加新列并不好。在该功能中添加新语言将非常困难。查找表格要好得多,但我认为由于翻译记录的数量,您可能会遇到性能问题。

我认为最好的解决办法是有一个共享表:

products: id, categoryid, 

和相同的表为每一种语言

products_en, products_de: product_id (fk), title, price, description, ... 

你只从共享一个选择和连接表与你的语言。其优点是可以本地化,甚至价格,品类,...

+0

我不确定这是否比添加其他列好得多?有大约20张桌子需要翻译,所以用五种语言将会增加到大约120张桌子。 – philwilks 2009-09-17 11:44:15

+0

感谢您的建议,虽然我不是忘恩负义,但我确信这不是最好的解决方案。 – philwilks 2009-09-17 11:45:25

+0

没关系。我认为没有“最佳解决方案”。一切都有一些优点/缺点。在这里,你将有更好的表现,然后查找解决方案。如果您需要更多的列到表中并且不会有很多记录,查找解决方案就很好。表的数量没有问题,您可以使用skript来为每个表添加新列。如果您将有20个可翻转立柱和1米记录,则查找速度会很慢。但使用它并没有错。 – 2009-09-17 11:52:22