互联网解决方案咨询

梦想有多大路就会有多远:作一颗IT量子
  首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

一个网站站点的多语言问题

Posted on 2008-05-28 17:03  互联网粒子  阅读(340)  评论(0编辑  收藏  举报
在做网站时能常会遇到需要把网站做成多种语言,asp.net2.0提供了良好的处理方式,但发现会有些问题,如果是大型社区并发请求的效率就比较明显了,所以如果用cache或泛型来处理,会快些,把这些资源包进行散列存储
现在介绍一种并发不算高的处理方式:
先建一个.txt文件(cn.txt)注意要存成utf-8的格式,要不然会乱码
在里面输入内容:
_name=姓名
_list =显示
然后,选择开发菜单下面的vs2005>工具下面的>命令提示符
C:\Program Files\Microsoft Visual Studio 8\VC\>resgen E:\多种资源文件\Resource\cn.txt
成功后会自动生成一个cn.resources的资源文件。
新建建一个类,代码如下
using System;
using System.Resources;
using System.Globalization;

namespace 多种资源文件
{
    /// <summary>
    /// Class1 的摘要说明。
    /// </summary>
    class ResourceClass
    {
        /// <summary>界面资源对象</summary>
        public ResourceManager  myResManager;

        /// <summary>界面区域对象对象</summary>
        protected CultureInfo myCulture;

       protected string strPath = @"E:\开源项目\多语言\多种资源文件\Resource";  //这里要修改成自己的实际路径

        private string _strLangString = "zh-CN";
        public string LangString
        {
            get { return _strLangString; }
            set { _strLangString = value; }
        }
       string languageFle = "en";
        public ResourceClass()
        {       
           
       
        }
       private  void GetCulture()
       {
           if (myResManager == null || myCulture == null)
           {

               switch (_strLangString.ToLower())
               {
                   case "zh-tw":
                       break;
                   case "zh-cn":
                       languageFle = "cn";
                       break;
                   case "en":
                       languageFle = "en";
                       break;
               }
               // 建立資源管理器实例
               this.myResManager = ResourceManager.CreateFileBasedResourceManager(languageFle, this.strPath, null);
               // 建立区域实例
               this.myCulture = new CultureInfo(this._strLangString);
           }
       }
        public string GetResource(string strKey)
        {
           GetCulture();
            string strValue = "";
            strValue = myResManager.GetString(strKey,myCulture);
            return strValue;
        }       
    }
}
页面上调用示例:
 ResourceClass myClass = new ResourceClass();
        protected void Page_Load(object sender, EventArgs e)
        {
            GetItemText();
        }

//在页面上放一个dropDownList控件,它的value分面为zh-cn,en等,供用户选择不同的语言
        protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
        {
            GetItemText();
        }
        private void GetItemText()
        {
            myClass.LangString = DropDownList1.SelectedValue.ToString();
            string str = myClass.GetResource("_list");
            this.Label1.Text = str;
            Response.Write(myClass.GetResource("_name"));
        }