ASP.net国际化--页面可以选择输出语言
国际化(internationalization)是让我们所写的程序,有多语言显示,有点象见什么人说什么话的味
道,呵呵!
下面是一个例子:
第一步:
新建一个Website,在这个工程中添加一个类,继承 System.Web.UI.Page,主要代码如下:
protected override void InitializeCulture()
{
if (Request.Cookies["Language"] != null && Request.Cookies["Language"].Value !=
null && Request.Cookies["Language"].Value != "")
{
setCulture();
}
else
{ //设置Cookie
Response.Cookies["Language"].Value =
(Request.Headers["accept-language"].Split(",".ToCharArray())[0]);
Response.Cookies["Language"].Expires = DateTime.Now.AddDays(1000);
setCulture();
}
base.InitializeCulture();
}
private void setCulture()
{
try
{
String selectedLanguage = Request.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
{
Response.Cookies.Clear();
}
}
第二步:添加一个WebPage 主要代码如下:
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"]));
}
第三步:
添加要显示国际化的页面:
注意:这个页面要继承我们第一步写的那个类
主要代码:
<asp: Label ID="Label1" runat="server" Text="<%$ Resources:ResourceGlobal,test%>"></asp:
Label>
另外我们还要在此页做国际化测试,所以还要添加一个DropdownList,做为选择显示语言
<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>
同时在代码文件添加如下代码:
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
if (Request.Cookies["Language"] == null || Request.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["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);
}
第四步:添加资源文件ResourceGlobal.resx和ResourceGlobal.en.resx呵呵,这里,只做中英文测试,
所以只做2个了,如果显示其它语言,请自行添加。
在资源文件里一定要添加一个test键值,这是个测试数据啊。
呵呵OK了,现在可以浏览测试了。
zh-cn 简体中文
zh-tw 繁体中文
da-dk 丹麦语
nl-nl 荷兰语
en-us 英语
fi-fi 芬兰语
fr-fr 法语
de-de 德语
it-it 意大利语
ja-jp 日语
ko-kr 朝鲜语
nb-no 挪威语
pt-br 葡萄牙语
es-es 西班牙语
es-us 西班牙语(美国)
sv-se 瑞典语