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

简介:

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

 

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

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

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

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

 

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

 

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

 

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

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

 

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

复制代码
ExpandedBlockStart.gif
<? 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:

复制代码
ExpandedBlockStart.gif
        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:

复制代码
ExpandedBlockStart.gif
< 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代码:

复制代码
ExpandedBlockStart.gif
     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语法部分,更易于使用。

 

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

 

点击“中文输出”:

 

点击“英文输出”:

 

点击“自定义输出”:

 

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

版权声明:本文原创发表于博客园,作者为路过秋天,原文链接:

http://www.cnblogs.com/cyq1162/archive/2011/01/25/1944403.html

相关文章
|
9月前
|
存储 缓存 移动开发
构建跨平台应用的利器——UniApp入门指南
构建跨平台应用的利器——UniApp入门指南
|
前端开发
前端知识学习案例-GraphQl速览
前端知识学习案例-GraphQl速览
37 0
前端知识学习案例-GraphQl速览
|
移动开发 自然语言处理 小程序
前端不使用 i18n,如何优雅的实现多语言?
前端不使用 i18n,如何优雅的实现多语言?
前端不使用 i18n,如何优雅的实现多语言?
|
定位技术
从0开发游戏引擎之 序言(引擎内主要模块)
从0开发游戏引擎之 序言(引擎内主要模块)
|
自然语言处理 架构师 开发者
多语言|学习笔记
快速学习多语言。
71 0
多语言|学习笔记
|
自然语言处理 开发者
多语言| 学习笔记
快速学习多语言。
68 0
|
JavaScript 前端开发 程序员
为什么要学习前端的流行框架|学习笔记
快速学习为什么要学习前端的流行框架
69 0
|
XML JSON 自然语言处理
SAP UI5 初学者教程之八 - 多语言的支持试读版
SAP UI5 初学者教程之八 - 多语言的支持试读版
SAP UI5 初学者教程之八 - 多语言的支持试读版
|
开发者 大数据
揭秘!如何用Flutter设计一个100%准确的埋点框架? | 开发者必读(040期)
最炫的技术新知、最热门的大咖公开课、最有趣的开发者活动、最实用的工具干货,就在《开发者必读》!
1296 0
|
Web App开发
【教程】ThingJS 3D开发快速入门 第一讲 开发概述&#183;优势&#183;项目流程
【教程】ThingJS 3D开发快速入门 第一讲 开发概述·优势·项目流程  优酷:http://v.youku.com/v_show/id_XMzkwOTQ1MDYwMA==.html 腾讯视频:https://v.
1641 0