本文主要阐述如何实现CE image的在多种语言之间的自由切换,这里我们假设我们的image需要在两种语言(简体中文和韩文)之间切换,并且已经有了一个支持一种语言的image。(本文中所介绍的设定以CE6.0为标准)
微软在CE的帮助文档中已经有一个主题介绍如何生成一个MUI的image,how to create a multilingual run-time image using MUI,这里主要调用createmui.bat来生成MUI image所需要的资源文件并把它们拷贝到release目录下,同时生成一个mutiui.bib的文件,按照帮助文档中的介绍我们需要手动的把mutiui.bib文件中的内容拷贝到common.bib中,其实我们可以利用fmerge.exe在批处理中自动的实现。
Createmui 0804 0412
在作这些操作之前我们还需要把另一种语言所需要的Fonts,Input Method Editor, Input Method 和 Keyborad加到我们的工程当中,它们位于Core OS-->CEBASE-->International-->Local Specific Support, 同时在Porject-->Properties-->Local-->Locals中勾上相应的语言支持,在做完这些之后,我们生成的image已经包含了对两种语言的支持,但是还不能实现两种语言的切换。这时启动CE系统打开控制面板中区域设置,点击用户界面语言在下拉框中应该能看到我们希望支持的两种语言,如果选择切换到另外一种语言,重新启动之后可能会有一些异常的现象,比如字体不能正常显示等等。下面我们来分析产生这些现象的原因。
产生这些现象的原因,其实就是相应的注册表项并没有及时地切换,比如区域,codepage,字体,输入法等,下面我就把具体需要更改的地方列出来(以韩文为例)。也许有人会问怎么得到这些具体的这册表项的,一个比较笨但也是比较可靠的办法就生成一个这样语言版本的image,从中把这些注册表项提取出来。当然所有这些还有一个前提条件就是image必须能够保存系统设置。
;; ###### User Locale ######
[HKEY_LOCAL_MACHINE/NLS]
"DefaultLCID"=dword:0412
; Add an extra locale-specific currency symbol (e.g. Euro)
[HKEY_LOCAL_MACHINE/nls]
"ExtraCurrency"=dword:20ac
;; ###### MUI setting ######
; MUI Register setttins :
; HKLM/MUI/Enable - enable MUI or not
; HKLM/MUI/SysLang - system default langid
; HKCU/MUI/CurLang - langid for current user
[HKEY_LOCAL_MACHINE/MUI]
; Update the enable field to enable MUI
; IF SYSGEN_MULTIUI
"Enable"=dword:1
[HKEY_LOCAL_MACHINE/MUI]
; Update the enable field to enable MUI
; Update the SysLang field to set system default langid
"SysLang"=dword:412
[HKEY_CURRENT_USER/MUI]
; Update the CurLang field to set user default langid
"CurLang"=dword:412
;; ###### Code Page and selection ######
[HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/International]
"LCID"=dword:412
"ACP"=dword:3b5
[HKEY_CURRENT_USER/Software/Microsoft/Internet Explorer/International]
"Default_CodePage"=hex:b5,03,00,00
"AcceptLanguage"="ko,en-us;q=0.5"
;; ###### Font ######
[HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/FontLink/SystemLink]
"Tahoma"="//Windows//gulim.ac3,굴림"
"Arial"="//Windows//gulim.ac3,굴림"
"Courier New"="//Windows//gulim.ac3,굴림"
"Times New Roman"="//Windows//gulim.ac3,굴림"
"Symbol"="//Windows//gulim.ac3,굴림"
[HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/FontLink/SkipTable]
"Tahoma"="005c"
;; ###### Keyboard and IME ######
[HKEY_CURRENT_USER/Keyboard Layout/Preload]
@="e0010412"
[HKEY_CURRENT_USER/Keyboard Layout/Preload/1]
@="e0010412"
在把这些注册表项倒入系统,就基本上完成了语言的切换,至于导入的方法,如果CE image中已经有一个类似于windows下的regedit.exe的工具当然是最方便的,如果没有就需要写程序调用系统API来完成这些工作了。
依照上面的方法完成语言切换不免有些麻烦,其实在调用控制面板中的区域设置时,我们就可以直接把这些注册表项导入系统中,需要做的只是稍微改动一下系统的source code, 这段源代码位于 (winceroot)/PUBLIC/WCESHELLFE/OAK/CTLPNL/INTL2, 打开combo.c,找到SaveCombo函数中的CBIS_MUI,可以根据不同的区域改变不同的注册表设置, 最后生成的intll.cpl就是我们定制之后的应用程序。这样就能够比较方便的实现语言切换。
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/1327ab569c1ae82736693a50b8e33378.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/7ff8d92cded7e0ce15e7ca1acc870052.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/717446ca04a6125dc5b6b54e0fa14ab4.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/7ff8d92cded7e0ce15e7ca1acc870052.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/717446ca04a6125dc5b6b54e0fa14ab4.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/0196c3df5ea9e936f21e9932cca91014.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
以上所写之处,如有不详或错误之处,希望大家能够指出