前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >DevExpress 开发经验总结2 DevExpress汉化之WinForm开发模式汉化

DevExpress 开发经验总结2 DevExpress汉化之WinForm开发模式汉化

作者头像
张传宁IT讲堂
发布2019-09-17 17:30:14
2.5K0
发布2019-09-17 17:30:14
举报

  DevExpress控件库默认安装后,使用的本地资源为英文。Developer Express .NET产品都有本地化资源,比如按钮属性,控件属性描述,菜单项,确认和错误的信息等等,所有这些资源字符串可以很容易地被翻译成各种语言。对于要求使用中文汉字资源的项目来说,首要任务就是处理汉化。

  在WinForm开发模式下,处理汉化相对简单。有以下几种方法。

方法一:使用已经制作完成的汉化资源DLL

  对于早期的DevExpress版本,已经有制作好的汉化资源DLL,例如:基于v13.1的汉化文件“Dxper.LocalizationCHS.Win.v13.1.5.dll”,使用起来非常方便,将其复制到项目中使用即可。

  使用方法:引用 Dxper.LocalizationCHS.Win.v13.1.5.dll文件,并在窗体Form_Load事件中添加以下代码。仅适用于WinForm。

代码语言:javascript
复制
 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官方汉化资源DLL

  使用高版本的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控件为例说明:

代码语言:javascript
复制
 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》。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-03-15 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档