• 用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();
            }
            
    /// <summary>
            
    /// 应用资源
            
    /// ApplyResources 的第一个参数为要设置的控件
            
    ///                  第二个参数为在资源文件中的ID,默认为控件的名称
            
    /// </summary>
            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();
        
    //}
    }

     

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

  • 相关阅读:
    Thinkphp注释
    THINKPHP5 如何在 控制器内调用model模型
    thinkphp5路由定义
    Thinkphp5读取当前config配置文件
    thinkphp5计算代码块的性能
    thinkphp的执行流程
    php filter过滤器
    nginx在收到stop信号后的处理
    寻找重复数
    奶牛和公牛
  • 原文地址:https://www.cnblogs.com/top5/p/1938172.html
Copyright © 2020-2023  润新知