我的作法为:
1.我先作个首页,
<form id="form1" runat="server" >
<div >
<asp:Label ID="lanuage" runat="server" >Label </asp:Label >
<asp:DropDownList ID="drp_language" runat="server" AutoPostBack="True" OnSelectedIndexChanged="drp_language_SelectedIndexChanged"
Width="152px" >
</asp:DropDownList >
<asp:Button ID="btnLogon" runat="server" Text="Button" OnClick="btnLogon_Click" / > </div >
</form > 后台:
public partial class index : System.Web.UI.Page
{
public static string strName; protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
init();
} }
private void init()
{
drp_language.DataSource = TangramMiniWeb.ResourceManager.GetSupportedLanguages();
drp_language.DataTextField = "name";
drp_language.DataValueField = "key";
drp_language.DataBind(); if (drp_language.Items.Count > 0)
{
strName = drp_language.SelectedValue;
ShowText(drp_language.Items[0].Value);
}
}
private void ShowText(string userlanguage)
{
btnLogon.Text = TangramMiniWeb.ResourceManager.GetString("GO", userlanguage);
//strName = btnLogon.Text = MultLanuage.ResourceManager.GetString("btnLogon", userlanguage);
lanuage.Text = TangramMiniWeb.ResourceManager.GetString("lanuage", userlanguage); }
protected void drp_language_SelectedIndexChanged(object sender, EventArgs e)
{
ShowText(drp_language.SelectedValue);
strName = drp_language.SelectedValue;
}
protected void btnLogon_Click(object sender, EventArgs e)
{
Session["selectvalue"] = drp_language.SelectedValue.ToString();
Response.Redirect("tan/Default.aspx");
}
} 2.还写了个语言的基类:
public class ResourceManager
{ public ResourceManager()
{
// }
public static string GetString(string name,string userLanguages)
{
//通过指定属性名返回包含此属性名相关信息的hash表
Hashtable source=LoadSorce(userLanguages);
if (source != null)
{
//不为空就返回其值
return source[name].ToString();
}
else
{
//为空
return "";
} }
//获取语言目录数据,返回一个数据视图
public static DataView GetSupportedLanguages()
{
string cacheKey = "Languages";
//判断当前数据缓存中是否为空
if(HttpContext.Current.Cache[cacheKey]==null)
{
//获取xml文件存放的物理路径
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]; }
//获取语言语句字典 public static Hashtable LoadSorce(string userLanguages)
{
//获取xml文件存放的物理路径
string PathFile=System.Web.HttpContext.Current.Server.MapPath(HttpContext.Current.Request.ApplicationPath+"/Languages/"+userLanguages+"/Resources.xml");
//建一个XML DOCUMENT的实例对象
System.Xml.XmlDocument LagXml=new XmlDocument();
//导入要操作的XML文件
LagXml.Load(PathFile);
//
Hashtable supportedLanguages;
//建立HASHTABLE的对象实例
supportedLanguages = new Hashtable();
//遍历XML文件中的所有子节点
foreach (XmlNode n in LagXml.SelectSingleNode("root").ChildNodes)
{
if (n.NodeType != XmlNodeType.Comment)
{
//把子节点的键/值对添加到hashtable中
supportedLanguages.Add(n.Attributes["name"].Value,n.InnerText);
} }
//返回hashtable
return supportedLanguages;
}
} 3.写了个XML的中文和英文的RESOUTCES.XML,当我选择英文时,根据设置读取英文网页的XML资源文件中定义的标签文字就行了吧。我选择英文了,就用那个XML文件 ID相同的英文标识来替换网页中相同的ID标记呀。
这个小测试是成功的。
4.我现在要把全站都用中文和英文业显示,那方法为
就拿一个about.aspx这个网页来说吧,我说我的个人方法
先作完about.aspx的中文页面,然后调用我那个语言的基类,再写这个about.aspx的XML的2种语言的XML的文件吗。 最后每一个页面都要这样完成吗,方法正确吗请各位老哥,老姐,先生女士 小姐们指出? 谢谢
1.我先作个首页,
<form id="form1" runat="server" >
<div >
<asp:Label ID="lanuage" runat="server" >Label </asp:Label >
<asp:DropDownList ID="drp_language" runat="server" AutoPostBack="True" OnSelectedIndexChanged="drp_language_SelectedIndexChanged"
Width="152px" >
</asp:DropDownList >
<asp:Button ID="btnLogon" runat="server" Text="Button" OnClick="btnLogon_Click" / > </div >
</form > 后台:
public partial class index : System.Web.UI.Page
{
public static string strName; protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
init();
} }
private void init()
{
drp_language.DataSource = TangramMiniWeb.ResourceManager.GetSupportedLanguages();
drp_language.DataTextField = "name";
drp_language.DataValueField = "key";
drp_language.DataBind(); if (drp_language.Items.Count > 0)
{
strName = drp_language.SelectedValue;
ShowText(drp_language.Items[0].Value);
}
}
private void ShowText(string userlanguage)
{
btnLogon.Text = TangramMiniWeb.ResourceManager.GetString("GO", userlanguage);
//strName = btnLogon.Text = MultLanuage.ResourceManager.GetString("btnLogon", userlanguage);
lanuage.Text = TangramMiniWeb.ResourceManager.GetString("lanuage", userlanguage); }
protected void drp_language_SelectedIndexChanged(object sender, EventArgs e)
{
ShowText(drp_language.SelectedValue);
strName = drp_language.SelectedValue;
}
protected void btnLogon_Click(object sender, EventArgs e)
{
Session["selectvalue"] = drp_language.SelectedValue.ToString();
Response.Redirect("tan/Default.aspx");
}
} 2.还写了个语言的基类:
public class ResourceManager
{ public ResourceManager()
{
// }
public static string GetString(string name,string userLanguages)
{
//通过指定属性名返回包含此属性名相关信息的hash表
Hashtable source=LoadSorce(userLanguages);
if (source != null)
{
//不为空就返回其值
return source[name].ToString();
}
else
{
//为空
return "";
} }
//获取语言目录数据,返回一个数据视图
public static DataView GetSupportedLanguages()
{
string cacheKey = "Languages";
//判断当前数据缓存中是否为空
if(HttpContext.Current.Cache[cacheKey]==null)
{
//获取xml文件存放的物理路径
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]; }
//获取语言语句字典 public static Hashtable LoadSorce(string userLanguages)
{
//获取xml文件存放的物理路径
string PathFile=System.Web.HttpContext.Current.Server.MapPath(HttpContext.Current.Request.ApplicationPath+"/Languages/"+userLanguages+"/Resources.xml");
//建一个XML DOCUMENT的实例对象
System.Xml.XmlDocument LagXml=new XmlDocument();
//导入要操作的XML文件
LagXml.Load(PathFile);
//
Hashtable supportedLanguages;
//建立HASHTABLE的对象实例
supportedLanguages = new Hashtable();
//遍历XML文件中的所有子节点
foreach (XmlNode n in LagXml.SelectSingleNode("root").ChildNodes)
{
if (n.NodeType != XmlNodeType.Comment)
{
//把子节点的键/值对添加到hashtable中
supportedLanguages.Add(n.Attributes["name"].Value,n.InnerText);
} }
//返回hashtable
return supportedLanguages;
}
} 3.写了个XML的中文和英文的RESOUTCES.XML,当我选择英文时,根据设置读取英文网页的XML资源文件中定义的标签文字就行了吧。我选择英文了,就用那个XML文件 ID相同的英文标识来替换网页中相同的ID标记呀。
这个小测试是成功的。
4.我现在要把全站都用中文和英文业显示,那方法为
就拿一个about.aspx这个网页来说吧,我说我的个人方法
先作完about.aspx的中文页面,然后调用我那个语言的基类,再写这个about.aspx的XML的2种语言的XML的文件吗。 最后每一个页面都要这样完成吗,方法正确吗请各位老哥,老姐,先生女士 小姐们指出? 谢谢
见了<>头就大