ASP.NET全球化与本地化 c#多国语言的支持 (项目支持多国语言的开发)

ASP.NET 2.0及以上的开发平台,为全球化本地化应用程序提供了工具,而且实现起来非常简单。以下内容是使用c#,按照帮助一步步做的,将为初学者提供详细的实现步骤。

一 几个必要概念
 (一) 支持全球化
  由于Internet使得软件更容易跨越国家边界,所以全球化也就有了格外的重要。

  1. 全球化
  全球化是为本地化准备应用程序的过程。这一步包括确定应用程序中所有能够本地化的资源,并从可执行代码中分离车它们,一方便对它们进行修改。

  2. 本地化能力
  在此准备过程的本地化能力阶段,需要检查确定转化该应用程序是否真的不需要改变程序代码。

  3. 本地化
  再后,在此准备过程的本地化阶段,为新的区域性定制该应用程序。

 (二) 区域性

  1. 理解区域性
  .NET框架通过通过指定某个区域性来标识本地化内容的目标用户。区域性是比语言更为精确的一个概念。例如:美国英语和英国英语在.NET框架中就是两个不同的区域性。要完全本地化某个应用程序,就必须依靠区域性而不能依靠语言。

  2. 区域性代码
  .NET框架通过一组缩写词来表示区域性。每个缩写词是由区域性代码后跟一个或多个次区域性代码组成。区域性代码均为小写字母,而次区域性代码则为大写字母。例如:
  ·ni-BE 标识荷兰(比利时)区域性。方便生活在比利时的荷兰用户使用。
  ·sr-SP-Latn 这是多个次区域性的示例,标识在塞尔维亚以拉丁字母蛇蝎的塞尔维亚语。
  ·es 标识西班牙区域性。这是个非特定区域性,也就是不再指定次区域性。

 (三) 区域性的属性和方法

  1. CurrentUICulture和CurrentCulture之间的区别
  两者之间的区别在于.NET框架对他们的使用。CurrentUICulture属性用于从适当的文件检索区域性特定的资源(最重要的是用户界面文本)。CurrentCulture属性用于设置日期、时间、货币和数字格式,以及其他区域性的功能,包括排序顺序、字符串比较规则和包装规则等。

  在没有看完整个本文的情况下,以下示例可以不看,以免混淆概念。
  2. 可以通过使用System.Globallization命名空间中的CultureInfo类,简单更改线程的区域性。

  具体改变一个线程的区域性
  

using System;
using System.Globalization;
using System.Threading;
class test
{
    public static void main()
    {
        Thread.CurrentThread.CurrentCulture = new CultureInfo("de-DE");
        Console.WriteLine(CultureInfo.CurrentUICulture.Name);
    }
}

 

 

二 创建文件系统网站
  打开 vs2005, 在菜单“文件”--“新建网站”,在“Visual Studio 已安装的模板”之下单击“ASP.NET 网站”。在“位置”框中输入要保存网站页面的文件夹的名称。 例如,键入文件夹名“C:\WebSites”。在“语言”列表中,单击您想使用的编程语言c#。单击“确定”。系统(Visual Web Developer) 创建该文件夹和一个名为 Default.aspx 的新页。

三 通过 ASP.NET 进行隐式本地化

 (一) 自动生成资源文件
  
  单击Default.aspx 页面底下的“设计” 或 “源”,可在 “设计”视图 和 “HTML源代码”视图 之间来回切换。

  1. 切换到“设计”视图。

  在“工具箱”中,从“标准”区域中将一个 Button控件拖动到页上。单击设计器图面或控件。
  在菜单上“工具”--“生成本地资源”,系统将在解决方案中自动创建一个 App_LocalResources 新文件夹,并在其中自动对应页面文件名称创建一个 Default.aspx.resx 新文件。使用隐式本地化时,资源文件名取决于各个页的名称。

  2. 切换到“源”视图。
  查看对控件声明的更改,系统已向控件添加了一个属性,以从新创建的资源文件检索其值。例如,Button 控件的标记具有新的 meta:resourcekey 属性。
  

