ASP.NET 全球化和本地化

    技术2025-02-02  42

    全球化是设计和开发适合不同区域性的应用程序的过程。本地化是为给定的区域性和区域设置自定义应用程序的过程。

     

    使用资源本地化 ASP.NET 网页

    本地化是为给定的区域性和区域设置自定义应用程序的过程。本地化主要涉及翻译用户界面。

    ASP.NET 网页中,可以将控件配置为从资源获取其属性值。在运行时,资源表达式将被相应资源文件中的资源替换。资源文件是 XML 文件,其中包含要转换为不同语言或图像路径的字符串。资源文件包含键/值对,每一对都是一个单独的资源。键名不区分大小写。

    您需要为每种语言(如英语和法语)或每种语言和区域性(如英语 [英国]、英语 [美国])分别创建一个资源文件。每个本地化资源文件都有相同的键/值对;本地化资源文件与默认资源文件的唯一区别就是前者所包含的资源可能少于后者。随后,内置的语言回退过程将处理非特定资源或默认资源的加载。

    ASP.NET 中的资源文件具有 .resx 扩展名。在运行时,.resx 文件将编译进一个程序集内,该程序集有时称为附属程序集。与 ASP.NET 网页相同,.resx 文件也是动态编译的,因此无需创建资源程序集。编译过程将多个语言类似的资源文件压缩在同一程序集内。

    创建资源文件时,首先应创建基 .resx 文件。对于每种要支持的语言,请创建一个具有相同文件名的新文件。但在该名称中,应包括语言或语言和区域性(区域性名称)。有关区域性名称的列表,请参见Culture 转自:http://www.cnblogs.com/luminji/archive/2010/11/23/1885361.htmlUICulture 属性是使用标识语言的 Internet 标准字符串(例如,en 代表英语,es 代表西班牙语,de 代表德语)和标识区域性的 Internet 标准字符串(例如,US 代表美国,GB 代表英国,MX 代表墨西哥,DE 代表德国)设置的。一些示例包括:en-US 代表英语/美国,en-GB 代表英语/英国,es-MX 代表西班牙语/墨西哥。有关更多信息,请参见 CultureInfo CultureInfo 类。例如,您可以创建下列文件:

    WebResources.resx

    基资源文件。这是默认(回退)资源文件。

    WebResources.es.resx

    西班牙语的资源文件。

    WebResources.es-mx.resx

    专用于西班牙语(墨西哥)的资源文件。

    WebResources.de.resx

    德语的资源文件。

    在运行时,ASP.NET 使用与 CurrentUICulture 属性的设置最为匹配的资源文件。线程的 UI 区域性根据页的 UI 区域性进行设置。例如,如果当前的 UI 区域性是西班牙语,则 ASP.NET 使用 WebResources.es.resx 文件的已编译版本。如果当前用户界面区域性没有匹配项,ASP.NET 将使用资源回退。首先,它将搜索特定区域性的资源。如果这些资源不可用,它将搜索非特定区域性的资源。如果仍找不到这些资源,ASP.NET 将加载默认资源文件。

     

    为 ASP.NET 网站创建资源文件

    ASP.NET 中,可以创建具有不同范围的资源文件。可以创建全局资源文件,这意味着可以从位于网站中的任意页或代码读取这些资源文件。也可以创建本地资源文件,这些文件存储单个 ASP.NET 网页(.aspx 文件)的资源。

    全局资源文件

    将资源文件放入应用程序根目录的保留文件夹 App_GlobalResources 中,即可创建全局资源文件。App_GlobalResources 文件夹中的任何 .resx 文件都具有全局范围。此外,ASP.NET 还会生成一个强类型对象,从而提供了一种以编程方式访问全局资源的简便方法。

    本地资源文件

    本地资源文件是只应用于一个 ASP.NET 页或用户控件的文件(文件扩展名为 .aspx.ascx .master ASP.NET 文件)。本地资源文件所放入的文件夹具有 App_LocalResources 保留名称。与根 App_GlobalResources 文件夹不同,App_LocalResources 文件夹可以位于应用程序的任意文件夹中。通过使用资源文件的名称,可以将一组资源文件与特定的网页关联起来。

    例如,如果在 App_LocalResources 文件夹中有一个名为 Default.aspx 的页,则可以创建下列文件:

    Default.aspx.resx。这是未找到语言匹配项时的默认本地资源文件(回退资源文件)。 Default.aspx.es.resx。这是西班牙语的资源文件,其中不包含区域性信息。 Default.aspx.es-mx.resx。这是专用于西班牙语(墨西哥)的资源文件。 Default.aspx.fr.resx。这是法语的资源文件,其中不包含区域性信息。

    文件的基名称与页文件名相同,后跟语言和区域性名称,最后以扩展名 .resx 结尾。有关区域性名称的列表,请参见 CultureInfo

     

    使用资源

    使用本地资源的隐式本地化

    若要使用资源设置控件属性值,可以使用隐式本地化或显式本地化,如下所示:

    隐式本地化使用的是本地资源,并允许您将控件属性自动设置为匹配的资源。 显式本地化使您可以使用资源表达式将控件属性设置为本地或全局资源文件中的特定资源。

    <asp:Button ID="Button1" runat="server" Text="DefaultText"

    meta:resourcekey="Button1" />

    <asp:Button ID="Button1" runat="server"

    Text="<%$ Resources:WebResources, Button1Caption %>" />

     

    本地化静态文本

    如果页面包含静态文本,则可以使用 ASP.NET 本地化,方法是将该本地化包含在 Localize 控件中,然后使用显式本地化设置该静态文本。Localize 控件不呈现标记;它的唯一功能就是充当本地化文本的占位符。

     

    模板中的隐式本地化

    在模板化控件(例如 DataListGridView Wizard 控件)中,可以通过父控件的隐式资源表达式来访问模板样式属性,从而本地化这些属性。不能对模板本身使用隐式资源表达式。

    若要本地化模板属性 (Property) 的值,请使用该模板所属控件的 meta 属性 (Attribute) 和一个资源键。随后在资源文件中使用 Property.Subproperty 语法或 Property-Subproperty 语法。

     

    使用编程方式制定资源

    <%@ Page Language="C#" %>

     

    <script runat="server">

    protected void Button1_Click(object sender, EventArgs e)

    {

    Button1.Text =

    GetLocalResourceObject("Button1.Text").ToString();

    Image1.ImageUrl =

    (String)GetGlobalResourceObject(

    "WebResourcesGlobal", "LogoUrl");

    Image1.Visible = true;

    }

    </script>

     

    <html >

    <head id="Head1" runat="server">

    <title>Untitled Page</title>

    </head>

    <body>

    <form id="form1" runat="server">

    <div>

    <asp:Button ID="Button1" runat="server"

    OnClick="Button1_Click"

    Text="Get Resources" />

    <asp:Image ID="Image1" runat="server"

    Visible="false" />

    </div>

    </form>

    </body>

    </html>

     

    如何:为 ASP.NET 网页全球化设置区域性和 UI 区域性

    ASP.NET 网页中,可以设置两个区域性值,即 Culture UICulture 属性Culture 值确定与区域性相关的函数的结果,如日期、数字和货币格式等UICulture 值确定为页加载哪些资源。

     

    这两个区域性设置不需要具有相同的值。根据您的应用程序,分别设置它们可能很重要。Web 拍卖站点就是这样的一个示例。对于每个 Web 浏览器,UICulture 属性可能有所变化,而 Culture 保持不变。因此,价格始终以相同的货币和格式显示。

    完全依赖浏览器设置来确定网页的 UI 区域性并不是最佳做法。用户使用的浏览器通常并未设置为他们的首选项(例如在 Internet 咖啡馆中)。您应该为用户提供显式选择页面的语言或语言和区域性(CultureInfo 名称)的方法。

     

    以声明方式设置 ASP.NET 网页的区域性和 UI 区域性

    若要设置所有页的区域性和 UI 区域性,请向 Web.config 文件添加一个 globalization 节,然后设置 uiculture culture 属性,如下面的示例所示:

    <globalization uiCulture="es" culture="es-MX" />

    若要设置单个页的区域性和 UI 区域性,请设置 @ Page 指令的 Culture UICulture 属性,如下面的示例所示:

    <%@ Page UICulture="es" Culture="es-MX" %>

    若要使 ASP.NET 将区域性和 UI 区域性设置为当前浏览器设置中指定的第一种语言,请将 UICulture Culture 设置为 auto。也可以将该值设置为 auto:culture_info_name,其中 culture_info_name 是区域性名称。有关区域性名称的列表,请参见 CultureInfo 。您可以在 @ Page 指令或 Web.config 文件中进行该设置。

     

    以编程方式设置 ASP.NET 网页的区域性和 UI 区域性

    重写该页的 InitializeCulture 方法。 在重写的方法中,确定要为页设置的语言和区域性。 以下列方式之一设置区域性和 UI 区域性: 将页的 Culture UICulture 属性设置为语言和区域性字符串(如 en-US)。这两个属性是页的内部属性,只能在页中使用。 将当前线程的 CurrentUICulture CurrentCulture 属性分别设置为 UI 区域性和区域性。CurrentUICulture 属性采用一个语言和区域性信息字符串。若要设置 CurrentCulture 属性,请创建 CultureInfo 类的一个实例并调用其 CreateSpecificCulture 方法。

    下面的代码示例显示一个 ASP.NET 网页,该网页允许用户从下拉列表中选择他们的首选语言。该页导入两个命名空间,使得使用线程处理类和全球化类更加方便。

    <%@ Page Language="C#" uiculture="auto" %>

    <%@ Import Namespace="System.Threading" %>

    <%@ Import Namespace="System.Globalization" %>

    <script runat="server">

    protected override void InitializeCulture()

    {

    if (Request.Form["ListBox1"] != null)

    {

    String selectedLanguage = Request.Form["ListBox1"];

    UICulture = selectedLanguage ;

    Culture = selectedLanguage ;

     

    Thread.CurrentThread.CurrentCulture =

    CultureInfo.CreateSpecificCulture(selectedLanguage);

    Thread.CurrentThread.CurrentUICulture = new

    CultureInfo(selectedLanguage);

    }

    base.InitializeCulture();

    }

    </script>

    <html>

    <body>

    <form id="form1" runat="server">

    <div>

    <asp:ListBox ID="ListBox1" runat="server">

    <asp:ListItem Value="en-US"

    Selected="True">English</asp:ListItem>

    <asp:ListItem Value="es-MX">Español</asp:ListItem>

    <asp:ListItem Value="de-DE">Deutsch</asp:ListItem>

    </asp:ListBox><br />

    <asp:Button ID="Button1" runat="server"

    Text="Set Language"

    meta:resourcekey="Button1" />

    <br />

    <asp:Label ID="Label1" runat="server"

    Text=""

    meta:resourcekey="Label1" />

    </div>

    </form>

    </body>

    </html>

     

    如何:为 ASP.NET 网页全球化选择编码

    在内部,ASP.NET 网页后面的代码将所有字符串数据作为 Unicode 处理。您可以设置该页对其响应进行编码的方式,这会相应地设置 HTTP 标头的 Content-Type 部分上的 CharSet 属性。这使得浏览器能够在没有元标记的情况下,或者在不必从内容推导正确编码的情况下,就可以确定该编码。此外,还可以设置页面解释用请求发送的信息的方式。

    指定编码

    若要为所有页设置编码,请将 Globalization 属性 (Property) 添加到 Web.config 文件,然后设置它的 fileEncodingrequestEncoding responseEncoding 属性 (Attribute),如下面的示例所示

    <configuration>

    <system.web>

    <globalization

    fileEncoding="utf-8"requestEncoding="utf-8"responseEncoding="utf-8"

    culture="en-US"

    uiCulture="de-DE"

    />

    </system.web>

    </configuration>

    若要为个别页设置编码,请设置 @ Page 指令的 RequestEncoding ResponseEncoding 属性,如下面的示例所示:

    <%@ Page RequestEncoding="utf-8" ResponseEncoding="utf-8" %>

     

    http://msdn.microsoft.com/zh-cn/library/c6zyy3s9(VS.90).aspx

     

    最新回复(0)