关于ASP.NET国际化的问题,怎么让用户选择语言类型

benbirdar 2009-01-14 05:48:34
请问一下,
我给我的asp.net程序添加了两个资源文件,分别显示对应中文和英文版,
如果我给程序配置文件中设置默认显示中文或者英文,都能正常显示,
现在我在页面上加了一个dropdownList,想让用户从dropdownList下拉显示中文或者英文,
选择中文就匹配程序的默认资源文件,选择英文就匹配程序的默认英文资源,
这个应该怎么实现呢?

我的代码中,
重写了InitializeCulture()方法

protected override void InitializeCulture()
{
//显式的指定区域为en
//实际应用中可以根据用户选择来动态设置语言
Thread.CurrentThread.CurrentUICulture = new CultureInfo("en");
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-US");
}

以为这样的话只要将改方法调用就可以了,可是不行!
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
if (this.DropDownList1.SelectedValue == "英语")
{
InitializeCulture();
}
}

这样的话,因为我重写的InitializeCulture()方法是设置文化为英语,这个页面加载的时候,就默认显示英语了!
如果我不重载InitializeCulture()方法,
直接写
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
if (this.DropDownList1.SelectedValue == "英语")
{
Thread.CurrentThread.CurrentUICulture = new CultureInfo("en");
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-US");
}
}
这样的话,页面加载的时候,是显示默认文化中文,然后我在dropdownList中选择“英语”以后,页面还是没有调用英语的资源文件,还是显示中文!!

请问高手们,这个根据用户的选择语言种类显示多语言版本的asp.net程序,应该怎么做呢????

PS:我的dropdownList的AutoPostback为true
...全文
341 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
songwenjie 2009-06-27
  • 打赏
  • 举报
回复
17楼能把你那代码看看吗
sxmonsy 2009-01-15
  • 打赏
  • 举报
回复
12楼的可行
Teng_s2000 2009-01-15
  • 打赏
  • 举报
回复
Settings是WebApplication和WinForm中出现的
takako_mu 2009-01-15
  • 打赏
  • 举报
回复
弄清楚什么是多國語言就好做了:)
Crazy_Xia 2009-01-15
  • 打赏
  • 举报
回复
在页面线程是无状态的,改了当然没用
你可以设置一个Session,用来存储用户选择的语言
如果是应用程序的话,也可以将选择保存到数据库中或文件中,这样所有的用户都使用同一种语言
rodgerluo 2009-01-15
  • 打赏
  • 举报
回复
我刚刚做了个中英文的
我用了一个静态的变量做判断
给你看看代码
不懂的话Q我 283162221

-----------------
private static string m_lang = "en-US";//初始化语言(ajax)


