如何本地化数据库驱动的网站

本文关键字:网站 数据库 本地化 | 更新日期: 2023-09-27 17:48:54

我一直在玩.NET内置的本地化功能,它们似乎都依赖于将数据放在resx文件中。

但大多数系统不能依赖于此,因为它们是数据库驱动的。那么你如何解决这个问题呢?是否有一种内置的.NET方式,或者您是否在SQL中创建一个翻译表并手动完成所有操作?如果你必须在大多数网站上这样做,有什么理由使用resx本地化方式吗?

一个例子是,我的网站上有一个常见问题列表,我把这个列表保存在数据库中,这样我就可以很容易地添加/删除更多,但把它放在数据库中后,我没有办法把这些信息翻译成多种语言。

如何本地化数据库驱动的网站

在我看来,本地化动态内容(例如常见问题解答)应该由您在数据库中完成。根据问题的存储方式,我可能会创建一个"locale"列,并在从数据库中选择FAQ问题时使用该列。当您开始本地化许多表时,我不确定这是否能很好地扩展。

对于静态内容(例如,表单字段标签、静态文本、图标等),您可能可以使用基于文件的资源。然而,如果您真的想这样做,那么创建一个可以处理此问题的自定义资源提供程序实现似乎并不困难。

以下是一些相关链接:

  • http://channel9.msdn.com/forums/Coffeehouse/250892-Localizing-with-a-database-or-resx-files/
  • http://weblogs.asp.net/scottgu/archive/2006/05/30/ASP.NET-2.0-Localization-_2800_Video_2C00_-Whitepaper_2C00_-and-Database-Provider-Support_2900_.aspx
  • http://www.arcencus.nl/Blogs/tabid/105/EntryID/20/Default.aspx
  • http://msdn.microsoft.com/en-us/library/aa905797.aspx
  • http://www.codeproject.com/KB/aspnet/customsqlserverprovider.aspx

对于数据模型中的给定项,将描述部分拆分为具有区域设置Id列(LCID)的本地化表。

因此,Product的表实际上不包含产品描述或名称,而只包含其硬值和快速值(ProductId、EAN、NumberInStock、NextStockData、IsActive、IsPublished)等。

然后ProductDescription包含ProductId,名称,描述,LCID

我住在加拿大,所以使用多种语言是件大事。我看到了两种方法。第一个选项是将特定记录的所有本地化数据存储在不同的表中,该表通过主键和区域设置链接到原始表。第二个选项与第一个选项类似,只是对于每个区域设置,都有一个不同的表,区域设置作为表名的后缀。

选项A

Item (ItemID, ...)
ItemLocal (ItemID,LocaleID,....)

选项B

Item (ItemID, ...)
Item_ENUS (ItemID,....)
Item_ENGB (ItemID,....)
Item_FR (ItemID,....)

我认为最近的第三个选择是将所有本地值存储在同一字段中,如果数据库本机支持它,这将非常好。如果该字段设置为varchar multilocal,那么您必须通过传递一个参数来指定语言来访问它。据我所知,没有这样的事情存在,但我认为这确实会让事情变得更容易,更流畅。

目前,翻译不是可以自动完成的。最好的方法是让一个人翻译,并使用尼克的方法来展示正确的语言。

我们混合使用RESX文件和Kibbee响应的选项a。我们创建了一个简单的工具来在线管理RESX文件:http://blog.lavablast.com/post/2008/02/RESX-file-Web-Editor.aspx