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

C# 如何本地化数据库驱动的网站,c#,.net,asp.net,localization,C#,.net,Asp.net,Localization,我一直在使用.NET内置的本地化功能,它们似乎都依赖于将数据放入resx文件中 但大多数系统不能依赖于此,因为它们是数据库驱动的。那么你如何解决这个问题呢?是否有一种内置的.NET方式,或者您是否在SQL中创建一个翻译表并手动执行所有操作?如果你必须在你的大多数网站上这样做,有没有理由使用resx的本地化方式 这方面的一个例子是,我在我的网站上有一个FAQ列表,我将此列表保存在数据库中,以便可以轻松添加/删除更多内容,但通过将其放入数据库,我无法将此信息翻译成多种语言。在我看来,动态内容(例如,

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

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


这方面的一个例子是,我在我的网站上有一个FAQ列表,我将此列表保存在数据库中,以便可以轻松添加/删除更多内容,但通过将其放入数据库,我无法将此信息翻译成多种语言。

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

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

以下是一些相关链接:


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

对于数据模型中的给定项,将描述部分拆分为具有区域设置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文件: