ASP.NET2.0的全球化与本地化之全球化

在我的网站中,在创建资源文件并加入一些本地化数据后,我首先开始使用显式本地化来设置控件(例如,在我的网站中的标签)的文本,以便它们可以从资源文件中得到它们的值。既然存在四种语言;所以,除一个完全可依赖的资源文件之外(没有本地化命名),我创建了四个资源文件。

  一旦我们从web应用程序中提取了所有的内容并且基于用户选择和使用Resources.TestWebSite.XXXPropertyName设置好了Culture和UICulture,那么,我们就已经为我们的全球化框架作好了准备。现在,剩下的唯一事情是把资源特定的数据添加到相应的资源文件中。针对每一种文件类型,我们需要有一个单独的(和适当命名的)资源文件。这个过程称为本地化。在我的web.config文件中,我使用了下列属性:

<globalization responseEncoding"=utf-8" requestEncoding="utf-8" fileEncoding="utf-8" />

  注意,这里使用了编码属性-utf-8(8位Unicode转换格式),因为它是可变长度字符编码;并且,除了它是ASCII兼容的之外,还能够代表例如Greek,Arabic等语言。有关UTF-8编码的更多信息,请参考下面这个链接:

  http://en.wikipedia.org/wiki/UTF-8

  另外,特别值得注意的是,尽管我们能够在发布服务器上拥有原始XML形式的资源文件(这样,用户可以方便地编辑它们而不必重新编译整个站点),但是,如果我们对资源文件作出任何修改的话,应用程序将重新开始运行。这有可能妨碍此发布的应用程序的性能。

  二、设置语言方向相应的dir属性

  许多时候,我们还需要设置本地化文本的方向(这是使用或标签的dir属性设置的)。这是必需的,因为有些语言从右到左(RTL)读取,例如Arabic,不同于象Hindi和English这样语言的标准的从左到右(LTR)的读取方式。这可以通过把.resx文件中的dir属性设置为适当的值来实现。

  首先,你可以在所有资源文件中创建一个Direction(你可以使用任何名)域,并基于单个资源文件把它的属性设置为RTL或LTR。对于Arabic,这个域的值是RTL,而对于Hindi则是LTR。然后,把标签的dir属性设置为如下:

<body runat="server" dir="<%$ Resources: TestSiteResources, Direction %>">

  这样就可以设置正确的方向,因为该值来自于资源文件(基于当前线程文化)。

  三、使用数据库实现本地化

  我们已经看到了如何本地化控件的文本和UI描述。但是,存储在数据库中的内容会怎么呢?其实,这一部分内容也需要本地化,但是由于它存储在一个DB中,所以我们不能使用资源文件来实现相同目的。为此,我们需要创建新的表格。

  假定我有一个存储用户评价的表格。该表格结构如下所示:

  现在,我们想实现以本地化的文本来显示Comments和Name字段,但是,我们不可能把所有这些域的不同语言版本都存储在同一个表格中(既然存在不需要被本地化但却重复的其它域)。因此,我们需要重新组织该表格结构并且创建另一个表格来存储这两个域的本地化版本。首先,我们需要从这个表格中删除这两个域并创建一个如下所示的新表格:

相关消息:
上一页1234下一页

责任编辑:叶江

关键字:.NET 微软

专家博文

白皮书