多语言的用户界面有关问题
多语言的用户界面问题
我第一次做国际化的项目,请大家多多支持啊!
我从 ASP.NET 网页生成两个局部资源文件,一个中文,一个英文。修改IE的语言后,页面内容会根据修改显示不同的语言,这个没有问题。但是如果我想在页面上添加两个按钮(中文、英文),用来切换显示语言,一般多语言网站都会有的,要怎么实现啊?
System.Globalization.CultureInfo.CurrentCulture 的属性是不能修改的,到底修改哪里呢?
我试过在按钮时间里添加
方法1:
CultureInfo newCulture = (CultureInfo)System.Globalization.CultureInfo.CurrentCulture.Clone();
newCulture.Name = "zh-CN";
System.Globalization.CultureInfo.CurrentCulture = new CultureInfo("zh-CN");
编译器错误信息: CS0200: 无法对属性或索引器“System.Globalization.CultureInfo.Name”赋值 -- 它是只读的
副本也不能修改-_-!!!
方法2:
System.Globalization.CultureInfo ci = new System.Globalization.CultureInfo(0x0804);
System.Threading.Thread.CurrentThread.CurrentCulture = ci;
没报错,但没起作用。一点反应也没有,还是英文的,唉!
路过的朋友帮个忙看一下
------解决方案--------------------
我第一次做国际化的项目,请大家多多支持啊!
我从 ASP.NET 网页生成两个局部资源文件,一个中文,一个英文。修改IE的语言后,页面内容会根据修改显示不同的语言,这个没有问题。但是如果我想在页面上添加两个按钮(中文、英文),用来切换显示语言,一般多语言网站都会有的,要怎么实现啊?
System.Globalization.CultureInfo.CurrentCulture 的属性是不能修改的,到底修改哪里呢?
我试过在按钮时间里添加
方法1:
CultureInfo newCulture = (CultureInfo)System.Globalization.CultureInfo.CurrentCulture.Clone();
newCulture.Name = "zh-CN";
System.Globalization.CultureInfo.CurrentCulture = new CultureInfo("zh-CN");
编译器错误信息: CS0200: 无法对属性或索引器“System.Globalization.CultureInfo.Name”赋值 -- 它是只读的
副本也不能修改-_-!!!
方法2:
System.Globalization.CultureInfo ci = new System.Globalization.CultureInfo(0x0804);
System.Threading.Thread.CurrentThread.CurrentCulture = ci;
没报错,但没起作用。一点反应也没有,还是英文的,唉!
路过的朋友帮个忙看一下
------解决方案--------------------
- C# code
/// <summary> /// 语言文化区域性控制 /// </summary> public abstract class Culture : System.Web.UI.Page { /// <summary> /// 重写Page基类的InitializeCulture方法。 /// 为页的当前线程设置 System.Web.UI.Page.Culture 和 System.Web.UI.Page.UICulture。 /// </summary> protected override void InitializeCulture() { if (!string.IsNullOrEmpty(CultureCache)) { SetCulture(CultureCache); } else { SetCulture(DefaltCulture); } } /// <summary> /// 设置指定文化 /// </summary> /// <param name="culture">有效的区域性名称</param> public static void SetCulture(string culture) { try { Thread.CurrentThread.CurrentCulture = new CultureInfo(culture); Thread.CurrentThread.CurrentUICulture = new CultureInfo(culture); } catch { culture = DefaltCulture; Thread.CurrentThread.CurrentCulture = new CultureInfo(culture); Thread.CurrentThread.CurrentUICulture = new CultureInfo(culture); } CultureCache = culture; UICultureCache = culture; } /// <summary> /// 获取当前应用程序默认文化 /// </summary> public static string DefaltCulture { get { string culture = ConfigurationManager.AppSettings["Culture"].ToString(); if (string.IsNullOrEmpty(culture) || culture == "auto") { return Thread.CurrentThread.CurrentCulture.ToString(); } return culture; } } /// <summary> /// 存储当前Culture Session /// </summary> public static string CultureCache { get { try { return HttpContext.Current.Request.Cookies[ConfigurationManager.AppSettings["CultureCache"].ToString()].Value; } catch { return string.Empty; } } set { HttpContext.Current.Response.Cookies[ConfigurationManager.AppSettings["CultureCache"].ToString()].Value = value; } } /// <summary> /// 存储当前UICulture Session /// </summary> public static string UICultureCache { get { try { return HttpContext.Current.Request.Cookies[ConfigurationManager.AppSettings["UICultureCache"].ToString()].Value; } catch { return string.Empty; } } set { HttpContext.Current.Response.Cookies[ConfigurationManager.AppSettings["UICultureCache"].ToString()].Value = value; } } }