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

本文介绍了一种ASP.NET多语言支持的实现方法,通过使用CultureInfo类来管理不同的文化设置,并利用Cookie保存用户的语言偏好。该方案包括语言选择控件、页面加载时的语言判断逻辑及资源文件的准备。

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

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

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

控件CS事件代码
protected void Page_Load( object sender,EventArgse)
{
if(!Page.IsPostBack){
if(Request.Cookies[Settings.Default.Cookies_Language]==null||Request.Cookies[Settings.Default.Cookies_Language].Value=="")
{
foreach(ListItemliinDropDownList1.Items)
{
if(li.Value=="")
li.Selected
=true;
}

}

else
{
foreach(ListItemliinDropDownList1.Items)
{
if(li.Value.ToLower()==Request.Cookies[Settings.Default.Cookies_Language].Value.ToLower())
li.Selected
=true;
}

}

}

}


protected void DropDownList1_SelectedIndexChanged( object sender,EventArgse)
{
Response.Redirect(
"~/ChangeLanguage.aspx?Language="+DropDownList1.SelectedValue+"&url="+Server.UrlEncode(Request.Url.PathAndQuery),true);
}
ChangeLanguage中间页面代码:
public partial class ChangeLanguage:System.Web.UI.Page
{
protectedvoidPage_Load(objectsender,EventArgse)
{
Response.Cookies[
"Language"].Value=Request["Language"];
Response.Cookies[
"Language"].Expires=DateTime.Now.AddDays(1000);

Response.Redirect(Server.UrlDecode(Request[
"url"]));
}

}

2:在每页加载时会判断当前用户选择的区域,一般在页面的基类中实现比如类名:BasePage。
当用户初次进入网站识别客户端浏览器,
当用户曾经选择了区域,加载选择区域
/**/ ///<summary>
///本地化
///</summary>

protected override void InitializeCulture()
{
if(Request.Cookies[Settings.Default.Cookies_Language]!=null&&Request.Cookies[Settings.Default.Cookies_Language].Value!=null&&Request.Cookies[Settings.Default.Cookies_Language].Value!="")
{
setCulture();
}

else
{//设置Cookie
Response.Cookies[Settings.Default.Cookies_Language].Value=
(Request.Headers[
"accept-language"].Split(",".ToCharArray())[0]);
Response.Cookies[Settings.Default.Cookies_Language].Expires
=DateTime.Now.AddDays(1000);
setCulture();
}

base.InitializeCulture();
}



private void setCulture()
{

try
{
StringselectedLanguage
=Request.Cookies[Settings.Default.Cookies_Language].Value;
UICulture
=selectedLanguage;
Culture
=selectedLanguage;

System.Threading.Thread.CurrentThread.CurrentCulture
=
System.Globalization.CultureInfo.CreateSpecificCulture(selectedLanguage);
System.Threading.Thread.CurrentThread.CurrentUICulture
=new
System.Globalization.CultureInfo(selectedLanguage);
}

catch//(Exceptionex)
{
Response.Cookies.Clear();
//[Settings.Default.Cookies_Language].d
//throw;
}

}

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

4:当然要记得,把你的页面都要继承你的基类
public partial class Index : PageBase


<!-- Search Google -->
Google 输入您的搜索字词 提交搜索表单
<!-- google_ad_client = "pub-7330597899926046"; google_ad_format = "350x30_sdo"; google_link_target = 2; google_color_bg = "ffffff"; google_color_link = "000000"; google_encoding = "GB2312"; //-->
<!-- Search Google --> <!-- google_ad_client = "pub-7330597899926046"; google_ad_slot = "8791774696"; google_ad_width = 468; google_ad_height = 60; //-->
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值