本地化解决方案(一)
来源:互联网 发布:软件测试培训机构 编辑:程序博客网 时间:2024/03/29 02:00
解决方案原理:
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事件代码
protected void Page_Load(object sender, EventArgs e)
...{
if (!Page.IsPostBack)...{
if (Request.Cookies[Settings.Default.Cookies_Language] == null || Request.Cookies[Settings.Default.Cookies_Language].Value == "")
...{
foreach (ListItem li in DropDownList1.Items)
...{
if (li.Value == "")
li.Selected = true;
}
}
else
...{
foreach (ListItem li in DropDownList1.Items)
...{
if (li.Value.ToLower() == Request.Cookies[Settings.Default.Cookies_Language].Value.ToLower())
li.Selected = true;
}
}
}
}
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
...{
Response.Redirect("~/ChangeLanguage.aspx?Language=" + DropDownList1.SelectedValue + "&url=" + Server.UrlEncode(Request.Url.PathAndQuery) ,true);
}
...{
if (!Page.IsPostBack)...{
if (Request.Cookies[Settings.Default.Cookies_Language] == null || Request.Cookies[Settings.Default.Cookies_Language].Value == "")
...{
foreach (ListItem li in DropDownList1.Items)
...{
if (li.Value == "")
li.Selected = true;
}
}
else
...{
foreach (ListItem li in DropDownList1.Items)
...{
if (li.Value.ToLower() == Request.Cookies[Settings.Default.Cookies_Language].Value.ToLower())
li.Selected = true;
}
}
}
}
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
...{
Response.Redirect("~/ChangeLanguage.aspx?Language=" + DropDownList1.SelectedValue + "&url=" + Server.UrlEncode(Request.Url.PathAndQuery) ,true);
}
ChangeLanguage中间页面代码:
public partial class ChangeLanguage : System.Web.UI.Page
...{
protected void Page_Load(object sender, EventArgs e)
...{
Response.Cookies["Language"].Value = Request["Language"];
Response.Cookies["Language"].Expires = DateTime.Now.AddDays(1000);
Response.Redirect(Server.UrlDecode(Request["url"]));
}
}
...{
protected void Page_Load(object sender, EventArgs e)
...{
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
...{
String selectedLanguage = 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 //( Exception ex )
...{
Response.Cookies.Clear();// [Settings.Default.Cookies_Language].d
//throw;
}
}
/// 本地化
/// </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
...{
String selectedLanguage = 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 //( Exception ex )
...{
Response.Cookies.Clear();// [Settings.Default.Cookies_Language].d
//throw;
}
}
这个是个体力活,
ASPNET.ascx.en.resx 表示英文的
ASPNET.ascx.zh.resx 这个表示中文的,当然还可以分为更加细的区域,比如zh-CN/zh-HK/zh-TW
4:当然要记得,把你的页面都要继承你的基类
public partial class Index : PageBase
- 本地化解决方案(一)
- 本地化解决方案(二)
- 资源与本地化(一)
- Web 前端本地化(一)
- OpenWrt/Wifidog本地化解决方案
- 说说cvs的本地化管理(一)
- Java中文问题及最优解决方案(本地化)
- IOS应用程序多语言本地化解决方案(转)
- IOS应用程序多语言本地化解决方案(转)
- Android应用资源---本地化(Localization)(一)
- ASP.NET 2.0 本地化技术之研究(一)
- php小偷程序新概念之资源本地化(一)
- 资源与本地化(Resource and Localization)一
- android本地化语言与theme的实现(一)
- C#本地化国际化解决方案实现简介
- IOS应用程序多语言本地化解决方案
- IOS应用程序多语言本地化解决方案
- IOS应用程序多语言本地化解决方案
- Delphi关于线程的消息处理
- 临渊羡鱼,不如退而结网
- 第二十一届全国计算机信息管理学术研讨会
- java关于23种设计模式的有趣见解
- ajax xmlhttp对象详解
- 本地化解决方案(一)
- arp一例
- 在程序运行时自动注册ActiveX控件
- 紫陽花(あじさい)
- 数据库的事务和锁
- Tomcat性能调整(1)
- 与ASP进行接口
- 一段写出事实真相的感言
- vs2005 sp1 安装注意事项 (包括制作整合SP1安装光盘)