zoukankan      html  css  js  c++  java
  • net2.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);
        }
    }

  • 相关阅读:
    游戏中战斗伤害范围-弹道飞行
    游戏中战斗伤害范围攻击计算完整全版
    更加强健的线程模型,解决线程卡死,退出异常情况
    存在即合理,重复轮子orm java版本
    游戏里12方向,任意方向计算正前方矩形规则
    我是如何设计游戏服务器架构的
    游戏中精灵对象的属性功能设计
    看我是如何处理自定义线程模型---java
    面试和面试者如何保持心态
    谈谈枚举的新用法——java
  • 原文地址:https://www.cnblogs.com/scgw/p/1135326.html
Copyright © 2011-2022 走看看