C# WinForm国际化的简单实现建议收藏

软件行业发展到今天,国际化问题一直都占据非常重要的位置,而且应该越来越被重视。对于开发人员而言,在编写程序之前,国际化问题是首先要考虑的一个问题,也许有时候这个问题已经在设计者的考虑范围之内,但终归要

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

全栈程序员社区此处内容已经被作者隐藏,请输入验证码查看内容
验证码:
请关注本站微信公众号,回复“验证码”,获取验证码。在微信里搜索“全栈程序员社区”或者“www_javaforall_cn”或者微信扫描右侧二维码都可以关注本站微信公众号。

软件行业发展到今天,国际化问题一直都占据非常重要的位置,而且应该越来越被重视。对于开发人员而言,在编写程序之前,国际化问题是首先要考虑的一个问题,也许有时候这个问题已经在设计者的考虑范围之内,但终归要开发人员去做实现的。因此,如何实现国际化,是开发人员必须掌握的一项基本技能。
    今天,这里要讲的就是,在利用C#进行WinForm开发时,国际化是怎么实现的。鉴于时间及篇幅关系,这里仅仅介绍一种简单的国际化实现方法,可能这里提到的方法已经有非常多人提到过,但笔者还是不厌其烦地介绍一下。
    要在C#中实现国际化,需要相关资源文件,比如要在一个软件中支持英文、中文两种语言,那么就必须有这两种语言的资源文件,这在C#中可以采用资源文件(后缀名为.resx)来实现,我们不妨定义英文资源文件名称为Resource.en-US,中文资源文件名称为Resource.zh-CN,两种资源文件所涉及的ID都应该是一样的(这对于其他更多的资源文件均是一样的),只不过是展示的名称不同罢了。
    有了这两种资源文件,接下来就要考虑如何做的问题了。为了适应多处使用的情形,这里笔者单独编写了一个类ResourceCulture,该类包含了一些静态方法,主要作用是用来设置当前语言及返回当前的语言的相关字符串。该类代码如下:

 1 using System.Reflection;
 2 using System.Resources;
 3 using System.Threading;
 4 using System.Globalization;
 5 
 6 namespace GlobalizationTest
 7 {
 8     class ResourceCulture
 9     {
10         /// <summary>
11         /// Set current culture by name
12         /// </summary>
13         /// <param name="name">name</param>
14         public static void SetCurrentCulture(string name)
15         {
16             if (string.IsNullOrEmpty(name))
17             {
18                 name = "en-US";
19             }
20 
21             Thread.CurrentThread.CurrentCulture = new CultureInfo(name);
22         }
23 
24          //http://www.cnblogs.com/roucheng/
25         /// <summary>
26         /// Get string by id
27         /// </summary>
28         /// <param name="id">id</param>
29         /// <returns>current language string</returns>
30         public static string GetString(string id)
31         {
32             string strCurLanguage = "";
33 
34             try
35             {
36                 ResourceManager rm = new ResourceManager("GlobalizationTest.Resource", Assembly.GetExecutingAssembly());
37                 CultureInfo ci = Thread.CurrentThread.CurrentCulture;
38                 strCurLanguage = rm.GetString(id, ci);
39             }
40             catch
41             {
42                 strCurLanguage = "No id:" + id + ", please add.";
43             }
44 
45             return strCurLanguage;
46         }
47     }
48 }

在Form1中的代码如下:

 1 /**
 2  * This project is just a example to show how to do the globalization in C# winform.
 3  * You and rebuild and/or modify it by yourself if you want.
 4  * Specially, this project was created in Visual Studio 2010.
 5  *  http://www.cnblogs.com/roucheng/
 6  * Project Name : GlobalizationTest
 7  * Create Date  : April 29th, 2010
 8  * */
 9 
