论坛交流
首页办公自动化| 网页制作| 平面设计| 动画制作| 数据库开发| 程序设计| 全部视频教程
应用视频: Windows | Word2007 | Excel2007 | PowerPoint2007 | Dreamweaver 8 | Fireworks 8 | Flash 8 | Photoshop cs | CorelDraw 12
编程视频: C语言视频教程 | HTML | Div+Css布局 | Javascript | Access数据库 | Asp | Sql Server数据库Asp.net  | Flash AS
当前位置 > 文字教程 > Asp.net教程
Tag:静态页面,treeview,gridview,repeater,dataset,sqldatareader,ado.net,上传,三层,ajax,xml,留言本,新闻发布,商城,注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,触发器,socket,form认证,登录,视频教程

Asp.net中多语言的实现

文章类别:Asp.net | 发表日期:2009-7-27 11:06:24

Asp.net中多语言的实现 

 1.首先得先了解下面的知识:
  
  了解一个名词:表达式语法
  表达式语法格式:<%$ ... %>
  它是ASP.NET2.0新增了一种声明性表达式语法,可在分析页之前将值替换到页中.
  ASP.NET表达式是基于运行时计算的信息设置控件属性的一种声明性方式.
  ASP.NET表达式主要应用在:连接字符串,应用程序设置,资源文件等地方.   
  ASP.NET 表达式的基本语法如下:
  <%$ expressionPrefix: expressionValue %>   
  下面演示表达式语法在连接字符串和应用程序设置的应用:
  
  a.表达式语法在连接字符串的应用
  将存储在Web.config文件中的连接字符串的值设置为控件的连接字符串属性
  <ASP:SqlDataSource ID="SqlDataSource1" Runat="server"
   SelectCommand="SELECT * FROM Employees"
   ConnectionString="<%$ ConnectionStrings:NorthwindCon %>">
  </asp:SqlDataSource>   
  <configuration>
   <connectionStrings>
   <add name="NorthwindCon"
   connectionString="Data Source=yanfa0;Integrated Security=SSPI;Initial Ctalog=Northwind;"
   providerName="System.Data.SqlClient" />
   </connectionStrings>
  </configuration>   
  
  b.表达式语法在应用程序设置的应用
  使用表达式来引用在Web.config配置文件中定义的应用程序设置
  <asp:Label ID="Label1" runat="server" Text="<%$ AppSettings:Txt %>"></asp:Label>   
  <appSettings>
   <add key="Txt" value="Abc"/>
  </appSettings>
  
  其实表达式语法还有一个重要的应用,就是在资源文件中的使用,而资源文件正是我实现本地化的基础.
  
  区域性的格式设置
  区域性名称和标识符名称遵循RFC 1766标准,具体请查看msdn
  请看下图,抓取的部分区域性图片:

  区域性通常分为三个类型:固定区域性、非特定区域性和特定区域性。
  a.固定区域性不区分区域性。可以使用空字符串("")或者按区域性标识符0x007F来指定固定区域性,它与英语语言关联,但不与任何国家/地区关联。
  b.非特定区域性是与某种语言关联但不与国家/地区关联的区域性。
  c.特定区域性是与某种语言和某个国家/地区关联的区域性。
  例如:"fr"(法语)是非特定区域性,而"fr-FR"(法语(法国))是特定区域性
  特别提示:"zh-CHS"(简体中文)和"zh-CHT"(繁体中文)是非特定区域性。
  
  区域性是有层次结构的,即特定区域性的父级是非特定区域性,而非特定区域性的父级是InvariantCulture
  
  利用ASP.NET2.0可轻松地逐页更改区域性设置
  只需将UICulture和Culture(区域性)属性添加到.ASPx等类似页面内的Page指令即可
  <%@ Page Culture="Auto" UICulture="Auto" %>
  
  要想对站点中的所有页面都设置相同的区域性设置,只需将以下元素添加到位于站点的根处的web.config文件中即可,这样就不必分别为每个页面进行分配了
  <globalization uiCulture="auto" culture="auto" />
  
  还可以为ASP.NET指定一个默认区域性
  以下指定页面的用户界面区域性是自动,默认区域性是英语,页的区域性是自动,默认区域性是英语(美国)
  <globalization uiCulture="auto:en" culture="auto:en-US" />
  
  Culture:指示页的区域性设置
  UICulture:指定用于页的用户界面(UI)区域性设置
  
  
  
  B.设置语言首选项
  自动检测功能所选择的默认Culture和UICulture有时可能不是用户所需要的
  例如:一个美国籍业务员来到中国出差,在中国总部上网下业务单.这种情况下,Web应用程序应该为用户提供显式更改语言的功能,给他提供英文版的业务下单页
  
  using System.Threading;
  using System.Globalization;
  
  protected override void InitializeCulture ( )
  {
   //显式的指定区域为en,为美国籍业务员显示英文页
   //实际应用中可以根据用户选择来动态设置语言
   //还可以利用Profile来记住用户选择的语言,以便用户以后访问网站时自动进入相应语言页
   Thread.CurrentThread.CurrentUICulture = new CultureInfo ( "en" );
   Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture ( "en-US" );
  }
  
  注意:对Thread.CurrentThread.CurrentCulture和 Thread.CurrentThread.CurrentUICulture所做的更改需要在InitializeCulture()方法中进行,因为 对首选浏览器语言的自动检测是在页生存期的早期发生的
  
  特别提示:
  CultureInfo类的实例化一般有两个途径,如下所示:
  CultureInfo culture = CultureInfo. CreateSpecificCulture (name);
  CultureInfo culture = new CultureInfo(name);
  二者的区分:
  使用第一种方法,只能创建固定区域性或特定区域性的CultureInfo实例。
  使用第二种方法,则是建立一个name所指定的区域性的CultureInfo实例,它可以是固定的,非特定的或特定区域性的
  
  Thread类的CurrentCulture属性用来获取或配置当前线程的区域性,它必须被配置为特定区域性。
  假如Thread.CurrentThread.CurrentCulture = new CultureInfo ( "en" );就会报错!
  
   2.多语言的实现
  
  其实实现是比较简单的,只需要下面几个步骤
  1.创建全局资源表
  2.在session中存放表示当前的culture的变量,如“en-us”,"zh-cn"
  
  3.创建所有页面的基类PageBase,覆盖InitializeCulture函数
  
  4.页面上的文本值, 表达式语法赋值
  
  
  添加两个全局资源表
  Strings.resx和Strings.en-us.resx(注意-后面的字符要符合RFC 1766标准,没带后缀的话就是默认值)
  
  
  
  如下图:
  PageBase
  
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Globalization;
/// <summary>
/// Summary description for PageBase
/// </summary>
public class PageBase:System.Web.UI.Page
{
 public PageBase()
{
 //
// TODO: Add constructor logic here
//
 }
 protected override void InitializeCulture()
 {
 string currentCulture = (string)Session["Culture"];
 if (string.IsNullOrEmpty(currentCulture))
 {
 currentCulture = "zh-cn";
 Session["Culture"] = "zh-cn";
 }
 
System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(currentCulture);
System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.CreateSpecificCulture(currentCulture);
}
}
 
  基本页面:
  
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Globalization;
public partial class _Default :PageBase
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void btnChinese_Click(object sender, EventArgs e)
{
Session["Culture"] = "zh-cn";
/////可以尝试注释下面这句出现的效果
this.RegisterClientScriptBlock("reload", "<script>window.location=window.self.location;</script>");
}
protected void btnEnglish_Click(object sender, EventArgs e)
{
Session["Culture"] = "en-us";
/////可以尝试注释下面这句出现的效果
 this.RegisterClientScriptBlock("reload", "<script>window.location=window.self.location;</script>");
}
}
  简单的一个多语言的例子
  
  缺点:切换语言时需要load两次
  
  建议:可以利用ajax请求修改完session值后在执行window.location=window.self.location;
  
  如:
  
