实战篇-简单多语言的实现

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

 

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

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语法部分,更易于使用。

 

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

 

点击“中文输出”:

 

点击“英文输出”:

 

点击“自定义输出”:

 

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

 

时间: 2024-07-29 01:13:39

实战篇-简单多语言的实现的相关文章

JBuilder9+Weblogic7实战篇之工具篇(JDBC 1)

JBuilder9+Weblogic7实战篇<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> 工具篇(配置JDBC 1)                                                                              作者:黄 凯         E_mail:hk_sz@163.com Weblogic7中配置J

关于下载GAE High Replication Datastore数据[实战篇]下

通过bulk loader可以批量上传下载数据,GAE支持xml,csv格式数据批量上传,以及xml,csv和文本 格式下载. 你可以选择自动生成一个bulkloader.yaml,或者手动编码来写一个bulk loader.谷歌不推荐手动编 写,个人也觉得自动生成才是王道. 如何自动生成bulkloader.yaml bulkloader.yaml是一个描述数据格式的配置文件,格式例如xml或csv.bulk loader进行数据导入时 需要这个配置文件来将外部数据(xml或csv)转换为中间

[PhalApi实战篇(1)]Redis队列处理异步任务

[PhalApi实战篇(1)]Redis队列处理异步任务 前言 先在这里感谢phalapi框架创始人@dogstar,为我们提供了这样一个优秀的开源框架. 哈喽大家好呀!之前编写的PhalApi入门篇和进阶篇已经过去了好久了,在此之间也回答了很多小伙伴各种各样的问题,这里也希望吧里面一些问的比较多的和比较有趣的以及笔者在使用PhalApi一些新的体会,都提取出来为大家带来一些能够在实际开发中可以使用的技术或思想,那么我们就开始我们实战篇中的第一节 Redis队列处理异步任务 大家希望喵咪在Pha

iOS与JS交互实战篇(Swift/ObjC)

前言 ObjectiveC与Js交互是常见的需求,可对于新手或者所谓的高手而言,其实并不是那么简单明了.这里只介绍iOS7.0后出来的JavaScriptCore framework. 关于JavaScriptCore 本教程中所涉及到的几种类型: JSContext, JSContext是代表JS的执行环境,通过-evaluateScript:方法就可以执行一JS代码 JSValue, JSValue封装了JS与ObjC中的对应的类型,以及调用JS的API等 JSExport, JSExpor

工作经常使用的SQL整理,实战篇(二)

原文:工作经常使用的SQL整理,实战篇(二)[原创] 工作经常使用的SQL整理,实战篇,地址一览: 工作经常使用的SQL整理,实战篇(一) 工作经常使用的SQL整理,实战篇(二) 工作经常使用的SQL整理,实战篇(三)   接着上一篇"工作经常使用的SQL整理,实战篇(一)"继续讨论,这一篇中主要讨论增删改查,连接,分组和排序,通配符,视图,存储过程和事务,游标,触发器这些东西. 6.增删改查 插入 --插入用户表数据 insert into Tse_User(UserID, User

如何建立客户名单 收集精准数据库 实战篇

中介交易 SEO诊断 淘宝客 云主机 技术大厅 数据库营销是网络营销的一种形式,也是做淘宝客推广的主要营销手段之一,之前的淘宝客教程中我们已经对数据库营销的概念.软文写作技巧以及如何建立客户的忠诚度做了详细的介绍,万事俱备,只欠东风.如何收集精准的用户信息达到我们最终的营销目的,这才是所有做网络营销和淘客们关心的问题.财帮网将以推广"防辐射服"为例一步步为大家讲解如何建立收集精准客户名单数据库. 一.使用CHM格式制作两本电子书.这里简单说一下为什么要用CHM,其中也牵扯到了目标客户分

学习 ASP.NET MVC (第四回)实战篇

本系列文章导航 学习 ASP.NET MVC (第一回)理论篇 学习 ASP.NET MVC (第二回)实战篇 学习 ASP.NET MVC (第三回)实战篇 学习 ASP.NET MVC (第四回)实战篇 学习 ASP.NET MVC (第五回)理论篇 我们继续ASP.NET MVC之旅.上文中我们实现了对User信息的展示,详细信息的列表,还有错误页的实现.本文继续完成添加,修改,删除的操作.首先我们来完成Controller的代码: Code //         // GET: /Use

艾伟_转载:学习 ASP.NET MVC (第四回)实战篇

本系列文章导航 学习 ASP.NET MVC (第一回)理论篇 学习 ASP.NET MVC (第二回)实战篇 学习 ASP.NET MVC (第三回)实战篇 学习 ASP.NET MVC (第四回)实战篇 学习 ASP.NET MVC (第五回)理论篇 我们继续ASP.NET MVC之旅.上文中我们实现了对User信息的展示,详细信息的列表,还有错误页的实现.本文继续完成添加,修改,删除的操作.首先我们来完成Controller的代码: Code//        // GET: /Users

学习 ASP.NET MVC (第三回)实战篇

本系列文章导航 学习 ASP.NET MVC (第一回)理论篇 学习 ASP.NET MVC (第二回)实战篇 学习 ASP.NET MVC (第三回)实战篇 学习 ASP.NET MVC (第四回)实战篇 学习 ASP.NET MVC (第五回)理论篇 创建Controllers和Views我们再次回顾下ASP.NET MVC的基本工作流程:URL-->Controller(会执行一个方法Action)-->从数据库中获取一个Model对象-->将Model作为ViewData传递给V