以DevExpress开发的WinFrom程序的多语言功能的实现
以DevExpress开发的WinFrom程序的多语言功能的实现
写在前面:
多语言切换功能在Winform程序中是经常遇到的需求,尤其是需要给国外客户使用的情况下,多语言功能是必不可少的。前一段时间我也遇到了这个需求,在实现过程当中也遇到了很多问题。因为这个功能是相对很普遍的的,相信很多人都会遇到,所以我将实现方法梳理了一下,分享给大家!(非DevExpress开发也可以看一看)
需求拆分:
在Winform程序中需要进行多语言设置的字段主要来自于三个方面:
- 控件UI字段 eg: button.Text \colum.Caption
- 控件不可修改的UI字段 eg:wizardControl的Next,Last,Finish按钮以及XtraMessageBox提示框的确认按钮
- 代码中自定义的中文字符串 eg:提示信息 XtraMessageBox.Show(“格式错误”);
解决方法:
首先,设置当前线程、UI的语言的代码如下(以简体中文为例):
string language = "zh-CN";
// Create a new object, representing the German culture.
CultureInfo culture = CultureInfo.CreateSpecificCulture(language);
// The following line provides localization for the application's user interface.
Thread.CurrentThread.CurrentUICulture = culture;
// The following line provides localization for data formats.
Thread.CurrentThread.CurrentCulture = culture;
// Set this culture as the default culture for all threads in this application.
// Note: The following properties are supported in the .NET Framework 4.5+
CultureInfo.DefaultThreadCurrentCulture = culture;
CultureInfo.DefaultThreadCurrentUICulture = culture;
其次,针对以上三种需要进行多语言设置的地方,需要分别进行处理:
控件UI字段:切换Form的Language属性为目标语言,然后可以在页面上手动修改,保存后,项目目录下会自动生成一个Form.zh-CN.resx文件,打开便能看到刚刚所修改的字段。你可以手动修改该文件,与修改UI字段的效果是一样的。你也可以自己新建一个与默认语言资源文件同名的以zh-CN.resx为后缀的中文资源文件,在里面手动添加自己想修改的控件字段,就不用再通过设置Language属性进行修改了。

控件不可修改的UI字段(针对DevExpress):步骤一可以解决大部分控件上面显示的字段,但是在DevExpress控件中,有些地方是不能手动修改的,比如导航控件WizardControl的Next按钮,以及弹出提示框的确认按钮,此时需要借助DevExpress官方的资源包:
地址:https://localization.devexpress.com
添加一个Translation,选择自己使用的版本号以及目标语言后点击下载,对应的语言资源文件的压缩包会发送到邮箱,保存后解压到项目运行目录下对应的语言资源文件夹就可以了。


