ASP.NET 实现多国语言(i18N)

1664阅读 0评论2012-02-23 十七岁的回忆
分类:

1 添加语言资源文件
VS资源管理器右击项目-》添加-》添加ASP.NET文件夹-》App_GlobalResources , 右击App_GlobalResources文件夹-》添加-》新建项-》资源文件,文件名可自己选择,这里设为LocaleText.resx,打开该文件,我们为默认语言设置语言项,比如默认语言我们将设置为英语,在名称中填入"Register" ,在值中填入"Register" ,保存文件,并复制为LocaleText.zh-CN.resx ,在这个文件中将语言翻译为中文,将"Register"的值改为"注册",保存。

2 设置网页默认语言
在ASP.NET中可以通过设置网页的Culture和UICulture来设置网页的语言,语法为:
  1. <%@ Page Language="C#" Culture="auto" UICulture="auto" %>
我们在这里将它们设置为auto,网页将根据用户的浏览器的设置为用户设置区域语言,打开IE浏览器,点击工具-》Internet选项-》语言,我们添加英语en-us和中文zh-cn两种语言,并改变它们的顺序,会发现网页会根据浏览器设置的语言的优先级为用户选择网页的语言。

也可以通过设置Culture和UICulture的值设置网页的区域语言,如:
  1. <%@ Page Language="C#" Culture="en-US" UICulture="en-US" %>
将为用户选择英语,同样:
  1. <%@ Page Language="C#" Culture="zh-CN" UICulture="zh-CN" %>
将为用户选择中文。

3 动态选择网站语言
在开发多国语言的站点的时候,我们通常希望能够使用户自己选择喜好的语言,我们通常在网页的头部为用户提供一个语言选择器,我们可以通过下面的方法实现这一功能:
  1. Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(lang);
  2. Thread.CurrentThread.CurrentUICulture = new CultureInfo(lang);
需要导入以下两个库:
  1. using System.Threading;
  2. using System.Globalization;
lang为用户选择的语言,我们通常将用户选择的语言保存在Session和Cookie中,这样用户就不用在每个网页都要选择语言,这里我们通过URL?lang=en-US这样的URL方式获取用户选择的语言,并将它保存在Cookie当中,每当加载页面的时候,总是先检查URL中是否有lang查询串,如果没有再检查Cookie当中的是否有语言设置,代码如下:
  1. protected void InitializeCulture()
  2. {
  3.     HttpCookie cookie = new HttpCookie("lang");
  4.     
  5.     if (Request.QueryString["lang"] != null)
  6.     {
  7.         String lang = Request.QueryString["lang"];
  8.         cookie.Value = Request.QueryString["lang"];
  9.         
  10.         Response.Cookies.Add(cookie);
  11.         
  12.         Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(lang);
  13.         Thread.CurrentThread.CurrentUICulture = new CultureInfo(lang);
  14.     }
  15.     else if (Request.Cookies["lang"] != null )
  16.     {
  17.         cookie = Request.Cookies["lang"];
  18.         Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(cookie.Value);
  19.         Thread.CurrentThread.CurrentUICulture = new CultureInfo(cookie.Value);
  20.     }
  21.     else
  22.     {
  23.         Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-US");
  24.         Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-US");
  25.     }
  26.     
  27.     base.InitializeCulture();
  28. }
我们的网站肯定有很多页面,如果需要为每个页面添加InitializeCulture()函数将是很繁琐的事情,这个时候我们可以使用继承的方法,添加一个基本类BasePage,并添加InitializeCulture()函数,然后所有的页面继承BasePage页面就可以了,代码如下:
  1. using System.Threading;
  2. using System.Globalization;

  3. public class BasePage : System.Web.UI.Page
  4. {    
  5.     protected void InitializeCulture()
  6.     {
  7.         //....
  8.     }
  9. }

  10. public class MyPage : BasePage
  11. {    
  12.     protected void Page_Load(object sender, EventArgs e)
  13.     {
  14.         //....
  15.     }
  16. }
另一种方法是使用Global.asax文件,我们可以将以上InitializeCulture()函数的代码写在Global类的Application_BeginRequest()函数中。


上一篇:Android::开机自启动C程序
下一篇:献给初学者-DSP入门教程