因为最近项目中用到中英又语,就是所说的本地化,在此大概做一说明.
母版页
前台:
<asp:LinkButton ID="LinkButton1" runat="server" οnclick="LinkButton1_Click">English</asp:LinkButton>
<asp:LinkButton ID="LinkButton2" runat="server" οnclick="LinkButton1_Click">中文</asp:LinkButton>
后台:
protected void LinkButton1_Click(object sender, EventArgs e)
{
LinkButton lbtn = (LinkButton)sender;
string s = lbtn.Text;
if (s == "中文")
{
SetCookie("zh-cn");
}
else
{
SetCookie("en-us");
}
}
protected void SetCookie(string value)
{
HttpCookie cookie = new HttpCookie("locationCulture");
cookie.Value = value;
cookie.Expires = DateTime.Now.AddYears(1);
Response.Cookies.Add(cookie);
string url = Request.Url.ToString();
Response.Redirect(Request .Url.PathAndQuery);
}
新建一个LocalizedPage.cs文件,代码如下:
using System.Threading;
using System.Globalization;
public class LocalizedPage:System .Web.UI.Page
{
string s;
protected override void InitializeCulture()
{
HttpCookie cookie = Request.Cookies["locationCulture"];
if (cookie == null)
{
s = Request.UserLanguages[0];
HttpCookie cookie1 = new HttpCookie("locationCulture", s);
cookie1.Expires = DateTime.Now.AddYears(1);
Response.Cookies.Add(cookie1);
}
else
{
s = cookie.Value;
}
if (!String.IsNullOrEmpty(s))
{
Thread.CurrentThread.CurrentUICulture = new CultureInfo(s);
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(s);
}
}
}
继承母版页的页面中,要继承该LocalizedPage.cs类
后台代码所示:
public partial class Web_SIS_DataList:LocalizedPage
{
protected void Page_Load(object sender, EventArgs e)
{
}
}
前台代码:
<asp:Label ID="Label1" runat="server" Text="Label"
meta:resourcekey="Label1Resource1"></asp:Label>
当然还需要建立资源文件.当然也可以建立后一个页面后,在设计模式下点击 工具--生成本地资源
这样就可以生成一个本地资源. 复制一份该资源文件,更改名称,如我生成的资源文件名称:DataList.aspx.resx
复制一份,更改名称为:DataList.aspx.en-us.resx
这样就可以实现网站的本地化.
当然我用的是cookie保存网站的语言状态, 你可以用session,profile等来达到同等效果.