对于 秋色园 的多语言的实现,很多人都问了一下是怎么实现的,这里,给网友简单介绍一下。

实现多语言,通常有以下方式:

1:使用系统的资源文件进行翻译

2:读取外部文件进行翻译

3:利用google等外部站点介入进行翻译。

这里就简单介绍一下第二种:

读取外部文件进行翻译,也是秋色园使用的翻译方式。

外部文件,比较常用的就是Xml文件了,本节也用Xml进行介绍。

多语言其实不难,只要对xml中的节点或属性放好相应的字典key/Value,然后在界面读取进行翻译即可。

看一下一个简单的Xml字典:

<?xml version="1.0" encoding="utf-8" ?>
<root>
    <div id="title" eng="英文标题" cus="自定义标题">中文标题</div>
    <div id="autumn" eng="Autumn" cus="路过秋天">秋色园</div>
    <div id="url" eng="http://www.cyqdata.com/english" cus="http://cyq1162.cnblogs.com">http://www.cyqdata.com</div>
</root>

这里每个id对应一个key/Value,为了实现多语言,用上了一些属性,这样可扩展更多的语言。

然后接下来的事?就是用读Xml文件,并将之显示到界面中。

下面用一段简单的示例代码来读取以上的Xml:

        System.Xml.XmlDocument doc = new System.Xml.XmlDocument();
        try
        {
            doc.Load(Server.MapPath("Lang.xml"));
            System.Xml.XmlNode node = doc.SelectSingleNode("//div[@id='title']");
            if (node != null)
            {
                Response.Write(node.InnerText);
            }
        }
        catch
        {
        }

以上的代码将输出“中文标题”四个字,对大伙比较难掌握的就是上面的XPath部分语法了[大伙多查查资料就会了]。

因此,在以上的代码基础上,只要加以扩展,读取节点之后,根据不同的条件[Cookie/Session/Url参数等]判断,

输出不同的节点属性的值,即可获得不同语言的相应的输出如:

node.Attributes["eng"].InnerText;
node.Attributes["cus"].InnerText;

通过以上的方式,大伙已基本上可以自己实现一个自己的简单的多语言处理工作了,进行简单封装一下,一个易于使用的多语言类也可以自已写出来的。

下面用CYQ.Data 数据框架 已封装好的多语言类来演示一个完整示例

1:新建网站项目:MutilLanguageDemo

2:接着项目添加引用 CYQ.Data 数据框架 V4.0版本 来实现对Xml的操作:

3:新建Lang.Xml,内容刚上面的xml内容。

最后项目截图如下:

这里演示用Cookie来设置语言版本,因此配置文件需要设置一下域名如下:

<appSettings>
     <add key="Domain" value="localhost:9690"/>
</appSettings>

演示用的就是localhost:9690,你懂的。

下面是Default.aspx的前后台代码:

前台的html:

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>无标题页</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:Button ID="btnChina" runat="server" Text="中文输出" OnClick="btnChina_Click" />
        <asp:Button ID="btnEnglish" runat="server" Text="英文输出" OnClick="btnEnglish_Click" />
        <asp:Button ID="btnCustom" runat="server" Text="自定义输出" OnClick="btnCustom_Click" />
       <p>html:<%=lang.Get("autumn") %></p>
       <p>cs :<asp:Label ID="labUrl" runat="server" Text=""></asp:Label></p>
    </div>
    </form>
</body>
</html>

说明:

1:有三个按钮,通过点击来切换语言。

2:标题,一个被切换成不同语言的标签。

3:使用语法获取如:<%=lang.Get("autumn") %>:

4:服务端对控件赋值。

后台CS代码:

    protected MutilLanguage lang = null; //定义全局变量
    protected void Page_Load(object sender, EventArgs e)
    {
        if (lang == null)
        {
            lang = new MutilLanguage(Server.MapPath("Lang.xml"), false);
        }
        if (!IsPostBack)
        {   //设置页面标题和Lable
            this.Title = lang.Get("title");
            labUrl.Text = lang.Get("url");
        }
    }
    //三个按钮设置Cookie后然后刷新界面。
    protected void btnChina_Click(object sender, EventArgs e)
    {
        lang.SetToCookie(LanguageKey.China);
        Response.Redirect(Request.RawUrl);
    }
    protected void btnEnglish_Click(object sender, EventArgs e)
    {
        lang.SetToCookie(LanguageKey.English);
        Response.Redirect(Request.RawUrl);
    }
    protected void btnCustom_Click(object sender, EventArgs e)
    {
        lang.SetToCookie(LanguageKey.Custom);
        Response.Redirect(Request.RawUrl);
    }

代码上面很简单,就不多说明了,通过Get方法,封装了Xpath语法部分,更易于使用。

接下来看一下最后的实现效果:

点击“中文输出”:

点击“英文输出”:

点击“自定义输出”:

最后提供下示例代码下载:点击进入下载页面