<asp:Button ID="Button1" Runat="server" meta:resourcekey="ButtonResource1" Text="Button" />

 

  3. 浏览器向 Web 服务器发送区域性请求
  当浏览器向 Web 服务器发送请求时,该请求可包含有关当前语言和区域性的信息。例如,一个浏览器可能会发送字符串 "en-us" 以指示它已设置为使用美国英语;而另一个浏览器可能发送字符串 "zh-cn" 以指示它已设置为使用中国中文。

  4. 回退区域性的资源文件
  该资源文件用作所有请求的默认资源文件。(它是回退区域性的资源文件。)如果浏览器未指定任何区域性,或者浏览器请求包含不支持的语言或区域性,则会从此默认文件提取资源值。

  5.使用资源编辑器编辑资源文件
  现在已创建了资源文件,您可以使用资源编辑器将本地化后的文本放入该文件中。
  在解决方案资源管理器中打开 Default.aspx.resx
  在资源编辑器的“值”下,列出了页中放置的每个控件的“Text”属性。在此处更改值会导致更改默认区域性的值。 将“ButtonResource1.Text”设置为 local-auto-english。 保存该文件。

  对页进行测试,按 Ctrl+F5 运行该页,就会看到所做的改变。

 (二) 添加其他区域性

  每种语言和区域性的组合均需要有唯一的资源文件。若要添加其他区域性,可以使用默认文件作为起点。可以为不同的区域性和区域设置创建资源文件,方法是创建新的资源文件,并在文件名中包含 ISO 语言代码(如 zh-cn、en-us、fr-ca 和 en-gb)。这些 ISO 代码位于页名和 .resx 文件扩展名之间,如 Default.aspx.en-us.resx。若要指定非区域性特定的语言,则应删除国家/地区代码,例如指定法语时应使用文件名 Default.aspx.fr.resx。

  1.
  在解决方案资源管理器中,右击 Default.aspx.resx 文件,并单击“复制”。
  右击 App_LocalResources 文件夹,然后单击“粘贴”。
  右击“副本 Default.aspx.resx”文件,单击“重命名”,然后键入“Default.aspx.zh-CN.resx”。

  仿上,再建立一个 Default.aspx.en-US.resx 文件。双击打开以上两者,将 Button控件的“ButtonResource1.Text”分别设置为  本地化-可选修改-中文  和 local-modify-english 。并分别保存文件。


  结果如下:
  

 
文件Default.aspx.zh-CN.resx的内容
名称
ButtonResource1.Text 本地化-可选修改-中文
文件Default.aspx.en-US.resx的内容
名称
ButtonResource1.Text local-modify-english

 

  对页进行测试,按 CTRL+F5 运行页。按钮将显示为: 本地-修改-中文

  2. 用备用语言设置进行测试
  若要查看 ASP.NET 是否在使用这个新的资源文件,必须先将浏览器设置更改为请求所需的区域性。

  更改IE浏览器的语言设置,在 Microsoft Internet Explorer 中,单击菜单“工具”--“Internet 选项”。
  单击下部的“语言”。在“语言首选项”对话框中单击“添加”。
  在“添加语言”对话框的“语言”下,单击“英语(美国)[en-us]”,然后单击“确定”。
  在“语言首选项”对话框的“语言”下,单击“英语(美国)[en-us]”,单击“上移”,直到首位,再单击“确定”。
  Internet Explorer 现在设置为将 en-us 作为所有请求的语言设置传递。在 Default.aspx 页中将区域性设置为 auto 时,ASP.NET 会试图根据语言和区域性首选项定位资源文件及其相应值以生成页。

  对页进行测试,按 CTRL+F5 运行页。按钮将显示为: local-modify-english

  3. 在文件web.config中的语言选择

<system.web>
      <globalization culture="en-US" uiCulture="en-US"/>
</system.web>

 


  这里文件web.config中的设置,将覆盖IE浏览其中的设置,而且为所有的网页所共有。   

  4. 单独页面的语言选择
  在单独页面的语言选择,使用指令 <%@ Page  Culture="zh-CN"   UICulture="zh-CN" %>
  它将覆盖IE浏览器,以及文件web.config中的设置,为自己所用。
  例如: UICulture="zh-CN" ,不管文件web.config和IE的语言如何设置,都将显示中文的信息。

  而当指令 <%@ Page 中的语言设置为 UICulture="auto"时,将先接受文件web.config,再接受IE的语言设置顺序。

  5.Culture和UICulture区别
  Culture主要针对有关日期/货币等语言内部的,  而 UICulture针对用户界面的安钮之类的控件显示。

