DevExpress控件汉化教程详解
所有Developer Express .NET产品都有本地化资源,比如按钮属性,控件属性描述,菜单项,确认和错误的信息等等,所有这些资源字符串可以很容易地被翻译成各种语言。
先看下面汉化前后的图片:
| 汉化前 | 汉化后 |
|
|
|
如何实现上述的汉化呢?Dev汉化总结下来一般分三种形式:一种是利用已经汉化好的资源包;一种是使用本地对象类,利用代码汉化;还有就是资源包和代码结合。下面我们就这三种情况的实现方法和各自的利弊做一详细的讲解。
一、利用资源包汉化
一、如何使用资源包进行汉化
首先,您需下载现有的资源包(资源包汉化由慧都科技提供,下载链接地址www.devexpress.com/kb=A421)将所需的汉化的资源zh-CHS中国 (简体) 、zh-CN中国 (中国)、zh-TW 中国 (台湾)拷贝到执行目录下。利用CurrentThread.CurrentUICulture加载资源包。参照代码如下:
Code
1static void Main()
2{
3 System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("zh-CHS");
4 Application.Run(new Form1());
5}
6
二、如何修改资源包
资源包有一个跟Dev组件同样的强名密钥文件StrongKey.snk。如果你想编译资源文件,你可以做到这一点,只要你拥有组件完整的源代码,重新指定强名密钥文件,获得自己的StrongKey.snk。具体实现可查阅MSDN Library。
1、 拷贝StrongKey.snk从安装的源代码的目录"Program Files"Developer Express .NET vX.Y"Sources"DevExpress.Key" 到当前资源包的DevExpress.Key目录。(vX.Y为当前安装版本号)
2、 打开资源包Localization.sln工程,根据下面提及的使用本地化方法找出要汉化的属性,当然如果你购买了源代码也可以查看源代码Localization类里面的本地化方法列出的变量来实现你需要的汉化。
3、 重新生成资源文件,这时对应的Dll将在DevExpress.DLL文件夹中。
注:利用现有资源包汉化使用简单,运用也最普遍,但因目前汉化的资源不全,往往会修改资源包。然而StrongKey.snk强名密钥文件商家不可能提供,因为那是他们的签名。如果在没有自己StrongKey.snk的情况下重新编译资源包,那只能将自己修改好的资源文件,借助于商家来帮助重新编译。
二、使用本地对象汉化
每一个Dev组件或者库都有其相对应的本地化类。其实本地化的过程很简单,首先创建一个子类继承相对应的本地化基类(参照下面表),重载GetLocalizedString方法,这方法应该返回字符串的具体字符串资源标识符。其次,就是调用该类,实例化对应类的静态Active属性。
| Control | Class |
| XtraBars | DevExpress.XtraBars.Localization.BarLocalizer |
| XtraCharts | DevExpress.XtraCharts.Localization.ChartLocalizer |
| XtraEditors Library | DevExpress.XtraEditors.Controls.Localizer |
| XtraGrid | DevExpress.XtraGrid.Localization.GridLocalizer |
| XtraLayout | DevExpress.XtraLayout.Localization.LayoutLocalizer |
| XtraNavBar | DevExpress.XtraNavBar.NavBarLocalizer |
| XtraPrinting Library | DevExpress.XtraPrinting.Localization.PreviewLocalizer |
| XtraPivotGrid | DevExpress.XtraPivotGrid.Localization.PivotGridLocalizer |
| XtraReports | DevExpress.XtraReports.Localization.ReportLocalizer |
| XtraScheduler | DevExpress.XtraScheduler.Localization.SchedulerLocalizer |
| XtraSpellChecker | DevExpress.XtraSpellChecker.Localization.SpellCheckerLocalizer |
| XtraTreeList | DevExpress.XtraTreeList.Localization.TreeListLocalizer |
| XtraVerticalGrid | DevExpress.XtraVerticalGrid.Localization.VGridLocalizer |
具体代码实现:
一、实现上述汉化,您需要在代码中添加如下代码:
代码汉化
public class ChEditLocalizer : Localizer
{ // 重载 GetLocalizedString 方法
public override string GetLocalizedString(StringId id)
{ switch (id)
{ // PictureEdit 菜单汉化
case StringId.PictureEditMenuCut: return "剪切";
case StringId.PictureEditMenuCopy: return "复制";
case StringId.PictureEditMenuPaste: return "粘贴";
case StringId.PictureEditMenuDelete: return "删除";
case StringId.PictureEditMenuLoad: return "加载";
case StringId.PictureEditMenuSave: return "保存";
// TextEdit 菜单汉化
case StringId.TextEditMenuCut: return "剪切";
case StringId.TextEditMenuCopy: return "复制";
case StringId.TextEditMenuPaste: return "粘贴";
case StringId.TextEditMenuDelete: return "删除";
case StringId.TextEditMenuSelectAll: return "全选";
case StringId.TextEditMenuUndo: return "返回";
// DateEdit 控件汉化
case StringId.DateEditToday: return "今天";
case StringId.DateEditClear: return "取消";
}
return "";
}
}
public class MyTreeListLocalizer : TreeListLocalizer
{
public override string GetLocalizedString(TreeListStringId id)
{
switch (id)
{
//TreeList列菜单汉化
case TreeListStringId.MenuColumnSortAscending: return "升序";
case TreeListStringId.MenuColumnSortDescending: return "升序";
case TreeListStringId.MenuColumnBestFit: return "固定列";
case TreeListStringId.MenuColumnBestFitAllColumns: return "固定所有列";
case TreeListStringId.MenuColumnColumnCustomization: return "自定义列";
}
return "";
}
}
二、一旦ChEditLocalizer和MyTreeListLocalizer被创建你能设定对应的Active,实现方法参照如下:
Active
private void Form1_Load(object sender, EventArgs e)
{
Localizer.Active = new ChEditLocalizer();
TreeListLocalizer.Active = new MyTreeListLocalizer();
}
注:代码汉化可以让用户自定汉化内容,但一旦重载GetLocalizedString方法,就必须对整个对象类汉化,代码量较大。当然,如果您只想对局部属性进行汉化,其他的保留英语,你可以在返回为空的代码:
return "";修改为return base.GetLocalizedString(id);
三、资源包与代码结合
这种方法介于上述两种方法之间,既使用了资源包,减少了代码汉化的工作量,又在资源包没有满足汉化的基础上修改追加汉化,但仍然存在比如XtraEditors资源包中有复制与粘贴汉化调换了,就必须对整个Localizer类的成员进行汉化的情况。具体实现可在应用程序初期化时同时追加下面代码:
Code
System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("zh-CHS");
Localizer.Active = new ChEditLocalizer();
补充:如果你购买了源代码,并且有自己的StrongKey.snk强名密钥文件,那么直接在对应的控件源代码中修改GetLocalizedString的每一个返回值,使用重新编译源代码的Dll文件来达到直接汉化的目的,但同样会花费很大的工作量。
DevExpress控件汉化教程详解的更多相关文章
- DevExpress 控件汉化代码和使用方法
DevExpress 第三方控件汉化的全部代码和使用方法 DevExpress.XtraEditors.Controls 此控件包中包含的控件最多,包括文本框,下拉列表,按钮,等等 ...
- DevExpress 控件汉化方法
Ø 简介 本文介绍下 DevExpress 控件的汉化方法,对于英文不怎么好的同学来说,还是非常有必要的.DevExpress 汉化分为运行时汉化,和设计时汉化. 1. 运行时汉化 1) 首 ...
- DevExpress控件汉化类 z
更新了一些字段,VER9.3.3 using System; using DevExpress.XtraEditors.Controls; using DevExpress.XtraGrid.Loca ...
- 《Android群英传》读书笔记 (2) 第三章 控件架构与自定义控件详解 + 第四章 ListView使用技巧 + 第五章 Scroll分析
第三章 Android控件架构与自定义控件详解 1.Android控件架构下图是UI界面架构图,每个Activity都有一个Window对象,通常是由PhoneWindow类来实现的.PhoneWin ...
- DevExpress的Web控件汉化方法
原文:DevExpress的Web控件汉化方法 项目中用到devexpress的web控件,机器没有安装devexpress控件,直接在项目中引用的dev的dll,项目运行时发现都是英文界面,所以解决 ...
- VB6.0中WinSock控件属性和方法详解
原文链接:http://liweibird.blog.51cto.com/631764/653134 WinSock控件能够通过UDP协议(用户数据报协议)或TCP协议(数据传输协议)连接到远程的机器 ...
- ASP.NET验证控件应用实例与详解。
ASP.NET公有六种验证控件,分别如下: 控件名 功能描叙 1RequiredFieldValidator(必须字段验证) 用于检查是否有输入值 2CompareValidator(比 ...
- 第二章 控件架构与自定义控件详解 + ListView使用技巧 + Scroll分析
1.Android控件架构下图是UI界面架构图,每个Activity都有一个Window对象,通常是由PhoneWindow类来实现的.PhoneWindow将DecorView作为整个应用窗口的根V ...
- jquery网页日历显示控件calendar3.1使用详解
关于日历插件,我做了好多次尝试,一直致力于开发一款简单易用的日历控件.我的想法是争取在引用这个控件后,用一行js代码就能做出一个日历,若在加点参数,就能自定义外观和功能丰富多彩的日历.Calendar ...
随机推荐
- .net序列化
在开发过程中,会遇到很多需要使用序列化的场景,比如wcf,webservice或者jquery+.net等.那今天就说说我对序列化的理解. 在.net中有几种序列化的方式,XML.二进制.SOAP.还 ...
- Luogu2149 [SDOI2009]Elaxia的路线-最短路+拓扑排序
Solution 另外$ m <=5e5$. 两条最短路的 最长公共路径 一定是若干条连续的边, 并且满足拓扑序. 于是我们分别 正向 和反向走第二条路径,若该条边同时是两条最短路径上的边, 则 ...
- 01. pt-align
01. pt-align pt-align xxx.txt =========================================== pt-align对齐输出格式 name city a ...
- VS Installer教程
本文主要讲解利用VS2010下的Visual Studio Installer打包Zigbee程序(VS2010编写)的过程. 1.打开Zigbee程序,在解决方案中添加“新建项目”-->其他项 ...
- Spring 注解驱动(二)Servlet 3.0 注解驱动在 Spring MVC 中的应用
Spring 注解驱动(二)Servlet 3.0 注解驱动在 Spring MVC 中的应用 Spring 系列目录(https://www.cnblogs.com/binarylei/p/1019 ...
- Maximum Average Subarray II LT644
Given an array consisting of n integers, find the contiguous subarray whose length is greater than o ...
- JavaScript调用wcf服务,并且处理返回的字典集合
1.第一步创建wcf服务的方法 using System;using System.Collections.Generic;using System.Linq;using System.Runtime ...
- RNA-Seq数据去接头(Adapter)
1.adapter是一段短的序列已知的核酸链,用于链接序列未知的目标测序片段. 2.barcode,也称为index,是一段很短的寡居核酸链,用于在多个样品混合测序时,标记不同的样品. 3.inser ...
- 2019.01.02 poj3046 Ant Counting(生成函数+dp)
传送门 生成函数基础题. 题意:给出nnn个数以及它们的数量,求从所有数中选出i∣i∈[L,R]i|i\in[L,R]i∣i∈[L,R]个数来可能组成的集合的数量. 直接构造生成函数然后乘起来f(x) ...
- Win10通知区域图标设置;windows10系统图标合并;Windows10系统通知合并
1.一直喜欢Windows7的通知图标合并 2.通过查阅找到方法 a.输入命令语句 win+R :shell:::{05d7b0f4-2121-4eff-bf6b-ed3f69b894d9} 回 ...

