[连载]《C#通讯(串口和网络)框架的设计与实现》- 13.中英文版本切换设计
2016-01-13 22:56
459 查看
目 录
第十三章 中英文版本切换设计... 2
13.1 不用自带的资源文件的理由... 2
13.2 配置文件... 2
13.3 语言管理类... 3
13.4 应用管理类... 12
13.5 小结... 12
//设置成英文版本
Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("en-us");
但是,软件涉及到多线程、线程池、异步等应用的时候,当前线程设置了英文版本,其他线程还是默认的语言文化,例如:主线程设置了en-US,但是新建线程和其他已经存在的线程还是zh-CN,如果各部分UI不在同一线程更新的话,语言文化的设置是不一样的,所以没有办法实现统一的语言显示。
那么,可不可以通过进程获得所有线程信息,统一进行设置语言文化信息呢,的确是一个很好的想法。但是,通过实践证明这是行不能的,可能造反软件异常退出。为什么会出现这个现象呢?我猜想,一个进程中不仅包括自定义的线程,还存在系统级的线程,这样操作是一件危险的事。
难道就没有办法实现了吗?人不可能被尿憋死。在.NET 4.5中就简单多了,直接使用System.Globalization命名空间内CultureInfo类型的 DefaultThreadCurrentCulture和DefaultThreadCurrentUICulture属性。设置好后,每一个新线程的 CurrentUICulture和CurrentCulture属性都会和这个值保持一致的。CultureInfo类具体怎么实现的,还没有研究过。
为了兼容XP操作系统,还在使用.NET4.0的框架。相信也可以实现CultureInfo类的功能,但是不如自己设计一套语言版本方案更直接、更省时间。有时间的情况下可以研究一下CultureInfo类的实现。
Key的定义有两种方式,第一种:窗体命名.控件命名,可以对窗体的控件统一改变显示的语言信息。第二种:直接定义关键字,可以对提示信息、状态信息等单独词条改变显示的语言信息。Value就是最终要显示语言的具体内容,完全自定义。
定义一个设置语言属性的枚举。代码如下:
开发一个语言管理类库,本质上是根据语言配置文件对Dictionary<string, string>字典缓存进行操作。实现代码如下:
作者:唯笑志在
Email:504547114@qq.com
QQ:504547114
.NET开发技术联盟:54256083
文档下载:http://pan.baidu.com/s/1pJ7lZWf
官方网址:http://www.bmpj.net
第十三章 中英文版本切换设计... 2
13.1 不用自带的资源文件的理由... 2
13.2 配置文件... 2
13.3 语言管理类... 3
13.4 应用管理类... 12
13.5 小结... 12
第十三章 中英文版本切换设计
13.1 不用自带的资源文件的理由
可以利用resx资源文件进行多语言设计,resx文件本身是kv类型的资源文件,设计好资源文件后,启动软件时可以通过CurrentCulture属性设置要显示的语言。实现代码如下://设置成英文版本
Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("en-us");
但是,软件涉及到多线程、线程池、异步等应用的时候,当前线程设置了英文版本,其他线程还是默认的语言文化,例如:主线程设置了en-US,但是新建线程和其他已经存在的线程还是zh-CN,如果各部分UI不在同一线程更新的话,语言文化的设置是不一样的,所以没有办法实现统一的语言显示。
那么,可不可以通过进程获得所有线程信息,统一进行设置语言文化信息呢,的确是一个很好的想法。但是,通过实践证明这是行不能的,可能造反软件异常退出。为什么会出现这个现象呢?我猜想,一个进程中不仅包括自定义的线程,还存在系统级的线程,这样操作是一件危险的事。
难道就没有办法实现了吗?人不可能被尿憋死。在.NET 4.5中就简单多了,直接使用System.Globalization命名空间内CultureInfo类型的 DefaultThreadCurrentCulture和DefaultThreadCurrentUICulture属性。设置好后,每一个新线程的 CurrentUICulture和CurrentCulture属性都会和这个值保持一致的。CultureInfo类具体怎么实现的,还没有研究过。
为了兼容XP操作系统,还在使用.NET4.0的框架。相信也可以实现CultureInfo类的功能,但是不如自己设计一套语言版本方案更直接、更省时间。有时间的情况下可以研究一下CultureInfo类的实现。
13.2 配置文件
先设计语言配置文件,文件格式采用XML,存储方式采用KV的方式,文件命名可以自定义,例如:cn.xml、en.xml。如下图:Key的定义有两种方式,第一种:窗体命名.控件命名,可以对窗体的控件统一改变显示的语言信息。第二种:直接定义关键字,可以对提示信息、状态信息等单独词条改变显示的语言信息。Value就是最终要显示语言的具体内容,完全自定义。
13.3 语言管理类
定义一个词条对应的可序列化的类。代码如下:13.4 应用管理类
在软件启动时可以使用CultureMananger管理类,具体应用代码如下:13.5 小结
这是一个小的工具组件,具有一定的通用性。作者:唯笑志在
Email:504547114@qq.com
QQ:504547114
.NET开发技术联盟:54256083
文档下载:http://pan.baidu.com/s/1pJ7lZWf
官方网址:http://www.bmpj.net
相关文章推荐
- [连载]《C#通讯(串口和网络)框架的设计与实现》- 12.二次开发及应用
- [连载]《C#通讯(串口和网络)框架的设计与实现》- 11.调试器的设计
- [连载]《C#通讯(串口和网络)框架的设计与实现》- 10.宿主程序详细设计
- [连载]《C#通讯(串口和网络)框架的设计与实现》- 9.插件引擎设计
- [连载]《C#通讯(串口和网络)框架的设计与实现》- 8.总体控制器的设计
- [连载]《C#通讯(串口和网络)框架的设计与实现》- 7.外部接口的设计
- [连载]《C#通讯(串口和网络)框架的设计与实现》- 6.通讯控制器的设计
- [连载]《C#通讯(串口和网络)框架的设计与实现》- 5.串口和网络统一IO设计
- [连载]《C#通讯(串口和网络)框架的设计与实现》-4.设备驱动管理器的设计
- https服务器(CentOS 6)搭建&测试
- HTTP状态码
- 主机字节序列和网络字节序列
- WebKit之Chromium加载网络加速初步研究
- JSP报错:The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path
- CentOS6中httpd-2.2配置(1)
- webserver报XFireFault: Unmarshalling Error: unexpected element (uri:"http://server.m/", loc
- iOS 网络请求数据两种请求方式GET,POST
- TCP和UDP都是端到端的协议吗
- POJ 3281 Dining (dinic+拆点)
- 一个完美封装AFNetworking的网络请求Demo