zoukankan      html  css  js  c++  java
  • .net 2.0下进行网站的简、繁转换

    规则:

    以URL地址来决定简繁的显示,zh-cn/index.htm为简体,zh-tw/index.htm为繁体。

    思路很简单,以IHttpHandler接口为基类,写一个类,用来处理HttpHandler,用ProcessRequest方法来处理客户端的请求。在ProcessRequest方法中获取url值,有zh-tw就用繁体,反之用简体。

    using System;
    using System.IO;
    using System.Data;
    using System.Configuration;
    using System.Collections.Generic;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;
    using System.Text;
    using System.Text.RegularExpressions;
    using Microsoft.VisualBasic;

    导入以上命名空间,注意Microsoft.VisualBasic,要先引用一下Microsoft.VisualBasic。

    public class HtmlHttpHandler : IHttpHandler
    {
       //这里是定义的一个结构 ,与简繁转换无关,主要设定url重写的规则。
        private List<RegexInfo> _regex_list = new List<RegexInfo>();

        public HtmlHttpHandler()
        {
            DataSet ds = new DataSet();
            ds.ReadXml(ConfigurationManager.AppSettings["RegexsXml"]);
            foreach (DataRow r in ds.Tables["regex"].Rows)
                _regex_list.Add(new RegexInfo(((string)r["b"]).Trim(), ((string)r["a"]).Trim()));
        }


        //主方法

        public void ProcessRequest(HttpContext context)
        {
            string path = context.Request.Path;
            //foreach (RegexInfo r in _regex_list)
                //path = Regex.Replace(path, r._before, r._after);   //url重写
           //开始判断并转换
            if (path.IndexOf("zh-tw") != -1)
            {
                path = path.Replace("zh-tw", "zh-cn");
                 //以自定义方式过滤
                context.Response.Filter = new CnToTwStream(context.Response.Filter, context.Response.ContentEncoding);
            }
            context.Server.Transfer(path);
        }

        // Override the IsReusable property.
        public bool IsReusable
        {
            get { return true; }
        }
    }

    CnToTwStream类实现简繁的转换

    class CnToTwStream : Stream
    {
        private Stream _sink;
        private MemoryStream _ms;
        private Encoding _encoding;

        public CnToTwStream(Stream sink, Encoding encoding)
        {
            _sink = sink;
            _ms = new MemoryStream();
            _encoding = encoding;
        }

        public override bool CanRead
        {
            get { return false; }
        }

        public override bool CanSeek
        {
            get { return false; }
        }

        public override bool CanWrite
        {
            get { return true; }
        }

        public override long Length
        {
            get { return _ms.Length; }
        }

        public override long Position
        {
            get { return _ms.Position; }
            set { throw new NotSupportedException(); }
        }

        public override int Read(byte[] buffer, int offset, int count)
        {
            throw new NotSupportedException();
        }

        public override long Seek(long offset, System.IO.SeekOrigin direction)
        {
            throw new NotSupportedException();
        }

        public override void SetLength(long length)
        {
            throw new NotSupportedException();
        }

        public override void Close()
        {
            _ms.Close();
            byte[] buffer_cn = _ms.GetBuffer();
            string str_cn = _encoding.GetString( buffer_cn );
            //用Strings类的StrConv方法,其中TraditionalChinese是VisualBasic中的一个枚举
            string str_tw = Strings.StrConv(str_cn, VbStrConv.TraditionalChinese, 0);
            str_tw = str_tw.Replace("__zh-cn__", "__zh-tw__");
            byte[] buffer_tw = _encoding.GetBytes(str_tw);
            using (_sink)
            {
                _sink.Write(buffer_tw, 0, buffer_tw.Length);
            }
        }

        public override void Flush()
        {
            _ms.Flush();
        }

        public override void Write(byte[] buffer, int offset, int count)
        {
            _ms.Write(buffer, offset, count);
        }
    }

  • 相关阅读:
    从零开始系统深入学习android(实践让我们开始写代码Android框架学习7.App Widgets)
    用才智征服天下,用信誉赢得未来
    微众时代看网络营销
    营销不是传奇,欠的只是方法
    名扬天下,从这里出发
    【缅怀妈妈系列诗歌】之二十六:贺诞母亲
    营销密码,带你走进神奇地带
    打造“80后”第一营销品牌
    如果有一天
    把你写进诗里
  • 原文地址:https://www.cnblogs.com/leeolevis/p/1383217.html
Copyright © 2011-2022 走看看