function PageRefresh(language)
{
//使用JQUERY做ajax的请求
try
{
var virthPath="http://localhost/MulitLanguage“;
$.ajax({
type: "POST",
url: virthPath+"/AjaxHandler.ashx",///AjaxHandler.ashx中改变session值
success: function(msg){
ChangeLanguage_Rslt(msg);
}
});
}
catch(e)
{
alert('Error');
}
}
function ChangeLanguage_Rslt(data)
{
if(data=="OK")
window.location=window.self.location;
}
else
{
alert(data);
}
  区域性通常分为三个类型:固定区域性、非特定区域性和特定区域性。
  a.固定区域性不区分区域性。可以使用空字符串("")或者按区域性标识符0x007F来指定固定区域性,它与英语语言关联,但不与任何国家/地区关联。
  b.非特定区域性是与某种语言关联但不与国家/地区关联的区域性。
  c.特定区域性是与某种语言和某个国家/地区关联的区域性。
  例如:"fr"(法语)是非特定区域性,而"fr-FR"(法语(法国))是特定区域性
  特别提示:"zh-CHS"(简体中文)和"zh-CHT"(繁体中文)是非特定区域性。
  
  区域性是有层次结构的,即特定区域性的父级是非特定区域性,而非特定区域性的父级是InvariantCulture
  
  利用ASP.NET2.0可轻松地逐页更改区域性设置
  只需将UICulture和Culture(区域性)属性添加到.ASPx等类似页面内的Page指令即可
  <%@ Page Culture="Auto" UICulture="Auto" %>
  
  要想对站点中的所有页面都设置相同的区域性设置,只需将以下元素添加到位于站点的根处的web.config文件中即可,这样就不必分别为每个页面进行分配了
  <globalization uiCulture="auto" culture="auto" />
  
  还可以为ASP.NET指定一个默认区域性
  以下指定页面的用户界面区域性是自动,默认区域性是英语,页的区域性是自动,默认区域性是英语(美国)
  <globalization uiCulture="auto:en" culture="auto:en-US" />
  
  Culture:指示页的区域性设置
  UICulture:指定用于页的用户界面(UI)区域性设置
  
  
  
  B.设置语言首选项
  自动检测功能所选择的默认Culture和UICulture有时可能不是用户所需要的
  例如:一个美国籍业务员来到中国出差,在中国总部上网下业务单.这种情况下,Web应用程序应该为用户提供显式更改语言的功能,给他提供英文版的业务下单页
  
  using System.Threading;
  using System.Globalization;
  
  protected override void InitializeCulture ( )
  {
   //显式的指定区域为en,为美国籍业务员显示英文页
   //实际应用中可以根据用户选择来动态设置语言
   //还可以利用Profile来记住用户选择的语言,以便用户以后访问网站时自动进入相应语言页
   Thread.CurrentThread.CurrentUICulture = new CultureInfo ( "en" );
   Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture ( "en-US" );
  }
  
  注意:对Thread.CurrentThread.CurrentCulture和 Thread.CurrentThread.CurrentUICulture所做的更改需要在InitializeCulture()方法中进行,因为 对首选浏览器语言的自动检测是在页生存期的早期发生的
  
  特别提示:
  CultureInfo类的实例化一般有两个途径,如下所示:
  CultureInfo culture = CultureInfo. CreateSpecificCulture (name);
  CultureInfo culture = new CultureInfo(name);
  二者的区分:
  使用第一种方法,只能创建固定区域性或特定区域性的CultureInfo实例。
  使用第二种方法,则是建立一个name所指定的区域性的CultureInfo实例,它可以是固定的,非特定的或特定区域性的
  
  Thread类的CurrentCulture属性用来获取或配置当前线程的区域性,它必须被配置为特定区域性。
  假如Thread.CurrentThread.CurrentCulture = new CultureInfo ( "en" );就会报错!
  
   2.多语言的实现
  
  其实实现是比较简单的,只需要下面几个步骤
  1.创建全局资源表
  2.在session中存放表示当前的culture的变量,如“en-us”,"zh-cn"
  
  3.创建所有页面的基类PageBase,覆盖InitializeCulture函数
  
  4.页面上的文本值, 表达式语法赋值
  
  
  添加两个全局资源表
  Strings.resx和Strings.en-us.resx(注意-后面的字符要符合RFC 1766标准,没带后缀的话就是默认值)
  
  
  
  如下图:
  PageBase
  
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Globalization;
/// <summary>
/// Summary description for PageBase
/// </summary>
public class PageBase:System.Web.UI.Page
{
 public PageBase()
{
 //
// TODO: Add constructor logic here
//
 }
 protected override void InitializeCulture()
 {
 string currentCulture = (string)Session["Culture"];
 if (string.IsNullOrEmpty(currentCulture))
 {
 currentCulture = "zh-cn";
 Session["Culture"] = "zh-cn";
 }
 
System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(currentCulture);
System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.CreateSpecificCulture(currentCulture);
}
}
 
  基本页面:
  
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Globalization;
public partial class _Default :PageBase
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void btnChinese_Click(object sender, EventArgs e)
{
Session["Culture"] = "zh-cn";
/////可以尝试注释下面这句出现的效果
this.RegisterClientScriptBlock("reload", "<script>window.location=window.self.location;</script>");
}
protected void btnEnglish_Click(object sender, EventArgs e)
{
Session["Culture"] = "en-us";
/////可以尝试注释下面这句出现的效果
 this.RegisterClientScriptBlock("reload", "<script>window.location=window.self.location;</script>");
}
}
  简单的一个多语言的例子
  
  缺点:切换语言时需要load两次
  
  建议:可以利用ajax请求修改完session值后在执行window.location=window.self.location;
  
  如:
  
