最近想做一个用C#.net 编写 windows 应用程序,实现动态多语言功能,想用XML文件作为语言包,请问哪里有代码可以下载么?
解决方案 »
- dateTimePicker1里的日期如何和数据库里的比较?
- 有没有一种散列集合可以添加重复的KEY
- C# 100分求助在访问客户端的机器IE上打开自己的asp页面
- index.aspx页面用了iframe,iframe指向a.aspx页面。a.aspx页面处理后如何刷新index.aspx页。
- 为什么反射只能得到公有的属性,却得不到基类的私有字段、属性?
- picturebox的内存为什么不断增加?
- 打包问题请教
- 如何用C#按照指定时刻获取outlook中邮件的正文和附件。
- 问一个线程的简单问题
- 100 分求,在 98 下装 VS.NET 的详细步骤 !
- 服务器提示403.1错误:未经授权:访问由于 ACL 对所请求资源的设置被拒绝
- 问个关于文件操作的题目!
XmlNodeList nodelist = root.SelectNodes("Area[Language='" + lang + "/List/Item");
这个语句有什么错误啊,我运行出错
运行的时候可以从xml文件中取出对应的值,但是就是不能显示到对应的button上,怎么回事啊?是不是需要设置什么东西?多谢,
namespace mulLan
{
public partial class Demo : Form
{
public Demo()
{
InitializeComponent();
}
/*********************** derrick language *****************/
//read default language
public static string ReadDefaultLanguage()
{
XmlReader reader = new XmlTextReader("resources/LanguageDefine.xml");
XmlDocument doc = new XmlDocument();
doc.Load(reader);
XmlNode root = doc.DocumentElement;
//select DefaultLangugae node
XmlNode node = root.SelectSingleNode("DefaultLanguage"); string result = node.Value;
if (node != null)
//get node's context
result = node.InnerText; reader.Close();
return result;
} //modify default language
public static void WriteDefaultLanguage(string lang)
{
DataSet ds = new DataSet();
ds.ReadXml("resources/LanguageDefine.xml");
DataTable dt = ds.Tables["Language"]; dt.Rows[0]["DefaultLanguage"] = lang;
ds.AcceptChanges();
ds.WriteXml("resources/LanguageDefine.xml");
} //read AppConfig.xml file
public static IList GetLanguageList(string lang)
{
IList result = new ArrayList(); XmlReader reader = new XmlTextReader("resources/AppConfig.xml");
XmlDocument doc = new XmlDocument();
doc.Load(reader); XmlNode root = doc.DocumentElement;
XmlNodeList nodelist = root.SelectNodes("Area[Language='" + lang + "']/List/Item");
foreach (XmlNode node in nodelist)
{
result.Add(node.InnerText);
}
reader.Close(); return result;
} /// <summary></summary>
/// read multi language file
/// </summary>
/// <param name="frmName">Form Name</param>
/// <param name="lang">will display language(zh or en)</param>
/// <returns></returns>
public static Hashtable ReadResource(string frmName, string lang)
{
Hashtable result = new Hashtable(); XmlReader reader = null;
FileInfo fi = new FileInfo("resources/AppResource_" + lang + ".xml");
if (!fi.Exists)
reader = new XmlTextReader("resources/AppResource.xml");
else
reader = new XmlTextReader("resources/AppResource_" + lang + ".xml"); XmlDocument doc = new XmlDocument();
doc.Load(reader); XmlNode root = doc.DocumentElement;
XmlNodeList nodelist = root.SelectNodes("Form[Name='" + frmName + "']/Controls/Control");
foreach (XmlNode node in nodelist)
{
try
{
XmlNode node1 = node.SelectSingleNode("@name");
XmlNode node2 = node.SelectSingleNode("@text");
if (node1 != null)
{
result.Add(node1.InnerText.ToLower(), node2.InnerText);
}
}
catch (FormatException fe)
{
Console.WriteLine(fe.ToString());
}
}
reader.Close();
return result;
}
public static void getNames(Form form)
{
//Hashtable table = AppConfig.ReadResource(form.Name,Global.GetValue("lang").ToString());
Hashtable table = ReadResource(form.Name, "ZH");
Control.ControlCollection controlNames = form.Controls;
try
{
foreach (Control control in controlNames)
{
if (control.GetType() == typeof(System.Windows.Forms.Panel))
GetSubControls(control.Controls, table); if (control.GetType() == typeof(System.Windows.Forms.GroupBox))
GetSubControls(control.Controls, table); if (table.Contains(control.Name.ToLower()))
control.Text = (string)table[control.Name.ToLower()];
}
if (table.Contains(form.Name.ToLower()))
form.Text = (string)table[form.Name.ToLower()];
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
} private static void GetSubControls(Control.ControlCollection controls, Hashtable table)
{
foreach (Control control in controls)
{
if (control.GetType() == typeof(System.Windows.Forms.Panel))
GetSubControls(control.Controls, table); if (control.GetType() == typeof(System.Windows.Forms.GroupBox))
GetSubControls(control.Controls, table); if (table.Contains(control.Name.ToLower()))
control.Text = (string)table[control.Name.ToLower()];
}
} /*********************** end derrick language *****************/
private void Demo_Load(object sender, EventArgs e)
{
IList list;
//Hashtable resourceFile;
Demo form = new Demo(); string Language; Language = ReadDefaultLanguage();
list = Demo.GetLanguageList(Language);
comLanguage.DataSource = list;
comLanguage.Text = Language; getNames(form);
} private void Default_Click(object sender, EventArgs e)
{
int strB;
string Language;
Language = comLanguage.Text;
strB = Language.IndexOf('[');
Language = Language.Substring(strB + 1, 2);
Demo.WriteDefaultLanguage(Language);
}
}
}
使用WMFL实现可配置Windows窗体
http://blog.csdn.net/zhzuo/archive/2004/06/23/23913.aspx