最近想做一个用C#.net 编写 windows 应用程序,实现动态多语言功能,想用XML文件作为语言包,请问哪里有代码可以下载么?

解决方案 »

  1.   

    那麻烦您能让我看看么,我从网上看到一篇文章,但是代码不全。多谢了!!我是一个C#新手。
    XmlNodeList nodelist = root.SelectNodes("Area[Language='" + lang + "/List/Item");
    这个语句有什么错误啊,我运行出错
      

  2.   

    下面是我的源代码,也是从别的地方copy下来的,自己修改了一些,但是现在有问题啊。
    运行的时候可以从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);
            }
        }
    }
      

  3.   

    .net的ResourceManager已经提供了相同的功能了,它可以直接读取不同的资源文件(xml),来显示不同的语言.你就不需要自己去实现类似的功能了.
      

  4.   

    翻译过类似的文章,供参考
    使用WMFL实现可配置Windows窗体
    http://blog.csdn.net/zhzuo/archive/2004/06/23/23913.aspx
      

  5.   

    可是老板让我用C# + xml做,我实在是一个C#新手,那位老大给我个具体例子,让我参考一下?