function PageRefresh(language)
{
//使用JQUERY做ajax的请求
try
{
var virthPath="http://localhost/MulitLanguage“;
$.ajax({
type: "POST",
url: virthPath+"/AjaxHandler.ashx",///AjaxHandler.ashx中改变session值
success: function(msg){
ChangeLanguage_Rslt(msg);
}
});
}
catch(e)
{
alert('Error');
}
}
function ChangeLanguage_Rslt(data)
{
if(data=="OK")
window.location=window.self.location;
}
else
{
alert(data);
}
}

  区域性通常分为三个类型:固定区域性、非特定区域性和特定区域性。
  a.固定区域性不区分区域性。可以使用空字符串("")或者按区域性标识符0x007F来指定固定区域性,它与英语语言关联,但不与任何国家/地区关联。
  b.非特定区域性是与某种语言关联但不与国家/地区关联的区域性。
  c.特定区域性是与某种语言和某个国家/地区关联的区域性。
  例如:"fr"(法语)是非特定区域性,而"fr-FR"(法语(法国))是特定区域性
  特别提示:"zh-CHS"(简体中文)和"zh-CHT"(繁体中文)是非特定区域性。
  
  区域性是有层次结构的,即特定区域性的父级是非特定区域性,而非特定区域性的父级是InvariantCulture
  
  利用ASP.NET2.0可轻松地逐页更改区域性设置
  只需将UICulture和Culture(区域性)属性添加到.ASPx等类似页面内的Page指令即可
  <%@ Page Culture="Auto" UICulture="Auto" %>
  
  要想对站点中的所有页面都设置相同的区域性设置,只需将以下元素添加到位于站点的根处的web.config文件中即可,这样就不必分别为每个页面进行分配了
  <globalization uiCulture="auto" culture="auto" />
  
  还可以为ASP.NET指定一个默认区域性
  以下指定页面的用户界面区域性是自动,默认区域性是英语,页的区域性是自动,默认区域性是英语(美国)
  <globalization uiCulture="auto:en" culture="auto:en-US" />
  
  Culture:指示页的区域性设置
  UICulture:指定用于页的用户界面(UI)区域性设置
  
  
  
  B.设置语言首选项
  自动检测功能所选择的默认Culture和UICulture有时可能不是用户所需要的
  例如:一个美国籍业务员来到中国出差,在中国总部上网下业务单.这种情况下,Web应用程序应该为用户提供显式更改语言的功能,给他提供英文版的业务下单页
  
  using System.Threading;
  using System.Globalization;
  
  protected override void InitializeCulture ( )
  {
   //显式的指定区域为en,为美国籍业务员显示英文页
   //实际应用中可以根据用户选择来动态设置语言
   //还可以利用Profile来记住用户选择的语言,以便用户以后访问网站时自动进入相应语言页
   Thread.CurrentThread.CurrentUICulture = new CultureInfo ( "en" );
   Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture ( "en-US" );
  }
  
  注意:对Thread.CurrentThread.CurrentCulture和 Thread.CurrentThread.CurrentUICulture所做的更改需要在InitializeCulture()方法中进行,因为 对首选浏览器语言的自动检测是在页生存期的早期发生的
  
  特别提示:
  CultureInfo类的实例化一般有两个途径,如下所示:
  CultureInfo culture = CultureInfo. CreateSpecificCulture (name);
  CultureInfo culture = new CultureInfo(name);
  二者的区分:
  使用第一种方法,只能创建固定区域性或特定区域性的CultureInfo实例。
  使用第二种方法,则是建立一个name所指定的区域性的CultureInfo实例,它可以是固定的,非特定的或特定区域性的
  
  Thread类的CurrentCulture属性用来获取或配置当前线程的区域性,它必须被配置为特定区域性。
  假如Thread.CurrentThread.CurrentCulture = new CultureInfo ( "en" );就会报错!
  
   2.多语言的实现
  
  其实实现是比较简单的,只需要下面几个步骤
  1.创建全局资源表
  2.在session中存放表示当前的culture的变量,如“en-us”,"zh-cn"
  
  3.创建所有页面的基类PageBase,覆盖InitializeCulture函数
  
  4.页面上的文本值, 表达式语法赋值
  
  
  添加两个全局资源表
  Strings.resx和Strings.en-us.resx(注意-后面的字符要符合RFC 1766标准,没带后缀的话就是默认值)
  
  
  
  如下图:
  PageBase
  
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Globalization;
/// <summary>
/// Summary description for PageBase
/// </summary>
public class PageBase:System.Web.UI.Page
{
 public PageBase()
{
 //
// TODO: Add constructor logic here
//
 }
 protected override void InitializeCulture()
 {
 string currentCulture = (string)Session["Culture"];
 if (string.IsNullOrEmpty(currentCulture))
 {
 currentCulture = "zh-cn";
 Session["Culture"] = "zh-cn";
 }
 
System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(currentCulture);
System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.CreateSpecificCulture(currentCulture);
}
}
 
  基本页面:
  
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Globalization;
public partial class _Default :PageBase
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void btnChinese_Click(object sender, EventArgs e)
{
Session["Culture"] = "zh-cn";
/////可以尝试注释下面这句出现的效果
this.RegisterClientScriptBlock("reload", "<script>window.location=window.self.location;</script>");
}
protected void btnEnglish_Click(object sender, EventArgs e)
{
Session["Culture"] = "en-us";
/////可以尝试注释下面这句出现的效果
 this.RegisterClientScriptBlock("reload", "<script>window.location=window.self.location;</script>");
}
}
  简单的一个多语言的例子
  
  缺点:切换语言时需要load两次
  
  建议:可以利用ajax请求修改完session值后在执行window.location=window.self.location;
  
  如:
  
