18

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

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

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

4

5 回答 5

17

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

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

以下是一些相关链接:

于 2008-10-02T01:09:54.660 回答
2

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

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

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

于 2008-10-02T19:40:52.260 回答
2

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

选项 A

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

选项 B

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

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

于 2008-10-02T19:53:16.863 回答
0

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

于 2008-10-02T12:01:16.560 回答
0

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

于 2008-10-04T20:01:10.697 回答