DotNet2.0多语言解决方案

Visual Studio 2005
 一、 C/S系统多语言源码实例
           Download
 二、  B/S系统多语言源码实例 
           Download
   1)自动侦测获得浏览器中设置的语种
         如图:CultureInfo.CurrentCulture.Name返回zh-cn
  
     2)客户端资源获取
          隐式:<asp:Label ID="Label1" runat="Server" meta:resourcekey="resource-key-prefix"/>
          显式:<%$ Resources:[filename prefix,]resource-key %>
          隐示定义主要是用在资源文件放在APP_LocalResources目录下的资源,显式定义用在资源在APP_GlobalResources目录下,也可在APP_LocalResources目录。必需指定资源所在的文件名。隐式不需要指定资源所在的文件是因为默认资源就是当前页面所在的资源文件中。显式调用缺省如果文件名不存在,则从本地的资源文件中查找。
    3)特定国家/地区信息(文化格式)
          System.Globalization.RegionInfo
    4)服务器端资源获取
         全局资源:string res = GetGlobalResourceObject("资源文件名","资源键名")
         本地资源:string res = GetLocalResourceObject("资源争名")
    5)用户语种设置
       用户语种保存在web.config的profile节点中或者Cookie中,我更喜欢后者主要是前者还不了解。string userCulture = Profile.GetPropertyValue("currentCulture").ToString();
     System.Globalization.CultureInfo ci = new System.Globalization.CultureInfo(userCulture);
        System.Threading.Thread.CurrentThread.CurrentCulture = ci;
        System.Threading.Thread.CurrentThread.CurrentUICulture = ci;
      放在Global.asax文件的void Application_AcquireRequestState(object sender, EventArgs e)中初始化。
如:
Login.aspx
protected void DropDownLanguage_SelectedIndexChanged(object sender, EventArgs e)
   {
   string SelectedLanguage = DropDownLanguage.SelectedValue.ToString();
   //Save selected user language in profile
   Profile.SetPropertyValue("PreferredCulture", SelectedLanguage);
  
   //Force re-initialization of the page to fire InitializeCulture()
   Response.Redirect(Request.Url.LocalPath);
   }
   protected override void InitializeCulture()
   {
   // override virtual method InitializeCulture() to check if profile contains a user language setting
   string UserCulture = Profile.GetPropertyValue("PreferredCulture").ToString();
   if ( UserCulture != "")
   {
   // there is a user language setting in the profile: switch to it
   Thread.CurrentThread.CurrentUICulture = new CultureInfo(UserCulture);
   Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(UserCulture);
   }
   }
Global.asax
   void Application_BeginRequest(object sender, EventArgs e)
   {
   string lang = string.Empty;//default to the invariant culture
   lang = Profile.PreferredCulture;
   if (string.IsNullOrEmpty(lang))
   {
   lang = string.Empty;
   }
   Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(lang);
   Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(lang);
   }
     6)编码方式
     例,强制指定简体中文的编码方式
    <configuration><system.web><globalization requestEncoding="GB2312" responseEncoding="GB2312" fileEncoding="GB2312" /></system.web></configuration>

源代码是最好的文档。
-------------------------
需要.net framework 2.0
posted on 2006-05-28 10:44  蝈蝈  阅读(808)  评论(1)    收藏  举报