function PageRefresh(language)
{
//使用JQUERY做ajax的请求
try
{
var virthPath="http://localhost/MulitLanguage“;
$.ajax({
type: "POST",
url: virthPath+"/AjaxHandler.ashx",///AjaxHandler.ashx中改变session值
success: function(msg){
ChangeLanguage_Rslt(msg);
}
});
}
catch(e)
{
alert('Error');
}
}
function ChangeLanguage_Rslt(data)
{
if(data=="OK")
window.location=window.self.location;
}
else
{
alert(data);
}
}

 

  区域性通常分为三个类型:固定区域性、非特定区域性和特定区域性。
  a.固定区域性不区分区域性。可以使用空字符串("")或者按区域性标识符0x007F来指定固定区域性,它与英语语言关联,但不与任何国家/地区关联。
  b.非特定区域性是与某种语言关联但不与国家/地区关联的区域性。
  c.特定区域性是与某种语言和某个国家/地区关联的区域性。
  例如:"fr"(法语)是非特定区域性,而"fr-FR"(法语(法国))是特定区域性
  特别提示:"zh-CHS"(简体中文)和"zh-CHT"(繁体中文)是非特定区域性。
  
  区域性是有层次结构的,即特定区域性的父级是非特定区域性,而非特定区域性的父级是InvariantCulture
  
  利用ASP.NET2.0可轻松地逐页更改区域性设置
  只需将UICulture和Culture(区域性)属性添加到.ASPx等类似页面内的Page指令即可
  <%@ Page Culture="Auto" UICulture="Auto" %>
  
  要想对站点中的所有页面都设置相同的区域性设置,只需将以下元素添加到位于站点的根处的web.config文件中即可,这样就不必分别为每个页面进行分配了
  <globalization uiCulture="auto" culture="auto" />
  
  还可以为ASP.NET指定一个默认区域性
  以下指定页面的用户界面区域性是自动,默认区域性是英语,页的区域性是自动,默认区域性是英语(美国)
  <globalization uiCulture="auto:en" culture="auto:en-US" />
  
  Culture:指示页的区域性设置
  UICulture:指定用于页的用户界面(UI)区域性设置
  
  
  
  B.设置语言首选项
  自动检测功能所选择的默认Culture和UICulture有时可能不是用户所需要的
  例如:一个美国籍业务员来到中国出差,在中国总部上网下业务单.这种情况下,Web应用程序应该为用户提供显式更改语言的功能,给他提供英文版的业务下单页
  
  using System.Threading;
  using System.Globalization;
  
  protected override void InitializeCulture ( )
  {
   //显式的指定区域为en,为美国籍业务员显示英文页
   //实际应用中可以根据用户选择来动态设置语言
   //还可以利用Profile来记住用户选择的语言,以便用户以后访问网站时自动进入相应语言页
   Thread.CurrentThread.CurrentUICulture = new CultureInfo ( "en" );
   Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture ( "en-US" );
  }
  
  注意:对Thread.CurrentThread.CurrentCulture和 Thread.CurrentThread.CurrentUICulture所做的更改需要在InitializeCulture()方法中进行,因为 对首选浏览器语言的自动检测是在页生存期的早期发生的
  
  特别提示:
  CultureInfo类的实例化一般有两个途径,如下所示:
  CultureInfo culture = CultureInfo. CreateSpecificCulture (name);
  CultureInfo culture = new CultureInfo(name);
  二者的区分:
  使用第一种方法,只能创建固定区域性或特定区域性的CultureInfo实例。
  使用第二种方法,则是建立一个name所指定的区域性的CultureInfo实例,它可以是固定的,非特定的或特定区域性的
  
  Thread类的CurrentCulture属性用来获取或配置当前线程的区域性,它必须被配置为特定区域性。
  假如Thread.CurrentThread.CurrentCulture = new CultureInfo ( "en" );就会报错!
  
   2.多语言的实现
  
  其实实现是比较简单的,只需要下面几个步骤
  1.创建全局资源表
  2.在session中存放表示当前的culture的变量,如“en-us”,"zh-cn"
  
  3.创建所有页面的基类PageBase,覆盖InitializeCulture函数
  
  4.页面上的文本值, 表达式语法赋值
  
  
  添加两个全局资源表
  Strings.resx和Strings.en-us.resx(注意-后面的字符要符合RFC 1766标准,没带后缀的话就是默认值)
  
  
  
  如下图:
  PageBase
  
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Globalization;
/// <summary>
/// Summary description for PageBase
/// </summary>
public class PageBase:System.Web.UI.Page
{
 public PageBase()
{
 //
// TODO: Add constructor logic here
//
 }
 protected override void InitializeCulture()
 {
 string currentCulture = (string)Session["Culture"];
 if (string.IsNullOrEmpty(currentCulture))
 {
 currentCulture = "zh-cn";
 Session["Culture"] = "zh-cn";
 }
 
System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(currentCulture);
System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.CreateSpecificCulture(currentCulture);
}
}
 
  基本页面:
  
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Globalization;
public partial class _Default :PageBase
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void btnChinese_Click(object sender, EventArgs e)
{
Session["Culture"] = "zh-cn";
/////可以尝试注释下面这句出现的效果
this.RegisterClientScriptBlock("reload", "<script>window.location=window.self.location;</script>");
}
protected void btnEnglish_Click(object sender, EventArgs e)
{
Session["Culture"] = "en-us";
/////可以尝试注释下面这句出现的效果
 this.RegisterClientScriptBlock("reload", "<script>window.location=window.self.location;</script>");
}
}
  简单的一个多语言的例子
  
  缺点:切换语言时需要load两次
  
  建议:可以利用ajax请求修改完session值后在执行window.location=window.self.location;
  
  如:
  
function PageRefresh(language)
{
//使用JQUERY做ajax的请求
try
{
var virthPath="http://localhost/MulitLanguage“;
$.ajax({
type: "POST",
url: virthPath+"/AjaxHandler.ashx",///AjaxHandler.ashx中改变session值
success: function(msg){
ChangeLanguage_Rslt(msg);
}
});
}
catch(e)
{
alert('Error');
}
}
function ChangeLanguage_Rslt(data)
{
if(data=="OK")
window.location=window.self.location;
}
else
{
alert(data);
}
}

视频教程列表
文章教程搜索
 
Asp.net推荐教程
Asp.net热门教程
看全部视频教程
购买方式/价格
购买视频教程: 咨询客服
tel:15972130058