10 using System;
11 using System.Windows.Forms;
12 
13 namespace GlobalizationTest
14 {
15     public partial class Form1 : Form
16     {
17         public Form1()
18         {
19             InitializeComponent();
20         }
21 
22         /// <summary>
23         /// Set the resource culture
24         /// </summary>
25         private void SetResourceCulture()
26         {
27             // Set the form title text
28             this.Text = ResourceCulture.GetString("Form1_frmText");
29 
30             // Set the groupbox text
31             this.gbLanguageView.Text = ResourceCulture.GetString("Form1_gbLanguageViewText");
32             this.gbLanguageSelection.Text = ResourceCulture.GetString("Form1_gbLanguageSelectionText");
33 
34             // Set the label text
35             this.lblCurLanguageText.Text = ResourceCulture.GetString("Form1_lblCurLanguageText");
36             this.lblNameText.Text = ResourceCulture.GetString("Form1_lblNameText");
37             this.lblPhoneText.Text = ResourceCulture.GetString("Form1_lblPhoneText");    
38 
39             // Set the button text
40             this.btnMsgShow.Text = ResourceCulture.GetString("Form1_btnMsgShowText");
41 
42             // Set radiobutton text
43             this.rbEnglish.Text = ResourceCulture.GetString("Language_EnglishText");
44             this.rbChinese.Text = ResourceCulture.GetString("Language_ChineseText");
45 
46             // Set the current language text
47             if (rbEnglish.Checked)
48             {
49                 this.lblCurLanguage.Text = ResourceCulture.GetString("Language_EnglishText");
50             }
51             else if (rbChinese.Checked)
52             {
53                 this.lblCurLanguage.Text = ResourceCulture.GetString("Language_ChineseText");
54             }
55         }
56 
57         private void Form1_Load(object sender, EventArgs e)
58         {
59             // Set the default language
60             ResourceCulture.SetCurrentCulture("en-US");
61 
62             this.SetResourceCulture();
63         }
64 
65         private void btnMsgShow_Click(object sender, EventArgs e)
66         {
67             if(string.IsNullOrEmpty(txtName.Text))
68             {
69                 MessageBox.Show(ResourceCulture.GetString("Form1_msgbox_nameText"), ResourceCulture.GetString("Form1_msgbox_TitleText"), 
70                     MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
71                 return;
72             }
73 
74             if (string.IsNullOrEmpty(txtPhone.Text))
75             {
76                 MessageBox.Show(ResourceCulture.GetString("Form1_msgbox_phoneText"), ResourceCulture.GetString("Form1_msgbox_TitleText"), 
77                     MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
78                 return;
79             }
80 
81             MessageBox.Show(ResourceCulture.GetString("Form1_msgbox_InfoText") + txtName.Text + ", " + txtPhone.Text,
82                 ResourceCulture.GetString("Form1_msgbox_TitleText"), MessageBoxButtons.OK, MessageBoxIcon.Information);
83         }
84 
85         private void rbEnglish_CheckedChanged(object sender, EventArgs e)
86         {
87             ResourceCulture.SetCurrentCulture("en-US");
88             this.SetResourceCulture();
89         }
90 
91         private void rbChinese_CheckedChanged(object sender, EventArgs e)
92         {
93             ResourceCulture.SetCurrentCulture("zh-CN");
94             this.SetResourceCulture();
95         }
96     }
97 }

最终的效果如下图1和图2所示:
C# WinForm国际化的简单实现建议收藏
图1

C# WinForm国际化的简单实现建议收藏
图2

    归结起来,要在C#的WinForm中实现国际化,至少需要做好以下几点:
(1)准备所需资源文件(如本文中提到的英文和中文资源文件);
(2)引入命名空间(包括:System.Reflection、System.Resources、System.Threading和System.Globalization);
(3)实例化资源管理器(即ResourceManager);
(4)设置当前进程的语言区域;
(5)通过资源管理器从指定的资源文件中获取所需值。
    通过上述的方法即可简单实现国际化。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/120734.html原文链接:https://javaforall.net

(0)
上一篇 2021年12月20日 下午10:00
下一篇 2021年12月20日 下午11:00


相关推荐

  • Java 线程死锁及如何避免死锁介绍

    Java 线程死锁及如何避免死锁介绍死锁是指两个或两个以上的线程在执行过程中,**因争夺资源而造成的互相等待**的现象,在无外力作用的情况下,这些线程会一直相互等待而无法继续运行下去,

    2022年7月13日
    16
  • 计算机网络重点回顾

    计算机网络一.计算机网络概述计算机网络的概念:(*)1.计算机网络的定义:​ 计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路链接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。2.计算机网络的组成:终端系统/资源子网:提供共享的软件资源和硬件资源通信子网:提供信息交换的网络结点和通信线路。3.计算机网络的类型:按照拓朴分类:星型结构树形结构总线型结构环形结构网状结构按照范围分

    2022年4月9日
    44
  • pycharm正则替换小技巧

    pycharm正则替换小技巧在 django 开发过程中 可能遇到需要把 HTML 文件中的静态文件的路径全部替换为 django 模板引用路径的格式例如将 lt linkrel stylesheet type text css href static css reset css gt 中的 static css reset css 替换为 static css reset css 可以用到 pycharm 的

    2026年1月22日
    2
  • 初识数据库

    数据库初步认识什么是数据(Data)什么是数据库(DataBase简称DB)数据库分类:1.关系型数据库2.非关系型数据库关系型数据库:表和表之间相互关联可以建立表(即文件)关系型数

    2022年3月29日
    37
  • Java事务管理[通俗易懂]

    Java事务管理[通俗易懂]事务的ACID属性:原子性(Atomicity)、一致性(Consistency)、隔离性或独立性(Isolation)和持久性(Durabilily)一、Java事务管理Java事务管理有三种类型:JDBC事务、JTA(JavaTransactionAPI)事务、容器事务1.1JDBC事务JDBC的一切行为包括事务是基于一个Connection的,JDBC通过Connec…

    2022年10月9日
    5
  • arcgis不闭合线转面_ArcGIS线转面的方法

    arcgis不闭合线转面_ArcGIS线转面的方法ArcGIS 作为 GIS 软件中的龙头老大 其功能是非常强大的 但是如果作为一个初学者 其部分常用的重要功能不容易掌握 今天就讲一讲在矢量化时非常重要的功能 线转面 ArcGIS 在进行大范围的矢量化时一般很少直接画多边形 这是因为 shape 文件不具备拓扑 在处理多个相邻多边形时不方便 因此 一般是先用线把地类图斑勾绘出来 然后将线转为多边形 在 ArcGIS 中 将线转为多边形有三种方法 1 Featu

    2026年3月19日
    7

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号