日期:2014-05-18  浏览次数:20510 次

关于ASP.NET国际化的问题,怎么让用户选择语言类型
请问一下,
我给我的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


------解决方案--------------------
UP

------解决方案--------------------
为了帮你顶~~

我重新进来的~~
------解决方案--------------------
- -帮你顶了 给我50分
------解决方案--------------------
对于用户请求,通常会有若干个线程进行处理的。

设置Thread.UICulture试试看
------解决方案--------------------
另外,ref:
http://www.cnblogs.com/cleo/archive/2006/09/09/aspnet_internationalization.html
------解决方案--------------------
支持下
------解决方案--------------------
顶,JF!
------解决方案--------------------

------解决方案--------------------
很多书上都有介绍多语言和本地化的东东
自己做的时候感觉最麻烦的是css的调整,毕竟中文和英文长度不一样,定义不同的样式再改起来也麻烦
------解决方案--------------------
关注,up
------解决方案--------------------
我刚刚做了个中英文的 
我用了一个静态的变量做判断
给你看看代码
不懂的话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);<