《使用CultureInfo实现多语言本地化理论课》由会员分享,可在线阅读,更多相关《使用CultureInfo实现多语言本地化理论课(41页珍藏版)》请在金锄头文库上搜索。
1、http:/使用使用CultureInfoCultureInfo实现多语言本地化实现多语言本地化ASP.NET企业级应用编程第14章北京奥运会官网-汉语北京奥运会官网-英语北京奥运会官网-法语v区域文化 在页面元素设置区域文化 在后台代码设置区域文化v资源文化 根据站点文化获取本地资源 根据站点文化获取全局资源本章目标(一)区域文化设置当前文化v在Page指令中设置文化 v以编程方式设置文化 在Page指令中设置CulturevCulture属性常用的文化名称zh-CN=Chinese(China) en-US=English(United States) en-GB=English(Unit
2、ed Kingdom) protected void Page_Load(object sender, EventArgs e) this.lblToday.Text = DateTime.Now.ToString(“D“);this.lblPrice.Text = (11.5).ToString(“c“); 在Page指令中自动检测文化如果需要使用检测到的浏览器首部自动设置Culture,就可以通 过设置页面指令的Culture来实现。 下面将Culture设置为“auto:zh-cn“,表示若不能从浏览器检测到 默认的语言参数设置时,冒号后面的文化名称用来指定默认文化 。 文化影响ASP.
3、NET控件v Page指令中Culture属性值会自动影响Calendar控件的呈现行为 。 在配置文件中设置文化在web.config中添加如下配置,那么若不能从浏览浏览 器 检测检测 到默认认的语语言参数设设置时时,整个站点的文化就 被设设置称en-US,如果用户设户设 置了语语言,则则采用用户户 选择选择 的语语言文化:以编程方式设置文化vPage.Culture v通过该属性设置当前页面的文化 vRequest.UserLanguages v获取用户浏览器中设置的语言首选项集合 vSystem.Globalization.CultureInfo.GetCultu res v获取由指定C
4、ultureTypes参数筛选的区域列 表 v 检测用户的习惯语言列表v Request.UserLanguages可以获取请求的用户的习惯语言列表 v protected void Page_Load(object sender, EventArgs e) if (!IsPostBack)string list = Request.UserLanguages;foreach (string s in list)string name = s.Split(;)0;bltAuto.Items.Add(name);protected void bltAuto_Click(object sender
5、, BulletedListEventArgs e)Page.Culture= bltAuto.Itemse.Index.Value;this.lblToday.Text = DateTime.Now.ToString(“D“);this.lblPrice.Text = (11.5).ToString(“c“);获取特定文化的区域性列表v CultureInfo类的GetCultures方法获取由指定 CultureTypes 筛选的区域性 列表。 v protected void Page_Load(object sender, EventArgs e) if (!IsPostBack) C
6、ultureInfo list=CultureInfo.GetCultures(CultureTypes.SpecificCultures);RadioButtonList1.DataSource = list;RadioButtonList1.DataTextField = “DisplayName“;RadioButtonList1.DataValueField = “Name“;RadioButtonList1.DataBind();RadioButtonList1.AutoPostBack = true;RadioButtonList1.RepeatDirection = Repeat
7、Direction.Horizontal;RadioButtonList1.RepeatColumns = 4; protected void RBL_SelectedIndexChanged(object sender, EventArgs e) Page.Culture = RadioButtonList1.SelectedItem.Value;this.lblToday.Text = DateTime.Now.ToString(“D“);this.lblPrice.Text = (11.5).ToString(“c“); 获取特定文化的区域性列表不同的文化中的字符串排序v在不同的文化中,
8、字符串的排序结果也会受到影响string names = “苹果“, “牛蛙“, “牛肉“ ; 上面的数组在中文文化和日文文化的排序结果就不相同protected void Button1_Click(object sender, EventArgs e)SortStringByCulture(“zh-cn“);protected void Button2_Click(object sender, EventArgs e)SortStringByCulture(“ja-jp“);void SortStringByCulture(string c)string names = “苹果“, “牛蛙
9、“, “牛肉“ ;CultureInfo ci = new CultureInfo(c);Page.Culture = ci.Name;lbCultrue.Text = ci.Name;Array.Sort(names);BulletedList1.DataSource = names;BulletedList1.DataBind();(二)资源文化创建本地资源v显式本地化表达式 v隐式本地化表达式 v将本地资源应用于页面属性 v以编程方式获取本地资源 v简化大块文本的本地化 创建本地资源v显式本地化表达式 v资源文件必须保存在App_LocalResources文件夹 中。 v资源文件的添加
10、 资源文件的命名规则: pageName.cultureName.resx test.aspx.resx 默认的Test.aspx资源文件,若没有其他资 源文件符合用户的语言设置,则用此资源文 件来应用 test.aspx.zh-CN.resx 特定文化,若符合用户特定文化语言设置, 就应用此资源文件显式本地化表达式 v在页面中使用本地资源 v1、指令中添加UICulture属性 并设其值为auto v2、本地化资源表达式 v v 隐式本地化表达式v隐式本地化表达式 v显式资源表达式必须对控件的每一个属性在页面进行设 置,隐式本地化表达式只需简单地添加一个 meta:resourceKey属性
11、到任意需要本地化的控件中,从而 可以更简单地本地化一个已存在的网站。 v配置控件属性 v 隐式本地化表达式v设置本地资源文件 v模式:Key.Property vKey:可以任意命名,一般采用控件名称 vProperty:必须与要本地化的控件的属性相匹配 Demo.aspx.resxDemo.aspx.en-us.resx将本地资源应用于页面属 性 v显式资源文件PageTitleExplicit.aspx.resx v “ runat=“server“ /使用资源表达式设置诸如页面标题这样的的页面属性 将本地资源应用于页面属 性v隐式资源文件PageTitleImplicit.aspx.re
12、sx以编程方式获取本地资源v调用Page对象的GetLocalResourceObject()方法 可以获取本地资源文件的内容 v protected void btLogin_Click(object sender, EventArgs e)string rs = this.GetLocalResourceObject(“welcome“).ToString();lbMsg.Text = string.Format(rs, tbName.Text); 简化大块文本的本地化v当您想在网页上的特定区域显示本地化文本时 ,可以使用 Localize 控件在网页上保留显示 本地化文本的位置。 vLo
13、calize 控件从 Literal 控件继承,与该控 件完全相同。设计时使用 Localize 控件将可 以将本地化的静态文本与其它静态文本区分开 来。 简化大块文本的本地化vLocalize 控件的 Mode 属性 vTransform:添加到控件中的任何标记都将进行转换 ,以适合发出请求的浏览器的协议。如果向使用 HTML 以 外的其他协议的移动设备呈现内容,此设置非常有用。 vPassThrough:添加到控件中的任何标记都将按原样 呈现在浏览器中 vEncode:添加到控件中的任何标记都将使用 HtmlEncode 方法进行编码,该方法将把 HTML 编码转换 为其文本表示形式。 简
14、化大块文本的本地化v默认资源 LocalizeResource.aspx.resx: 英文资源LocalizeResource.aspx.en-us.resx 创建全局资源 v以属性方式获取全局资源 v以编程方式获取全局资源 v使用强类型获取全局资源 以属性方式获取全局资源v获取表达式: 中文资源文件Site.resx: 英文资源文件Site.en-us.resx: “ % “ /以属性方式获取全局资源以编程方式获取全局资源v指令:自动获得语 言 vCultureInfo.CurrentCulture.Name属性:获得IE语 言 vGetGlobalResourceObject()方法 :获
15、得全局资源以编程方式获取全局资源string key=CultureInfo.CurrentCulture.Name.ToLower().Replace(“-“, “_“); imgCountry.ImageUrl = “CodeFileGlobalResource.ashx?key=“ + key;string className = “ Country “;string key = context.Request.QueryString“key“.ToString();Bitmap bmp = (Bitmap) HttpContext.GetGlobalResourceObject(cla
16、ssName, key);MemoryStream ms = new MemoryStream();bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);Response.BinaryWrite(ms.ToArray();CodeFileGlobalResource.aspxCreateImageByGlobalResource.ashx创建全局资源v使用强类型获取全局资源 vASP.NET Framewormk自动把本地资源编译成 程序集,而全局资源就编译成一个类,这样全 局资源就可以用强类型表达式在代码中处理全 局资源,当创建一个资源时,一个新类会自动 添加到Resources命名空间。该类以属性的形式 暴露了所有资源文件中的项目 使用强类型获取全局资源 全局资源文件App_GlobalResourcesCo