科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道C#的Windows编程中多语言的实现之二

C#的Windows编程中多语言的实现之二

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

     我们把一个窗体中要实现多语言显示的控件的名称全都放在<Controls></Controls>中,name指的是控件的Name属性,而text指的是控件的Text属性

作者:中国IT实验室 来源:中国IT实验室 2007年9月11日

关键字: Windows C# 编程

  • 评论
  • 分享微博
  • 分享邮件
¡¡¡¡

  ¡¡¡¡ÎÒÃÇ°ÑÒ»¸ö´°ÌåÖÐҪʵÏÖ¶àÓïÑÔÏÔʾµÄ¿Ø¼þµÄÃû³ÆÈ«¶¼·ÅÔÚ£¼Controls£¾£¼/Controls£¾ÖУ¬nameÖ¸µÄÊǿؼþµÄNameÊôÐÔ£¬¶øtextÖ¸µÄÊǿؼþµÄTextÊôÐÔ¡£
  
  ¡¡¡¡¶ÁÈ¡µÄº¯ÊýÈçÏ£º
  
  /// £¼summary£¾
  /// ¶ÁÈ¡¶àÓïÑÔµÄ×ÊÔ´Îļþ
  /// £¼/summary£¾
  /// £¼param name="frmName"£¾´°ÌåµÄName£¼/param£¾
  /// £¼param name="lang"£¾ÒªÏÔʾµÄÓïÑÔ(ÈçZH»ò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;
  }
  
  ¡¡¡¡µÚËIJ½£ºÏÔʾÏàÓ¦µÄÖµ
  
  ¡¡¡¡ÎÒÃÇ¿ÉÒÔÔÚÿ¸ö´°ÌåµÄLoad()ʼþÖУ¬µ÷ÓÃÏàÓ¦µÄº¯Êý£¬À´ÊµÏÖÕâ¸ö¹¦ÄÜ¡£µ±È»£¬ÎÒÃÇÊ×ÏȱØÐëÏÈ£¬»ñµÃÕâ¸ö´°ÌåÒªÏÔʾµÄÓïÑԵĴúÂë(ÈçEN»òZH)£¬¸ÃÖµ¿ÉÒÔ´æ·ÅÔÚÒ»¸ö"È«¾Ö"±äÁ¿ÖÐ(±ÈÈç°Ñֵͨ¹ýGlobal.SetValue("lang",langugae)´æÈ룬ͨ¹ýGlobal.GetValue("lang")È¡³ö)¡£
  
  /// £¼summary£¾
  /// »ñÈ¡¿Ø¼þµÄÃû³Æ
  /// £¼/summary£¾
  /// £¼param name="form"£¾£¼/param£¾
  public static void getNames(Form form)
  {
  
  ¡¡//¸ù¾ÝÓû§Ñ¡ÔñµÄÓïÑÔ»ñµÃ±íµÄÏÔʾÎÄ×Ö
  ¡¡Hashtable table = ¡¡¡¡AppConfig.ReadResource(form.Name,Global.GetValue("lang").ToString());
  ¡¡Control.ControlCollection controlNames = form.Controls;
  ¡¡//¿ÉÒÔÔÚÕâÀïÉèÖô°ÌåµÄһЩͳһµÄÊôÐÔ£¬ÕâÑùËùÓеĴ°Ì嶼»áÓ¦ÓøÃÉèÖÃ
  ¡¡// form.KeyPreview = true;
  ¡¡// form.MaximizeBox = false;
  ¡¡// form.MinimizeBox = false;
  ¡¡// form.ControlBox = false;
  ¡¡// form.FormBorderStyle = FormBorderStyle.FixedDialog;
  ¡¡// form.StartPosition = FormStartPosition.CenterScreen;
  ¡¡// form.TopMost = true;
  ¡¡// form.KeyDown += new KeyEventHandler(OnEnter);
  ¡¡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(control.GetType() == typeof(System.Windows.Forms.TextBox) && control.Enabled)
  ¡¡¡¡¡¡// control.GotFocus += new EventHandler(Txt_Focus);
  
  ¡¡¡¡¡¡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());
  }
  
  ¡¡¡¡ÒòΪÓÐЩ¿Ø¼þÆäÄÚ²¿»¹ÓÐ×ӿؼþ£¬ËùÒÔÎÒÃÇ»¹ÒªÓиö¶ÁÈ¡¿Ø¼þÖÐ×ӿؼþµÄÏÔʾֵµÄº¯Êý¡£
  
  /// £¼summary£¾
  /// »ñµÃ×ӿؼþµÄÏÔʾÃû
  /// £¼/summary£¾
  /// £¼param name="controls"£¾£¼/param£¾
  /// £¼param name="table"£¾£¼/param£¾
  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()];
  ¡¡}
  }

²é¿´±¾ÎÄÀ´Ô´

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章