zoukankan      html  css  js  c++  java
  • 用c#创建支持多语言的WinForm应用程序

    实现多语言的方法可能有使用资源文件,或者配置xml两种方法吧。
    没时间研究过多,学习了一下使用资源文件的方法,成功了。


    在.net2.0 中,m$ 为我们提供了一种简单方便的方法, 使用资源文件

    1.新建一个 Winform. 应用程序, 新建一 Form. ,名为 Form1,添加一个菜单一个按钮。如图

    2. 设置 Form1 的 Localizable 属性为 true, 设置该属性后,.net 将根据不同的语言,为应用程序生成不同的资源文件
    3.设置各个控件的文本(系统默认语言下)
    4.更改 Form1 的 Language 属性为想要支持的另一种语言,此例中我们选用 English
    5.重新设置各个控件的文本
     注:此时.net 将为 Form1 生成另一个资源文件,在本例中名为 Form1.en.resx
    当你需要添加新的控件时,需要切换到default语言。
    6. 如果有其它的语言要设置,请重复第4,第5步
    7.编写代码 (需要消息框多语言支持的话,就用form做消息框吧。同时也做成多语言支持。)

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;

    using System.Threading;
    using System.Globalization;

    namespace GlobalResource
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }

            private void button1_Click(object sender, EventArgs e)
            {
                Msg msg = new Msg();
                msg.ShowDialog();
            }

            private void 退出ToolStripMenuItem_Click(object sender, EventArgs e)
            {
                Application.Exit();
            }

            private void 中文ToolStripMenuItem_Click(object sender, EventArgs e)
            {
                //更改当前线程的 CultureInfo
                //zh-CN 为中文,更多的关于 Culture 的字符串请查 MSDN
                Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("zh-CN");
                //对当前窗体应用更改后的资源
                ApplyResource();
            }

            private void 英文ToolStripMenuItem_Click(object sender, EventArgs e)
            {
                //更改当前线程的 CultureInfo
                //en 为英文,更多的关于 Culture 的字符串请查 MSDN
                Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("en");
                //对当前窗体应用更改后的资源
                ApplyResource();
            }
            /// 
            /// 应用资源
            /// ApplyResources 的第一个参数为要设置的控件
            ///                  第二个参数为在资源文件中的ID,默认为控件的名称
            /// 
            private void ApplyResource()
            {
                System.ComponentModel.ComponentResourceManager res = new ComponentResourceManager(typeof(Form1));
                foreach (Control ctl in Controls)
                {
                    res.ApplyResources(ctl, ctl.Name);
                }

                //菜单
                foreach (ToolStripMenuItem item in this.menuStrip1.Items)
                {
                    res.ApplyResources(item, item.Name);
                    foreach (ToolStripMenuItem subItem in item.DropDownItems)
                    {
                        res.ApplyResources(subItem, subItem.Name);
                    }
                }

                //Caption
                res.ApplyResources(this, "$this");
            }
        }
    }

     判断操作系统语言的方法:

    private void Form1_Load(object sender, EventArgs e)
    {
        //不需要判断操作系统的语言,使用资源文件会自动选择。
        //if (System.Globalization.CultureInfo.InstalledUICulture.Name == "zh-CN")
        //{
        //    Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("zh-CN");
        //    //对当前窗体应用更改后的资源
        //    ApplyResource();
        //}
        //else
        //{
        //    Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("en");
        //    //对当前窗体应用更改后的资源
        //    ApplyResource();
        //}
    }

    源码下载:http://files.cnblogs.com/greatverve/GlobalResource.rar

  • 相关阅读:
    程序基址,X64Dbg软件常用调试技巧查找系统函数调用位置执行到指定位置断点
    #pragma的常用方法讲解,为什么有了条件编译符号“DEBUG”还要来个Debugger.IsAttached
    JDK17Src0.java.base
    nmon的安装和使用
    64位下的相对指令地址X86指令格式(操作码列和指令列解释)
    内存中的程序剖析
    Linux I/O 原理和 Zerocopy 技术全面揭秘
    Ubuntu命令行的垃圾箱,回收站
    SecureCRT密钥链接阿里云
    HTTP API 认证授权术
  • 原文地址:https://www.cnblogs.com/guojingmail2009/p/4949162.html
Copyright © 2011-2022 走看看