自定义字段:在代码中不可避免地会遇到自己定义的字符串,比如运行结果,报错提示等等,针对这种情况需要自己用文件将字段保存下来进行读取,在这里还是用.resx文件进行实现,用xml文件也可以,但是读取效率不高,也有暴露给用户的风险。
新建一个默认的资源文件CustomResource.resx和一个同名的CustomResource.zh-CN.resx在里面自己定义Key和Value,两个文件中对应的Key名称要一样且不能出现'.'符号。
想要读取自己定义的字段时,可以用以下方式进行读取:
ComponentResourceManager res = new ComponentResourceManager(typeof(CustomResource));
string str = res.GetString("strError");
str的值会由当前线程所设置的Culture的值而决定,如果为默认值,它会读取CustomResource.resx文件,如果为简体中文就会读取CustomResource.zh-CN.resx中strError所对应的值。
Note:不能将字段存放在控件默认的资源文件里,因为一旦对控件UI进行操作后,它将自动重写自己的资源文件,原本自己定义的字段都将被抹除。
希望对大家解决问题有所帮助,若内容有误请指正,有疑问可留言!
以DevExpress开发的WinFrom程序的多语言功能的实现的更多相关文章
- .net core 开发 Windows Forms 程序
我是一名 ASP.NET 程序员,专注于 B/S 项目开发.累计文章阅读量超过一千万,我的博客主页地址:https://www.itsvse.com/blog_xzz.html 引言 .net cor ...
- Linux系统中用DNW向ARM开发板下载程序
在Linux下通过dnw来给开发板发送程序.包括驱动程序代码:secbulk.c,应用程序代码:dnw.c.只能运行在32位系统上,在64位系统上提示错误:DNW download Data size ...
- electron之Windows下使用 html js css 开发桌面应用程序
1.atom/electron github: https://github.com/atom/electron 中文文档: https://github.com/atom/electron/tree ...
- 如何用TypeScript开发微信小程序
微信小程序来了!这个号称干掉传统app的玩意儿虽然目前处于内测阶段,不过目前在应用号的官方文档里已经放出了没有内测号也能使用的模拟器了. 工具和文档可以参考官方文档:https://mp.weixin ...
- 在Visual Studio上开发Node.js程序(2)——远程调试及发布到Azure
[题外话] 上次介绍了VS上开发Node.js的插件Node.js Tools for Visual Studio(NTVS),其提供了非常方便的开发和调试功能,当然很多情况下由于平台限制等原因需要在 ...
- 在Visual Studio上开发Node.js程序
[题外话] 最近准备用Node.js做些东西,于是找找看能否有Visual Studio上的插件以方便开发.结果还真找到了一个,来自微软的Node.js Tools for Visual Studio ...
- 怎么让我们自己开发的Android程序设为默认启动
怎么让我们自己开发的Android程序设为默认启动呢?其实很简单,只要在AndroidManifest.xml文件中配置一下首次启动的那个Activity即要. <activity ...
- iOS开发:保持程序在后台长时间运行
iOS开发:保持程序在后台长时间运行 2014 年 5 月 26 日 / NIVALXER / 0 COMMENTS iOS为了让设备尽量省电,减少不必要的开销,保持系统流畅,因而对后台机制采用墓碑式 ...
- Linux下使用Eclipse开发Hadoop应用程序
在前面一篇文章中介绍了如果在完全分布式的环境下搭建Hadoop0.20.2,现在就再利用这个环境完成开发. 首先用hadoop这个用户登录linux系统(hadoop用户在前面一篇文章中创建的),然后 ...
随机推荐
- IDEA + maven 零基础构建 java agent 项目
200316-IDEA + maven 零基础构建 java agent 项目 Java Agent(java 探针)虽说在 jdk1.5 之后就有了,但是对于绝大多数的业务开发 javaer 来说, ...
- PWM通过RC低通滤波器模拟DAC
当我们电路需要DAC而单片机并没有DAC外设时,则可采用PWM通过RC低通滤波器来模拟实现DAC功能. RC低通滤波器 当采用低通滤波器模拟DAC时,PWM频率应远大于RC低通滤波电路的截止频率fc= ...
- 算法:Z字型(Zigzag)编排
问题:给定 n 行和 m 列的二维数组矩阵.如图所示,以 ZIG-ZAG 方式打印此矩阵. 从对称的角度来看,通过反复施加滑行反射可以从简单的图案如线段产生规则的之字形. 主要思想:算法从(0, 0) ...
- .NET 生态系统的蜕变之 .NET 6
.NET 6 是自.NET 4 框架以来生态系统看到的最大版本更新,虽然.NET Core 是2014年开始非常大的一项重大战略举措,但是.NET 6是真正的具有强大动力的非常重要的版本. 2021年 ...
- linux切换shell
1. $SHELL这一环境变量用于保存当前用户使用的shell,所以我们可以输出$SHELL来查看当前使用的shell是什么: 2. 查看/etc/shells文件,可以看到当前系统中安装的有效的sh ...
- P2472 [SCOI2007]蜥蜴(最大流)
P2472 [SCOI2007]蜥蜴 自己第一道独立做题且一遍AC的网络流题纪念... 看到这道题我就想到网络流建图的方式了... 首先根据每个高度,我们将每个点拆成两个点限流.之后根据跳的最大距离, ...
- HTML基础强化
1.如何理解HTML? HTML类似于一份word"文档" 描述文档的"结构" 有区块和大纲 2.对WEB标准的理解? Web标准是由一系列标准组合而成.一个网 ...
- Vue脚手架最新版本安装使用
现在很多的插件如Vant 这类的样式框架,都去兼容了Vue的3.0版本,所以我总结一下如何去简单的搭建一个Vue3.0的框架 开始 一,如何安装 在这里说明一下,Vue脚手架版本,和Vue版本是两个东 ...
- Vue 基础自查——条件渲染和列表渲染
v-if和v-show的区别是什么? v-if和v-for为什么不能一起用? v-for中的key有什么作用? 1 v-if 和 v-show 1.1 作用 都用来控制元素的显示和隐藏 1.2 控制元 ...
- 如何用LOTO示波器安全的测量高电压?
本文里我们把几十伏以上,超出对人体安全电压或者超出示波器量程的电压定为高电压,以220V市电举例讨论. 示波器上是有方便自测和探头补偿用的标准方波的,一般是1K Hz.我们的USB示波器上也有这个标准 ...