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。
DevExpress.XtraGrid.Localization.GridResLocalizer.Active = new
Dxper.LocalizationCHS.Win.XtraGridCHS(); DevExpress.XtraEditors.Controls.Localizer.Active = new
Dxper.LocalizationCHS.Win.XtraEditorsCHS(); DevExpress.XtraCharts.Localization.ChartResLocalizer.Active = new Dxper.LocalizationCHS.Win.XtraChartsCHS(); DevExpress.XtraBars.Localization.BarLocalizer.Active = new
Dxper.LocalizationCHS.Win.XtraBars(); DevExpress.XtraLayout.Localization.LayoutLocalizer.Active = new Dxper.LocalizationCHS.Win.XtraLayoutCHS(); DevExpress.XtraPrinting.Localization.PreviewLocalizer.Active = new Dxper.LocalizationCHS.Win.XtraPrintingCHS(); DevExpress.XtraTreeList.Localization.TreeListResLocalizer.Active = new Dxper.LocalizationCHS.Win.XtraTreeListCHS(); DevExpress.Office.Localization.OfficeResLocalizer.Active = new
Dxper.LocalizationCHS.Win.OfficeCHS(); 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控件为例说明:
/// <summary>
/// 自定义DevExpress汉化资源,汉化XtraTreeList控件
/// </summary>
public class CustomLocalizedXtraTreeList : TreeListLocalizer
{
/// <summary>
/// 重写GetLocalizedString方法
/// </summary>
/// <param name="id">StringId</param>
/// <returns></returns>
public override string GetLocalizedString(TreeListStringId id)
{
switch (id)
{
case TreeListStringId.MenuColumnBestFit:
return "最佳匹配";
case TreeListStringId.PrintDesignerHeader:
return "打印设置";
case TreeListStringId.ColumnCustomizationText:
return "自定义";
case TreeListStringId.MenuFooterMin:
return "最小值";
case TreeListStringId.MenuFooterMax:
return "最大值";
case TreeListStringId.MenuFooterSum:
return "和";
case TreeListStringId.MenuFooterAllNodes:
return "所有节点";
case TreeListStringId.MenuFooterCount:
return "计数";
case TreeListStringId.MenuColumnSortAscending:
return "升序排列";
case TreeListStringId.MenuFooterNone:
return "无";
case TreeListStringId.MenuColumnSortDescending:
return "降序排列";
case TreeListStringId.PrintDesignerDescription:
return "为当前的树状列表设置不同的打印选项";
case TreeListStringId.MenuColumnBestFitAllColumns:
return "最佳匹配 (所有列)";
case TreeListStringId.MenuFooterAverageFormat:
return "平均值={0:#.##}";
case TreeListStringId.ColumnNamePrefix:
return "列";
case TreeListStringId.MenuFooterMinFormat:
return "最小值={0}";
case TreeListStringId.MenuFooterCountFormat:
return "{0}";
case TreeListStringId.MenuColumnColumnCustomization:
return "列选择";
case TreeListStringId.MenuFooterMaxFormat:
return "最大值={0}";
case TreeListStringId.MenuFooterSumFormat:
return "和={0:#.##}";
case TreeListStringId.MultiSelectMethodNotSupported:
return "OptionsBehavior.MultiSelect未激活时,指定方法不能工作.";
case TreeListStringId.InvalidNodeExceptionText:
return " 要修正当前值吗?";
case TreeListStringId.MenuFooterAverage:
return "平均值";
} return base.GetLocalizedString(id);
}
}
展开查看代码
其他控件的自定义汉化方式与以上相同,我自己汉化了XtraBar控件、XtraEditor控件、XtraGrid控件、XtraLayout控件、XtraNavBar控件、XtraTreeList控件、XtraVerticalGrid控件,如下图:
为了统一调用,封装了一个方法
最后在项目的入口函数或者窗体的Load事件中调用一次:
CustomDevExpressLocalizationCHS.SetSimpleChinese();方法即可实现自定义的汉化资源。
在项目中引用自定义汉化资源后,消息提示框如下:
按钮上的文字显示为汉字了,此时才算是真正的汉化。
由于无法上传附件,需要自定义汉化代码的朋友请加入.Net技术交流与分享群427789286,自行下载文件《DotNetLib.DevExpress.rar》。
DevExpress控件库 开发使用经验总结2 DevExpress汉化之WinForm开发模式汉化的更多相关文章
-
DevExpress控件库 开发使用经验总结1 DevExpress简介、安装、使用
2015-01-24 最近公司开发的WinForm客户端图书行业ERP管理系统,界面端采用了DevExpress控件库.界面效果非常绚丽,类似于Office2007.2010的界面风格. 其中的控件功 ...
-
DevExpress控件库 开发使用经验总结3 制作项目安装包
2015-01-27 使用DevExpress控件包开发C/S项目完成后,部署前需要制作本地安装包.本文还是使用“SetupFactory”安装工厂来制作安装包.在以前的系列文章中详细介绍过该工具的使 ...
-
Winform DevExpress控件库(一) DevExpress控件库的安装与新建第一个DevExpress项目
前言:因为这段时间要接触到DevExpress控件库,而我本身甚至对winform的控件都了解甚少,所以处在学习中,写下博客主要是为了方便后期的回顾,当然也可以给一些新人第一次接触时做为学习的参考,以 ...
-
WPF Devexpress 控件库中ChartControl 实现股票分时走势图
概要 从事金融行业开发 ,会接触些图表控件,这里我分享一下自己基于DevExpress.Charts.v16.2开发的股票分时走势图的经验. 附上源码:点击跳转 如果需要讨论,Q群:580749909 ...
-
Winform DevExpress控件库(二) 使用SplashScreenManager控件定制程序加载页面
SplashScreenManager控件:主要作用是显示在进行耗时操作时的等待界面: 位于 工具箱 -> Navigation & Layout(导航栏与布局类控件) 目录下: 在工具 ...
-
Winform DevExpress控件库(三) 使用NavBarControl控件定制导航栏
NavBarControl控件:主要作用是制作包含多个选项组并且每个组里包含多个子选项的导航栏: 位于 工具箱 -> Navigation & Layout(导航栏与布局类控件) 目录下 ...
-
WPF Devexpress控件库中ChartControl--实现不等距x轴
一.概要 解决问题--ChartControl不等距x轴显示 二.CS代码 用过ChartControl的开发者们应该都知道,ChartControl中设置x轴间距间隔都是固定的数值. 比如(间隔10 ...
-
【转】DevExpress控件安装
原文链接: DevExpress控件安装.汉化使用教程 - 田园里的蟋蟀 学习网址: 1.DevExpress控件中文网 2.DevExpress控件中文网使用教程 3.DevExpress控件使用经 ...
-
DevExpress控件开发常用要点(项目总结版)
使用DevExpress控件来做项目开发已经有很长一段时间了,在摸索开发到客户苛刻要求的过程中,其中碰到过很多问题需要解决的,随着一个个问题的解决,也留下很多对DevExpress控件的使用经验及教训 ...
随机推荐
-
如何用ABBYY把PDF如何转换成HTML
将PDF转换成HTML网页格式,是快速打造专业级网站的方法之一.当用户找到了非常详实的PDF资料,打算将之制作成为网页格式时,如果重新开发往往需要耗费大量的时间,可是又不知道怎么样才可以将PDF文件转 ...
-
Bigcommerce:安装的出错解决方案
我们在本地安装时报错了,具体如下: 1. The database details you entered are incorrect: You have an error in your SQL s ...
-
Oracle 序列 CACHE 值必须小于 CYCLE 值的解决方法
之前创建sequence时碰到一个问题, 当我使用了cache时总是提示CACHE 值必须小于 CYCLE 值,查了下文档,找到这么一个公式 文档的大概意思是cache的值必须要小于通过这个公式计算得 ...
-
爬虫实践---悦音台mv排行榜与简单反爬虫技术应用
由于要抓取的是悦音台mv的排行榜,这个排行榜是实时更新的,如果要求不停地抓取,这将有可能导致悦音台官方采用反爬虫的技术将ip给封掉.所以这里要应用一些反爬虫相关知识. 目标网址:http://vcha ...
-
阿里云API网关(5)用户指南(调用 API)
网关指南: https://help.aliyun.com/document_detail/29487.html?spm=5176.doc48835.6.550.23Oqbl 网关控制台: https ...
-
echarts切换tab时,第一个图表显示,第二个图表不显示的解决办法
首先这种情况,我在网上看到了好多人问,确实也有正解,但是只是说出了其错误出现的原因,并没有给出解决方法. 我也是深受其害,所以呢,在这里记录一下,分享给还在困扰着的你们,迅速找出解决办法. 首先,我先 ...
-
[微信跳转链接]之WAP跳转微信内指定页面
由于微信覆盖太全面了,几乎所有人都使用微信APP,但是对于做产品的公司来说,所有的产品几乎都离不开微信的推广,然而微信属于封闭式的一个社交应用,大部分只能在今日头条,百度,等等...如果你在推广页面上 ...
-
numpy nan值的判断
我发现在数据处理中非常常见的就是nan值的判断,筛选数据尤为常见, 判断数据是否为nan,前提是np.float类型数组,但在应用于对象数组时会引发TypeError # 返回bool类型 np.is ...
-
【父元素parent】【子元素children】【同胞siblings】【过滤】
1.父元素 $("span").parent() //定位到span的父元素 $("span").parents() // ...
-
并发编程 —— 自己写一个异步回调 API
1. 前言 在并发编程中,异步回调的效率不言而喻,在业务开发中,如果由阻塞的任务需要执行,必然要使用异步线程.并且,如果我们想在异步执行之后,根据他的结果执行一些动作. JDK 8 之前的 Futur ...