DevExpress 开发经验总结2 DevExpress汉化之WinForm开发模式汉化
DevExpress控件库默认安装后,使用的本地资源为英文。Developer Express .NET产品都有本地化资源,比如按钮属性,控件属性描述,菜单项,确认和错误的信息等等,所有这些资源字符串可以很容易地被翻译成各种语言。对于要求使用中文汉字资源的项目来说,首要任务就是处理汉化。
在WinForm开发模式下,处理汉化相对简单。有以下几种方法。
对于早期的DevExpress版本,已经有制作好的汉化资源DLL,例如:基于v13.1的汉化文件“Dxper.LocalizationCHS.Win.v13.1.5.dll”,使用起来非常方便,将其复制到项目中使用即可。
使用方法:引用 Dxper.LocalizationCHS.Win.v13.1.5.dll文件,并在窗体Form_Load事件中添加以下代码。仅适用于WinForm。
1 DevExpress.XtraGrid.Localization.GridResLocalizer.Active = new
2 Dxper.LocalizationCHS.Win.XtraGridCHS();
3
4 DevExpress.XtraEditors.Controls.Localizer.Active = new
5 Dxper.LocalizationCHS.Win.XtraEditorsCHS();
6
7 DevExpress.XtraCharts.Localization.ChartResLocalizer.Active = new Dxper.LocalizationCHS.Win.XtraChartsCHS();
8
9 DevExpress.XtraBars.Localization.BarLocalizer.Active = new
10 Dxper.LocalizationCHS.Win.XtraBars();
11
12 DevExpress.XtraLayout.Localization.LayoutLocalizer.Active = new Dxper.LocalizationCHS.Win.XtraLayoutCHS();
13
14 DevExpress.XtraPrinting.Localization.PreviewLocalizer.Active = new Dxper.LocalizationCHS.Win.XtraPrintingCHS();
15
16 DevExpress.XtraTreeList.Localization.TreeListResLocalizer.Active = new Dxper.LocalizationCHS.Win.XtraTreeListCHS();
17
18 DevExpress.Office.Localization.OfficeResLocalizer.Active = new
19 Dxper.LocalizationCHS.Win.OfficeCHS();
20
21 DevExpress.XtraSpreadsheet.Localization.XtraSpreadsheetLocalizer.Active = new Dxper.LocalizationCHS.Win.XtraSpreadsheetCHS();
然而此类汉化包同步更新速度较慢,当使用高版本DevExpress时就无法使用了。
使用高版本的DevExpress后,需要使用官方的汉化资源文件。到官方下载汉化包后,打开目录,看到汉化文件是一系列的独立资源类,它对应着不同的控件汉化内容
以上是DevExpress控件库的全部汉化资源,我们不需要全部复制,根据项目的实际使用的控件,找到对应控件的汉化资源,按需复制。
红色框内即为项目中实际使用的控件(可能有更多其他引用),找到对应控件的汉化资源,将其拷贝到DevExpress安装目录D:\Program Files (x86)\DevExpress 14.1\Components\Bin\Framework(视具体安装路径)
以上操作完成后,在程序入口函数中,注册该资源文件:
Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("zh-cn"); //加载汉化语言包
当项目安装部署,制作安装包时,同样需要以上汉化资源(后续文章会详细讲解基于DevExpress控件库开发项目的安装包制作过程)。如果是直接拷贝项目到其他机器上运行,需要把zh-cn目录拷贝到项目中才能正常运行。
即使做了以上汉化,有些资源还是显示为英文
此消息提示框是按照方法二汉化后,在程序中运行的实际效果。其中按钮的显示文字汉化不成功,仍然为英文。
为了解决该问题,请参考方法三。
每一个DevExpress组件或者库都有其相对应的本地化类。步骤为:
1、创建一个子类继承相对应的本地化基类;
2、重载GetLocalizedString方法,这方法应该返回字符串的具体字符串资源标识符;
3、调用该类,实例化对应类的静态Active属性。
以XtraTreeList控件为例说明:
1 /// <summary> 2 /// 自定义DevExpress汉化资源,汉化XtraTreeList控件 3 /// </summary> 4 public class CustomLocalizedXtraTreeList : TreeListLocalizer 5 { 6 /// <summary> 7 /// 重写GetLocalizedString方法 8 /// </summary> 9 /// <param name="id">StringId</param> 10 /// <returns></returns> 11 public override string GetLocalizedString(TreeListStringId id) 12 { 13 switch (id) 14 { 15 case TreeListStringId.MenuColumnBestFit: 16 return "最佳匹配"; 17 case TreeListStringId.PrintDesignerHeader: 18 return "打印设置"; 19 case TreeListStringId.ColumnCustomizationText: 20 return "自定义"; 21 case TreeListStringId.MenuFooterMin: 22 return "最小值"; 23 case TreeListStringId.MenuFooterMax: 24 return "最大值"; 25 case TreeListStringId.MenuFooterSum: 26 return "和"; 27 case TreeListStringId.MenuFooterAllNodes: 28 return "所有节点"; 29 case TreeListStringId.MenuFooterCount: 30 return "计数"; 31 case TreeListStringId.MenuColumnSortAscending: 32 return "升序排列"; 33 case TreeListStringId.MenuFooterNone: 34 return "无"; 35 case TreeListStringId.MenuColumnSortDescending: 36 return "降序排列"; 37 case TreeListStringId.PrintDesignerDescription: 38 return "为当前的树状列表设置不同的打印选项"; 39 case TreeListStringId.MenuColumnBestFitAllColumns: 40 return "最佳匹配 (所有列)"; 41 case TreeListStringId.MenuFooterAverageFormat: 42 return "平均值={0:#.##}"; 43 case TreeListStringId.ColumnNamePrefix: 44 return "列"; 45 case TreeListStringId.MenuFooterMinFormat: 46 return "最小值={0}"; 47 case TreeListStringId.MenuFooterCountFormat: 48 return "{0}"; 49 case TreeListStringId.MenuColumnColumnCustomization: 50 return "列选择"; 51 case TreeListStringId.MenuFooterMaxFormat: 52 return "最大值={0}"; 53 case TreeListStringId.MenuFooterSumFormat: 54 return "和={0:#.##}"; 55 case TreeListStringId.MultiSelectMethodNotSupported: 56 return "OptionsBehavior.MultiSelect未激活时,指定方法不能工作."; 57 case TreeListStringId.InvalidNodeExceptionText: 58 return " 要修正当前值吗?"; 59 case TreeListStringId.MenuFooterAverage: 60 return "平均值"; 61 } 62 63 return base.GetLocalizedString(id); 64 } 65 }
其他控件的自定义汉化方式与以上相同,我自己汉化了XtraBar控件、XtraEditor控件、XtraGrid控件、XtraLayout控件、XtraNavBar控件、XtraTreeList控件、XtraVerticalGrid控件,如下图:
为了统一调用,封装了一个方法
最后在项目的入口函数或者窗体的Load事件中调用一次:
CustomDevExpressLocalizationCHS.SetSimpleChinese();方法即可实现自定义的汉化资源。
在项目中引用自定义汉化资源后,消息提示框如下:
按钮上的文字显示为汉字了,此时才算是真正的汉化。
由于无法上传附件,需要自定义汉化代码的朋友请加入.Net技术交流与分享群427789286,自行下载文件《DotNetLib.DevExpress.rar》。
成在管理,败在经验;嬴在选择,输在不学! 贵在坚持!
个人作品
BIMFace.SDK.NET
开源地址:https://gitee.com/NAlps/BIMFace.SDK
系列博客:https://www.cnblogs.com/SavionZhang/p/11424431.html
系列视频:https://www.cnblogs.com/SavionZhang/p/14258393.html
技术栈
1、Visual Studio、.NET Core/.NET、MVC、Web API、RESTful API、gRPC、SignalR、Java、Python
2、jQuery、Vue.js、Bootstrap、ElementUI
3、数据库:分库分表、读写分离、SQLServer、MySQL、PostgreSQL、Redis、MongoDB、ElasticSearch、达梦DM
4、架构:DDD、ABP、SpringBoot、jFinal
5、环境:跨平台、Windows、Linux、Nginx
6、移动App:Android、IOS、HarmonyOS、微信小程序、钉钉、uni-app、MAUI
分布式、高并发、云原生、微服务、Docker、CI/CD、DevOps、K8S;Dapr、RabbitMQ、Kafka、RPC、Elasticsearch。
欢迎关注作者头条号 张传宁IT讲堂,获取更多IT文章、视频等优质内容。
出处:www.cnblogs.com/SavionZhang
作者:张传宁 技术顾问、培训讲师、微软MCP、系统架构设计师、系统集成项目管理工程师、科技部创新工程师。
专注于企业级通用开发平台、工作流引擎、自动化项目(代码)生成器、SOA 、DDD、 云原生(Docker、微服务、DevOps、CI/CD);PDF、CAD、BIM 审图等研究与应用。
多次参与电子政务、图书教育、生产制造等企业级大型项目研发与管理工作。
熟悉中小企业软件开发过程:可行调研、需求分析、架构设计、编码测试、实施部署、项目管理。通过技术与管理帮助中小企业实现互联网转型升级全流程解决方案。
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
如有问题,可以通过邮件905442693@qq.com联系。共同交流、互相学习。
如果您觉得文章对您有帮助,请点击文章右下角【推荐】。您的鼓励是作者持续创作的最大动力!