路过秋天

同样的3年,有的人从学生到当了MVP了,而我却在原地,卖弄当年的代码,秋天的风,有点凄,有点凉!

公告信息
内涵是很强大的~~~别看外表~~~当犀利哥入侵不了的时候,感觉有种莫名的失落~~~
文章档案
最新评论

实战篇-利用CYQ.Data 数据框架简单多语言的实现

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

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

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://cyqdata.com/english" cus="http://cyq1162.cnblogs.com">http://cyqdata.comdiv>
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语法部分,更易于使用。

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

点击“中文输出”:

点击“英文输出”:

点击“自定义输出”:

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

秋色园是QBlog的官方站点,由路过秋天创建,基于cyqdata数据层框架开发的支持多用户、多语言、多数据库(access,mssql,oracle)、目录级url等功能强大的博客系统
新浪微博粉丝精灵,刷粉丝、刷评论、刷转发、企业商家微博营销必备工具"

2011/1/24 20:58:43 | 开发测试及演示 | |

  • 发表评论