四 使用显式本地化

  在上面部分,您已通过使用 ASP.NET 隐式本地化让控件显示本地化的文本。您生成了一个包含属性 (Property) 值的资源文件,并且在该过程中为每个控件添加了一个属性 (Attribute),该属性 (Attribute) 指示控件从资源文件填充其属性 (Property) 值(如果有)。隐式本地化自动工作,也就是说,您不需要逐个指定每个属性从资源文件读取信息的方式。
  但是,有时可能需要对属性的设置方式进行更直接的控制。要达到这个目的,不应使用隐式本地化,而应使用显式本地化。通过显式本地化,可以使用指向资源文件的表达式设置属性值。运行页时,会对表达式进行计算,从指定的资源文件中读取该值,然后使用该值设置属性。
  如果除了控件和标签外还需要本地化大量的文本或自定义消息,则显式本地化十分有用。例如,您可以为电子商务站点开发一系列本地化的欢迎消息和感谢消息,然后使用显式声明性表达式将此文本放置在页上。此外,显式本地化允许维护一个本地化的资源文件集,而不是为每个页单独维护一个文件集。

  1. 建立任意资源名称 
  在本部分中,您将手动创建资源文件,然后使用 ASP.NET 声明性表达式语法引用这些文件。您将为一个简单的感谢消息创建一个资源文件。与使用设计器时不同,此时不需要为每个 ASP.NET 页创建一个单独的资源文件。
  为了好记,将资源文件的基名称,写为我的名称 WuchaoText ,将来是区别资源的类名。对于要本地化的每种语言,都将另外创建一个文件,并在文件名中包含相应的语言代码(有时可能还有区域性代码)。例如,对于中国中文,将创建名为 WuchaoText.zh-CN.resx 的文件。对于美国英语,将创建名为 WuchaoText.en-US.resx 的文件。这两个文件都将放在 Web 应用程序的 Resources 目录下。与前面介绍的隐式示例不同,您无需为每个 .aspx 页维护一个资源文件;相反,您可为支持的每种语言或区域性维护一系列文件。

  2. 创建全局资源文件
  在解决方案资源管理器中,右击网站的根目录,单击“添加 ASP.NET 文件夹”,然后单击“App_GlobalResources”。

  右击“App_GlobalResources”文件夹,然后单击“添加新项”。
  在“Visual Studio 已安装的模板”之下单击“资源文件”。
  在“名称”框中,键入 WuchaoText.resx,然后单击“添加”。
  WuchaoText.resx 文件将充当回退区域性的资源。
  再创建两个 .resx 文件,并将其命名为 WuchaoText.zh-CN.resx 和  WuchaoText.en-US.resx 。
  双击打开以上两个 .resx 文件。
  在“名称”列的第一行中都键入 g_AddStr。
  而在“值”列的第一行中,分别键入  全球化-必须手工添加-中文  和 global-must-hand-add-english。

  结果如下:

文件WuchaoText.zh-CN.resx的内容
名称
g_AddStr 全球化-必须手工添加-中文
文件WuchaoText.en-US.resx的内容
名称
g_AddStr global-must-hand-add-english

 

  保存两个文件并将其关闭。

  注意
  若要插入带锐音符(如 í)的字母,请在打开数字锁定的同时使用数字键盘键入 Alt+0237。
  现在已经为名为 g_AddStr 的资源创建了两个值。ASP.NET 将根据浏览器设置的语言从相应的资源文件中读取值。
  现在已创建资源文件,您可以返回到页,并添加引用该资源的控件。

  3. 向页添加 Label 控件

  切换到页面 Default.aspx,然后切换到“设计”视图。
  从“工具箱”中将一个 Label 控件拖动到页上。
  右击该 Label 控件,单击“属性”,然后找到 数据 (Expressions),单击其右侧框中的省略号 (…) 按钮。将出现“表达式”对话框。
  在“可绑定属性”列表中单击“Text”。
  在“表达式类型”列表中选择资源“Resources”。
  在“表达式属性”下,将类名键“ClassKey”设置为 WuchaoText ,并将资源键“ResourceKey”选择设置为 g_AddStr。
  单击“确定”。
  切换到“源”视图。
  标签的文本属性现在具有一个显式表达式,说明将从其中检索要选择的资源和键的基文件。

  

<asp:Label ID="Label1" Runat="server" Text="<%$ Resources:WuchaoText, g_AddStr %>">

 

  注意
  WuchaoText 属性不具有语言指示符、区域性指示符或 .resx 扩展名,因为它不是实际的文件名。实际上,WuchaoText 表示基资源类。ASP.NET 将根据浏览器发送的区域性,从文件名中包含相应的语言或区域性代码的文件中选择资源,文件名可能类似 WuchaoText.zh-CN.resx 和  WuchaoText.en-US.resx,或者,如果未找到匹配的语言,则为 WuchaoText.resx。
  对页进行测试,按 Ctrl+F5 运行该页。测试期间,会多次更改浏览器的语言。在资源编辑器中提供的不同版本的文本将显示为 Label 控件的文本。

五  网页HTML源代码

  1. 默认创建网页的第一行
  

<%@ Page Language="C#"   CodeFile="Default.aspx.cs" Inherits="_Default" %>

 

  2. 创建本地资源后网页的第一行
  

<%@ Page Language="C#"   CodeFile="Default.aspx.cs" Inherits="_Default" Culture="auto" meta:resourcekey="PageResource1" UICulture="auto" %>

 

  3.最终的网页源代码为:网页强制按简体中文显示

<%@ Page Language="C#"   CodeFile="Default.aspx.cs" Inherits="_Default" Culture="zh-CN" meta:resourcekey="PageResource1" UICulture="zh-CN" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>无标题页</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:Button ID="Button1" runat="server" meta:resourcekey="Button1Resource1" />
        <asp:Label ID="Label1" runat="server" Text="<%$ Resources:WuchaoText, g_AddStr %>"></asp:Label></div>
    </form>
</body>
</html>

 

你可能感兴趣的:(ASP.NET全球化与本地化 c#多国语言的支持 (项目支持多国语言的开发))