• .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自定义视图
    CISCO PVST+配置和结果验证 per vlan spanning tree(51cto 实验10)
    读入a,b当a,b不同时为零时结束
    跨交换机VLAN 配置和结果验证(51cto :实验9)
    单交换机VLAN 配置和结果验证(51cto-o8)
    cocos2d(1)
    servlet-session
    Servlet-servletContext
    mysql数据库从windows迁移到linux,或者linux迁移到windows教程
    linux (centos) 安装MySql详细教程!!实战详解
  • 原文地址:https://www.cnblogs.com/leeolevis/p/1383217.html
Copyright © 2020-2023  润新知