首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

多语言的用户界面有关问题

2012-03-26 
多语言的用户界面问题我第一次做国际化的项目,请大家多多支持啊!我从 ASP.NET 网页生成两个局部资源文件,

多语言的用户界面问题
我第一次做国际化的项目,请大家多多支持啊!
我从 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; }        }    } 


[解决办法]
可以在登陆是根据IE语言在SESSION中创建一个语言FLG:TRUE(中)/FALSE(英)
每次加载页面是根据SESSION中的语言FLG来切换显示语言
加两个按钮的话,在点击按钮的事件中改变SESSION中FLG的值

热点排行