ASP.NET全球化与本地化 c#多语言的支持
ASP.NET全球化与本地化 c#多语言的支持
http://blog.sina.com.cn/s/blog_45eaa01a0100robc.htmlASP.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.Textlocal-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_AddStrglobal-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>
http://www.csharpwin.com/dotnetspace/483.shtml ASP.NET 2.0 本地化功能-本地化 Web 应用程序3 http://www.pin5i.com/showtopic-7158.html ASP.NET 2.0 本地化功能:本地化 Web 应用程序的新方法 http://hi.baidu.com/heiru/blog/item/e885ea242381380c4c088db8.html Silverlight本地化