asp.net2.0+xml实现多语言开发!

我们来看如何使用xml来实现吧!
1。我们需要编写一个ResourceManager.cs来读取xml文件内容
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
//对xml读写操作
using System.Xml;
//缓存
using System.Web.Caching;
//
using System.Collections;
///

/// ResourceManager 的摘要说明
///

public class ResourceManager
{
public ResourceManager() { }
public static string GetString(string name, string userLanguages)
{
//通过指定属性名返回包含此属性名相关信息的hash表
Hashtable source = LoadSource(userLanguages);
//如果hash表不等于null就将其值返回
if (source != null)
{
return source[name].ToString();
}
//否则空
return “”;
}
//获取语言语句字典
public static Hashtable LoadSource(string userLanguages)
{
//获取xml文件存放的物理路径
string pathFile = System.Web.HttpContext.Current.Server.MapPath(HttpContext.Current.Request.ApplicationPath + “/Languages/”+userLanguages+”/Resources.xml”);
//创建一个xmldatadocument对象
System.Xml.XmlDataDocument lagXml = new XmlDataDocument();
//加载其要操作的xml文件
lagXml.Load(pathFile);
//声明一个hash表
Hashtable supportedLanguages;
//创建hash表
supportedLanguages = new Hashtable();
//获取xml文件中root节点下的所有子节点
foreach (XmlNode xn in lagXml.SelectSingleNode(“root”).ChildNodes)
{
//如果不是注释就将子节点属性值和节点文本以键/值对形式存放到hash表里
if (xn.NodeType != XmlNodeType.Comment)
{
supportedLanguages.Add(xn.Attributes[“name”].Value,xn.InnerText);
}
}
//返回hash表
return supportedLanguages;
}
}
2。肯定还需要xml文件。
我们在项目根目录下创建一个Languages文件夹,然后在下面建子文件夹:例如中文就是zh-CN,英文就是en-US.
然后在这些子文件夹下创建相同名称的xml文件Resources.xml
当然名字是随便取的!不过注意代码里要改动!
xml文件里的具体格式如下:


Account number:
Password:
Confirmation
Publishes

3。讲到这里我来说下实现原理,前台有两个按钮 一个在点击后使页面显示中文,一个则显示英文
那么我们需要先拖出这么两个button控件!
然后分别在他们的click事件里写上:
string langauge = “zh-CN”;//这三句话是写在了中文按钮的事件下,英文下同样是这三句话,但要记得将zh-CN改成en-US
Session[“Language”] = langauge;
ShowText(langauge);
4。大家肯定看到了ShowText干什么的!他就是来指定翻译那些东东的! 这个方法还需要在每个页面都放到page_load下面!因为我们需要在
页面一加载时就翻译!
void ShowText(string userLanguage)
{
localizeAccount.Text = ResourceManager.GetString(“Account”, userLanguage);
}
例如这个是将localizeAccount控件的文本按指定要求翻译成指定文本!
这里大家也该明白我们必须将需要翻译的东东都放到控件里,然后后台调用其text属性来改变他的显示语言!
关于这一点,有几点需要注意,就是datalist这类绑定控件里的header,item里的控件如何取出来翻译!
foreach(DataListItem item in DataList控件id.Controls)
{
if(item.ItemType==ListItemType.Header)
{
(Localize) a = item.FindControl(“id”) as Localize;
a.Text = …;
}
}
这样就可以取出header部分的控件了,但是不知道为什么这样取item里的控件会有问题!
所以取item里的大家这样取
foreach(DataListItem item in DataList控件id.Items)
{
(Localize) a = item.FindControl(“id”) as Localize;
a.Text = …;
}
5。创建Global.asax文件
void Session_Start(object sender, EventArgs e)
{
// 在新会话启动时运行的代码
Session[“Language”] = “zh-CN”;
}
void Session_End(object sender, EventArgs e)
{
// 在会话结束时运行的代码。
// 注意: 只有在 Web.config 文件中的 sessionstate 模式设置为
// InProc 时,才会引发 Session_End 事件。如果会话模式设置为 StateServer
// 或 SQLServer,则不会引发该事件。
Session.Clear();
}
———————总结—————————–
那么我们来把上面乱七八糟步骤整理一下,
首先Global.asax会在一开始默认一中语言显示,这里是中文!
然后当有用户点击英文按钮的时候,会改变session存贮的值,
然后页面根据session值加载ShowText()方法,
而这一方法会通过调用ResourceManager.cs文件里的方法到指定xml文件中读取数据!
这样一个多语言就实现了!也没也过什么文章,随便写写,只希望能帮助到大家,而且我的
说不定是很差的实现方法,就当给大家提供个思路吧,有错的地方还请指教!
最后提两点,如果需要下拉框,需要在Languages文件夹下建一个xml专门存贮下拉框内容:例如:
一—————————————–






然后在ResourceManger.cs文件里加上一个方法:
//获取语言目录数据,返回一个数据视图
public static DataView GetSupportedLanguages()
{
string cacheKey = “Languages”;
if(HttpContext.Current.Cache[cacheKey]==null)
{
string PathFile=System.Web.HttpContext.Current.Server.MapPath(HttpContext.Current.Request.ApplicationPath+”/Languages/languages.xml”);
DataSet objDataSet=new DataSet();
objDataSet.ReadXml(PathFile);
//下面两句自己也不是很理解,还望高人指点,呵呵!~
CacheDependency dp = new CacheDependency(PathFile);
HttpContext.Current.Cache.Insert(cacheKey,objDataSet.Tables[0].DefaultView,dp,DateTime.MaxValue, TimeSpan.Zero);
}
return (DataView)HttpContext.Current.Cache[cacheKey];
}
后台这样为下拉菜单绑定数据
drp_language.DataSource = MultLanuage.ResourceManager.GetSupportedLanguages();
drp_language.DataTextField = “name”;
drp_language.DataValueField = “key”;
drp_language.DataBind();
二—————————————
如果项目中有用到母版+导航制作的框架,那就很郁闷!
我是想到了通过配置配置文件,根据session加载不同语言的sitemap文件
不知道大家有没有更好的推荐一下!
thank you~!!!!!!!!!
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1744933

赞(0) 打赏
分享到: 更多 (0)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