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

简介:

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

 

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

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

 

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

 

点击“中文输出”:

 

点击“英文输出”:

 

点击“自定义输出”:

 

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

 


相关文章
|
开发框架 移动开发 小程序
强烈推荐:绝对是好用的小程序开源框架
强烈推荐:绝对是好用的小程序开源框架
184 0
|
开发框架 开发者 JavaScript
HarmonyOS学习路之方舟开发框架—学习ArkTS语言(状态管理 三)
子组件中被@Link装饰的变量与其父组件中对应的数据源建立双向数据绑定。
|
5月前
|
数据采集 JavaScript Java
一款分布式爬虫管理平台,支持多种语言和框架
项目介绍 Crawlab —— 一个基于 Golang 的分布式爬虫管理平台,支持Python、NodeJS、Go、Java、PHP 等多种编程语言以及多种爬虫框架。 主要功能:
|
6月前
|
存储 开发框架 自然语言处理
【Uniapp 专栏】Uniapp 的多语言支持功能详解
【5月更文挑战第14天】Uniapp是一款跨平台开发框架,提供强大多语言支持,助力开发者轻松构建支持多种语言的应用,提升用户体验和市场拓展。其特点包括灵活的语言管理、跨平台一致性。通过语言文件存储内容,切换机制让用户自由切换。注重翻译准确性和文化适应性,集成到页面和组件中,同时关注性能优化。面对翻译不一致和更新及时性等问题,Uniapp将持续发展和完善,为全球化应用开发提供强有力支持。
262 3
【Uniapp 专栏】Uniapp 的多语言支持功能详解
|
5月前
|
自然语言处理 图形学
【Unity实战】实现强大通用易扩展的对话系统(附项目源码)
【Unity实战】实现强大通用易扩展的对话系统(附项目源码)(2023/12/26补充更新)
63 0
|
6月前
|
Rust 前端开发 安全
【专栏】WebAssembly将支持更多语言,结合低代码平台
【4月更文挑战第27天】WebAssembly是种虚拟机格式,用于在浏览器中运行编译后的C/C++、Rust等语言代码,提供高性能、高可移植性和安全性。其优势在于更快的执行速度、跨平台兼容及安全的沙箱环境。广泛应用在游戏开发、图形处理、计算机视觉等领域。未来,WebAssembly将支持更多语言,结合低代码平台,优化开发流程,同时应对优化编译和安全性的挑战,引领高性能网络应用新时代。
76 2
|
6月前
|
Dubbo Java 应用服务中间件
已跪,Java全能笔记爆火,分布式/开源框架/微服务/性能调优全有
程序员,立之根本还是技术,一个程序员的好坏,虽然不能完全用技术强弱来判断,但是技术水平一定是基础,技术差的程序员只能CRUD,技术不深的程序员也成不了架构师。程序员对于技术的掌握,除了从了解-熟悉-熟练-精通的过程以外,还应该从基础出发,到进阶,到源码,到实战。所以,程序员想要成功,首先要成就自己。
|
移动开发 自然语言处理 小程序
前端不使用 i18n,如何优雅的实现多语言?
前端不使用 i18n,如何优雅的实现多语言?
前端不使用 i18n,如何优雅的实现多语言?
|
自然语言处理 架构师 开发者
多语言|学习笔记
快速学习多语言。
108 0
多语言|学习笔记
|
自然语言处理 开发者
多语言| 学习笔记
快速学习多语言。