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

时间:2008-10-02 00:11:56

标签: c# .net asp.net localization

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

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

这方面的一个例子是我在我的网站上有一个FAQ列表,我将这个列表保存在数据库中,这样我就可以轻松添加/删除更多,但是通过将它放在数据库中,我没有办法翻译这些信息多种语言。

5 个答案:

答案 0 :(得分:16)

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

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

以下是一些相关链接:

答案 1 :(得分:2)

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

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

ProductDescription然后包含  ProductId,Name,Description,LCID

答案 2 :(得分:2)

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

选项A

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

选项B

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

我认为最近的第三个选项,如果数据库本身支持它将在同一个字段中存储所有本地的值,这将是非常好的。如果该字段设置为varchar-multilocal,则必须通过传递参数来指定语言来访问它。我所知道的并不存在这样的事情,但我认为这会使事情变得更容易,而且更加流畅。

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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