【kein】ASP.Net本地化/国际化解决方案原理和代码示例

解决方案原理:
ASP.NET本地化支持
通过 CultureInfo 类可以访问区域设置的属性。
此外,ASP.NET 基于每个线程和请求跟踪默认区域性的两个属性:用于区域设置相关函数默认值的 CurrentCulture,
和用于区域设置特定的资源数据查找的 CurrentUICulture。

解决方案主要包含几个部分组成:
1:客户设置语言的控件,一般会包含在每个页面,使得用户可以随时切换区域
控件ascx代码

< asp:DropDownList  ID ="DropDownList1"  runat ="server"  AutoPostBack ="true"  OnSelectedIndexChanged ="DropDownList1_SelectedIndexChanged" >
< asp:ListItem  Text ="English Version"  Value ="en-US" > asp:ListItem >
< asp:ListItem  Text ="中 文 版"  Value ="zh-CN" > asp:ListItem >
asp:DropDownList >

控件CS事件代码

 1  protected   void  Page_Load( object  sender, EventArgs e)
 2         {
 3            if  ( ! Page.IsPostBack){
 4               if  (Request.Cookies[Settings.Default.Cookies_Language]  ==   null   ||  Request.Cookies[Settings.Default.Cookies_Language].Value  ==   "" )
 5              {
 6                      foreach  (ListItem li  in  DropDownList1.Items)
 7                     {
 8                        if  (li.Value  ==   "" )
 9                          li.Selected  =   true ;
10                     }
11              }
12               else
13              {
14                      foreach  (ListItem li  in  DropDownList1.Items)
15                     {
16                        if  (li.Value.ToLower()  ==  Request.Cookies[Settings.Default.Cookies_Language].Value.ToLower())
17                          li.Selected  =   true ;
18                     }
19              }
20           }
21         }
22 
23          protected   void  DropDownList1_SelectedIndexChanged( object  sender, EventArgs e)
24         {
25           Response.Redirect( " ~/ChangeLanguage.aspx?Language= "   +  DropDownList1.SelectedValue  +   " &url= "   +  Server.UrlEncode(Request.Url.PathAndQuery) , true );
26         }ChangeLanguage中间页面代码:
27  public   partial   class  ChangeLanguage : System.Web.UI.Page
28  {
29          protected   void  Page_Load( object  sender, EventArgs e)
30         {
31           Response.Cookies[ " Language " ].Value  =  Request[ " Language " ];
32           Response.Cookies[ " Language " ].Expires  =  DateTime.Now.AddDays( 1000 );
33           
34           Response.Redirect(Server.UrlDecode(Request[ " url " ]));
35         }
36  }
37 


2:在每页加载时会判断当前用户选择的区域,一般在页面的基类中实现。
当用户初次进入网站识别客户端浏览器,
当用户曾经选择了区域,加载选择区域

 1  /**/ ///  
 2          ///  本地化
 3          ///  
 4          protected   override   void  InitializeCulture()
 5         {
 6            if  (Request.Cookies[Settings.Default.Cookies_Language]  !=   null   &&  Request.Cookies[Settings.Default.Cookies_Language].Value  !=   null   &&  Request.Cookies[Settings.Default.Cookies_Language].Value  !=   "" )
 7           {
 8              setCulture();
 9           }
10            else
11           { // 设置Cookie
12              Response.Cookies[Settings.Default.Cookies_Language].Value  =
13                     (Request.Headers[ " accept-language " ].Split( " , " .ToCharArray())[ 0 ]);
14              Response.Cookies[Settings.Default.Cookies_Language].Expires  =  DateTime.Now.AddDays( 1000 );
15              setCulture();
16           }
17            base .InitializeCulture();
18         }
19 
20 
21          private   void  setCulture()
22         {
23 
24            try
25           {
26              String selectedLanguage  =  Request.Cookies[Settings.Default.Cookies_Language].Value;
27              UICulture  =  selectedLanguage;
28              Culture  =  selectedLanguage;
29 
30              System.Threading.Thread.CurrentThread.CurrentCulture  =
31                     System.Globalization.CultureInfo.CreateSpecificCulture(selectedLanguage);
32              System.Threading.Thread.CurrentThread.CurrentUICulture  =   new
33                     System.Globalization.CultureInfo(selectedLanguage);
34           }
35            catch   // ( Exception ex )
36           {
37              Response.Cookies.Clear(); //  [Settings.Default.Cookies_Language].d
38               // throw;
39           }
40         }
41 

3:当然是为每个页面准备资源文件。
这个是个体力活,
ASPNET.ascx.en.resx 表示英文的
ASPNET.ascx.zh.resx 这个表示中文的,当然还可以分为更加细的区域,比如zh-CN/zh-HK/zh-TW

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/12639172/viewspace-407068/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/12639172/viewspace-407068/

此文档是从实际项目中总结出来的,互联网上只有“在单一页面进行语言切换”的教程, 没有“一键切换”的解决方案,更没有同时把5种读取资源文件总结在一起的demo。 本文档重点 1.多种读取方式 2.一键全站切换 步骤 一:新建一个asp.net 空 web应用程序“Internationalization”(图1) 二:右键“Internationalization”--->添加--->添加ASP.NET文件夹--->App_GlobalResources 三:右键“App_GlobalResources”--->添加--->新建项--->资源文件--->GlobalLanguage.resx 四:在GlobalLanguage.resx里添加键值对.(图二) 五:连续复制“GlobalLanguage.resx”两次到“App_GlobalResources”下面,并修改名称为 GlobalLanguage.en-US.resx GlobalLanguage.zh-CN.resx 说明:(为什么会有三个文件呢?系统必须有一个默认文件“GlobalLanguage.resx”,两种语言两个文件.) 六:修改英文和中文资源文件里的键值对。 说明(网上大多做法都是把语言设置为浏览器自动识别语言, 这种方式在实际项目中一般不用,所以直接讲解用程序来控制) 七:添加language1.aspx (图3,4) 八:添加language2.aspx (图5),在设计模式下“工具”--->“生成本地资源”,会自动添加一个“App_LocalResources” 和第五步一样,添加再添加两个资源文件。 language2.aspx.zh-CN.resx language2.aspx.en-US.resx 说明(一键全站切换的实现方法有多种,这里只讲最有效的,编写一个基类,在里面设置一个全局变量lan,所有 页面都继承这个基类,再通过程序修改变量lan,用Session最简单,但是用户过多时对内存的消耗很大, 还可以用数据库和配置文件,但是最好用Cookie,所以下面以Cookie为例子) 九:新建一个母板页“language.Master”(图6,7) 十:添加language3.aspx (图8,9),必须继承Base类 十一:添加language4.aspx (图10),必须继承Base类
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值