代码改变世界

Winform支持多语言解决方案!(总结)

2012-01-27 21:56  robinli  阅读(957)  评论(0编辑  收藏  举报

一直做窗体应用程序,前段时间客户提出,要求系统支持多语言切换功能的需求。

具体需求

1、系统登录时记录系统当前的语言状态。

2、系统在运行过程中可以随时切换系统的语言。

3、在中、英、韩三种语言进行切换。

解决方案一:

1、登录窗口与主系统分开。

2、登录系统时选择系统语言。

3、根据所选择的系统语言加载相应的系统。

注:此解决方案需要一个登录界面,以及中、英、韩三种语言的系统各一个。

解决方案二:

资源文件解决法:

1、制作一个winfrom界面时,设计界面下所有控件均增添完毕(如下图)。

2、选择当前Form,设计->Language,由当前Default选择我们需要的语言种类(如下图)。

3、在英文语言状态下编辑窗口的具体信息(如下图)。

 

4、上述操作完成之后,在FORM的解决方案下多了一个资源文件(如下图)。

焦点资源文件就是在我们在英文状态下设计之后系统自动生成的资源文件。

5、重复以上操作在中文、韩文状态下将界面设计完毕,VS将会生成中文、韩文的资源文件。

以上操作界面设计任务完毕。

实现三种语言的切换:我们引进一个LanguageChange类:

 1 Class langugeChange
2 {
3 public static void setLang(string lang,Form form,Type frmType)
4 {
5 Thread.CurrentThread.CurrentUICulture=new System.Globalization.CultureInfo(lang);
6 if(from!=null)
7 {
8 ComponentResourceManager resoures=new ComponentResourceManager(frmtype);
9 resources.ApplyResources(form,"$this");
10 AppLang(form,resources);
11 }
12 }
13 private static void AppLang(Control control,ComponentResourceManager resources)
14 {
15 foreach(Control c in control.Controls)
16 {
17 resources.ApplyResources(c,c.Name);
18 AppLang(c,resources);
19 }
20 }
21 }

在窗体加载过程中,调用LanguageChange类中的方法,实现需要加载的系统语言。

在实际的编写代码,以及设计过程中,我们为了方便设计,购买了一些功能强大、外观漂亮的控件,有些控件并不是Control下的,所有这些控件需要单独考虑例如。devexpress下的BarManager控件,在为此控件做多语言切换时,在语言切换类中需要单独考虑此情况。

有些控件具有层数,这边所谓的层数是控件中还会包含分支;举个例子MenuStrip-->TooStripMenuTtem这就是控件中包含分支,在对分支的处理还要进行递归。