实战篇-简单多语言的实现相关推荐

  1. VBS带你领略脚本语言的快乐!(实战篇—刷字数)

    用VBS脚本刷爆搜狗输入法 前言   偶然一次打开了搜狗输入法的个人主页,看到这135万字,不禁想起当年高中时为了跟同学装逼,上课挂脚本刷字数的"光荣战绩",很快啊,我就在古老的硬 ...

  2. R语言时间序列(time series)分析实战:简单指数平滑法预测

    R语言时间序列(time series)分析实战:简单指数平滑法预测 目录

  3. VBS带你领略脚本语言的快乐!(实战篇—死循环)

    用VBS让电脑欲哭无泪 前言    经过了前面几章对VBS操作的了解,我们顺利的进入了令人期待的实战篇(其实是恶搞片).恶搞,,,呸,实战篇我依然会对代码进行解析,但不会像讲基础那样细节,如果有听不懂 ...

  4. 入门C语言第三话:数组之实战篇——扫雷(进阶版——图形化界面,递归展开,播放音乐与音效,标记取消雷,记录雷的个数,鼠标点击,文末附有完整代码)

    文章目录 前言 每日鸡汤 基本思路 衔接基础班扫雷 准备阶段 正文 一.雷盘信息的存储 1.设置雷盘11*11与初始化 2.放置雷 3.放置雷周围的信息 二.图形化界面 1.创建与初始化窗口 2.加载 ...

  5. python简单编程-编程中最简单的语言Python,这样学或许更容易

    最近微信小程序上面出了一个跳一跳的小游戏 大家有没有玩呀? 编程中最简单的语言Python,这样学或许更容易 分享之前我还是要推荐下我自己建的Python开发学习群:628979297,群里都是学Py ...

  6. spring cloud全家桶_阿里架构师玩转spring全家桶(实战篇),附赠3本spring电子书...

    Spring框架自诞生以来一直备受开发者青睐,今天在这里分享的是Spring全家桶实战篇电子书籍.书籍内容中包括了Spring.SpringBoot.SpringCloud.SpringMVC四个实战 ...

  7. 《黑客攻防技术宝典Web实战篇@第2版》读书笔记1:了解Web应用程序

    读书笔记第一部分对应原书的第一章,主要介绍了Web应用程序的发展,功能,安全状况. Web应用程序的发展历程 早期的万维网仅由Web站点构成,只是包含静态文档的信息库,随后人们发明了Web浏览器用来检 ...

  8. python docker自动化_「docker实战篇」python的docker爬虫技术-移动自动化控制工具appium工具(17)...

    原创文章,欢迎转载.转载请注明:转载自 IT人故事会,谢谢! 原文链接地址: 「docker实战篇」python的docker爬虫技术-移动自动化控制工具appium工具(17) Appium是一个开 ...

  9. 微信小程序|开发实战篇之二

    开发实战篇之二 前言 1.零碎知识点和优化点 1.1 ES6模板字符串 1.2 ES6扩展运算符 1.3 独立更新like组件状态 1.4 自定义组件支持hidden 2.音乐music组件开发 2. ...

最新文章

  1. 复习计算机网络day2
  2. [Oracle][Corruption]究竟哪些检查影响到 V$DATABASE_BLOCK_CORRUPTION
  3. netflix_学习Netflix管理员–第1部分
  4. Qt:Qt实现飞秋拦截助手—介绍
  5. 各浏览器对focusin/focusout事件的支持差异
  6. django 定制admin
  7. c语言怎么储存字母,c语言怎么用变量存储中文字符?书本上面没有的秘密
  8. HDU 5943 2016CCPC杭州 K: Kingdom of Obsession(二分匹配)
  9. 中电信总工:我国将在2011底出现IP短缺
  10. 阶段5 3.微服务项目【学成在线】_day02 CMS前端开发_10-webpack研究-安装nodejs
  11. python中函数的意义_3分钟搞懂Python中dict函数的含义是什么
  12. sw与matlab连接_solidworks与matlab联合仿真simMechnics下载及安装
  13. 面向部件的整车E/E架构开发咨询服务
  14. 谷歌官方Android镜像下载(中文站)
  15. 牛客网《剑指offer》专栏刷题练习|锻炼递归思想|练习栈的使用
  16. 7. 成功解决:io.netty.util.IllegalReferenceCountException: refCnt: 0, decrement: 1
  17. 基于JavaScript+css写一个简单的h5动态下雨效果
  18. (ROC-RK3568-PC) 裸机23_驱动VOP2显示彩条画面
  19. 企业如何制定高效可靠环保企业管理平台解决方案
  20. TikTok不可思议的崛起

热门文章

  1. 如何正确使用as follows 与 following
  2. Javapinyin4J实现中文名转拼音
  3. jQuery11 data() : 数据缓存
  4. CentOS7上Mongodb安装、卸载
  5. Docker入门(三) - 搭建mysql
  6. 华为S5700交换机开启telnet登录
  7. 关于NLPIR应用在KETTLE中的探索
  8. APOC 15 Years Celebration
  9. python卸载pip重新安装_pip无法正常使用卸载并重新安装
  10. 1.2.3 TCP/IP参考模型和五层参考模型