分享两种实现Winform程序的多语言支持的多种解决方案

2019-12-30 16:21:04王旭

二次封装这些控件的目的是:1.暴露统一的属性,便于直接遍历并赋值(需手动改变文本内容语言的情况);2.当文本内容发生改变时,能够根据语言缓存字典,快速直接的自我简繁转换,无需再次遍历;

四、实现支持多语言容器控件:基于原有标准控件(StatusStrip,TabPage,ToolStrip,DataGridView,CheckedListBox,TreeView)进行二次封装,实现IMultiLanguageContainerControl接口,各控件代码如下:

MyStyleDataGridView:

由于代码过长,请点击下载

MyStyleTabControl:

由于代码过长,请点击下载

二次封装这些控件的目的是:1.暴露统一的属性,便于直接遍历并赋值(仅当直接改变文本内容语言时需要);2.当文本内容或子控件文本内容或新增子控件发生改变时,能够根据语言缓存字典,快速直接的自我简繁转换,无需再次遍历;

五.LanguageHelper:语方转换公共类,与方案一原理相同,但相对方案一要简单很多,代码如下:

由于代码过长,请点击下载

Common.IsChsLanguage方法定义如下:


public static bool IsChsLanguage()

{

 return System.Threading.Thread.CurrentThread.CurrentUICulture.Name.Equals("zh-CHS", StringComparison.OrdinalIgnoreCase);

} 

多语言支持的容器类控件的实现难点是:捕获子控件文本内容的改变,由于没有现成的事件或方法,故需要通过其它的途径来实现文本内容改时能够进行处理。

以上就是本文的全部内容,有人可能会说,为何不采用资源文件的形式,原因文章一开头就说明了,是在原有的系统上,且不能改变原有的编码风格,故才花了这么大的力气来实现这个简繁转换的功能,我公司经领导确认最终采用的方案二。文中若有不足,欢迎交流,谢谢!

注:控件的实现代码都贴出来了,大家若需要的话,可以直接COPY走,另外为了系统安全,简繁体的系统截图我就不贴出来了,大家可以自行测试。


注:相关教程知识阅读请移步到c#教程频道。