protected void Page_Load(object sender, EventArgs e)
{
Ajax.Utility.RegisterTypeForAjax(typeof(Forum_ForumBack_Main));




if (Request["ltp"] != null && Request["ltp"] != "")
{
loadType = int.Parse(Request["ltp"].ToString());
}

if (!IsPostBack)
{
InitializeCulture();

PageInit();
DistillateBind();
}
}
----------------------------------
//设置语言
protected override void InitializeCulture()//
{
if (HttpContext.Current.Request.Cookies["Language"] != null)
{
string language = Request.Cookies["Language"]["Language"].ToString();
if (!String.IsNullOrEmpty(language))
{
//UICulture - 决定了采用哪一种本地化资源,也就是使用哪种语言
//Culture - 决定各种数据类型是如何组织,如数字与日期
Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(language);
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(language);
//设置页面语言显示
}
}
else
{
HttpCookie csEnt = new HttpCookie("Language");
csEnt.Values.Add("Language", "en-US");
System.Web.HttpContext.Current.Response.AppendCookie(csEnt);
}

}
//中文
protected void btnChina_Click(object sender, EventArgs e)
{
if (HttpContext.Current.Request.Cookies["Language"] != null)
{
HttpContext.Current.Request.Cookies.Remove("Language");
HttpCookie csEnt = new HttpCookie("Language");
csEnt.Values.Add("Language", "zh-CN");
System.Web.HttpContext.Current.Response.AppendCookie(csEnt);
//修改Cookie的两种方法
//cok.Values["userid"]="alter-value";
//cok.Values.Set("userid","alter-value");
}
else
{
HttpCookie csEnt = new HttpCookie("Language");
csEnt.Values.Add("Language", "zh-CN");
System.Web.HttpContext.Current.Response.AppendCookie(csEnt);
}
InitializeCulture();

hlnkLogin.Text = (String)GetGlobalResourceObject("LocalizedText", "Login");
hlnkAdmin.Text = (String)GetGlobalResourceObject("LocalizedText", "Admin");
lbtnBack.Text = (String)GetGlobalResourceObject("LocalizedText", "mExit");
hlnkNote.Text = (String)GetGlobalResourceObject("LocalizedText", "uNote");
hlnkCorp.Text = (String)GetGlobalResourceObject("LocalizedText", "aModManage");
lblHello.Text = (String)GetGlobalResourceObject("LocalizedText", "mHello");

lbnPrevPage.Text = (String)GetGlobalResourceObject("LocalizedText", "sPreviousPage");
Localize3.Text = (String)GetGlobalResourceObject("LocalizedText", "sNo");
Localize1.Text = (String)GetGlobalResourceObject("LocalizedText", "sPage");
lbnNextPage.Text = (String)GetGlobalResourceObject("LocalizedText", "sDropPage");
Localize5.Text = (String)GetGlobalResourceObject("LocalizedText", "sAll");
Localize2.Text = (String)GetGlobalResourceObject("LocalizedText", "sPage");
Localize4.Text = (String)GetGlobalResourceObject("LocalizedText", "sRecord");

m_lang = "zh-CN";
lanageStates = 1;
DistillateBind();
}
// 英文
protected void btnEnglish_Click(object sender, EventArgs e)
{
if (HttpContext.Current.Request.Cookies["Language"] != null)
{
HttpContext.Current.Request.Cookies.Remove("Language");
HttpCookie csEnt = new HttpCookie("Language");
csEnt.Values.Add("Language", "en-US");
System.Web.HttpContext.Current.Response.AppendCookie(csEnt);
}
else
{
HttpCookie csEnt = new HttpCookie("Language");
csEnt.Values.Add("Language", "en-US");
System.Web.HttpContext.Current.Response.AppendCookie(csEnt);
}

InitializeCulture();


hlnkLogin.Text = (String)GetGlobalResourceObject("LocalizedText", "Login");
hlnkAdmin.Text = (String)GetGlobalResourceObject("LocalizedText", "Admin");
lbtnBack.Text = (String)GetGlobalResourceObject("LocalizedText", "mExit");
hlnkNote.Text = (String)GetGlobalResourceObject("LocalizedText", "uNote");
hlnkCorp.Text = (String)GetGlobalResourceObject("LocalizedText", "aModManage");
lblHello.Text = (String)GetGlobalResourceObject("LocalizedText", "mHello");

lbnPrevPage.Text = (String)GetGlobalResourceObject("LocalizedText", "sPreviousPage");
Localize3.Text = (String)GetGlobalResourceObject("LocalizedText", "sNo");
Localize1.Text = (String)GetGlobalResourceObject("LocalizedText", "sPage");
lbnNextPage.Text = (String)GetGlobalResourceObject("LocalizedText", "sDropPage");
Localize5.Text = (String)GetGlobalResourceObject("LocalizedText", "sAll");
Localize2.Text = (String)GetGlobalResourceObject("LocalizedText", "sPage");
Localize4.Text = (String)GetGlobalResourceObject("LocalizedText", "sRecord");

m_lang = "en-US";
lanageStates = 0;
DistillateBind();
}
wsp6188 2009-01-15
  • 打赏
  • 举报
回复
关注,up
  • 打赏
  • 举报
回复
很多书上都有介绍多语言和本地化的东东
自己做的时候感觉最麻烦的是css的调整,毕竟中文和英文长度不一样,定义不同的样式再改起来也麻烦
benbirdar 2009-01-15
  • 打赏
  • 举报
回复
To:jiezhi

if (Request.Cookies[Settings.Default.Cookies_Language] == null || Request.Cookies[Settings.Default.Cookies_Language].Value == "")

找不到Settings
怎么解决

鼠标放上去也没有命名空间的引用出现


唉,想做个国际化就这么难?
benbirdar 2009-01-15
  • 打赏
  • 举报
回复
谢谢5楼和12楼!
通过试验12楼的代码,让我理解并使用了5楼的代码!
非常感谢!!!

12楼的代码通俗易懂,5楼的代码简洁耐用!!!


Very good! Thanks all very much !
erytbc 2009-01-14
  • 打赏
  • 举报
回复
xuqunying0545 2009-01-14
  • 打赏
  • 举报
回复
顶,JF!
阿彪兄 2009-01-14
  • 打赏
  • 举报
回复
支持下
jiezhi 2009-01-14
  • 打赏
  • 举报
回复
另外,ref:
http://www.cnblogs.com/cleo/archive/2006/09/09/aspnet_internationalization.html
jiezhi 2009-01-14
  • 打赏
  • 举报
回复
对于用户请求,通常会有若干个线程进行处理的。

设置Thread.UICulture试试看
EsMo 2009-01-14
  • 打赏
  • 举报
回复
- -帮你顶了 给我50分
lyx717 2009-01-14
  • 打赏
  • 举报
回复
为了帮你顶~~

我重新进来的~~
lyx717 2009-01-14
  • 打赏
  • 举报
回复
UP

62,041

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