多国语言实现
来源:互联网 发布:统计学 从数据到结论 编辑:程序博客网 时间:2024/04/20 04:49
2009-08-16 13:54 by IamEasy_Man, 87 visits, 网摘, 收藏, 编辑
介绍一种多国语言的实现办法,这也是微软推荐的方式,打开windows mobile下的windows目录可以看到有很多以MUI为后缀名的文件,例如shellres.dll.0804.mui和shell.dll.0804.mui。。。。。。我们可以用eXeScope.exe或者resources hacker这样的文件查看器查看一下这些文件究竟是怎么一回事,不难发现文件里面都是一些资源ID和相对应的字符串。也许你就疑惑这是为什么呢?这些文件有什么作用呢?下面分解。
MUI是Multilingual User Interface的缩写,意为多语言用户界面,主要是用来实现软件的国际化,也就是软件的多国语言版本的实现。其实一个mui文件也是一个DLL来的,但是这个dll有点特殊,不像我们以往的带来了那样包含了很多的函数体供dll外或者本身调用,而是只包含字符串资源,所以可以在vs下新建一个dll项目,不需要其他代码,只需要dll的入口点如下:
1 #include "windows.h"
2
3
4 /////////////////////////////////////////////////////////////////////////////
5
6 // DLL Entry Point
7
8 extern "C"
9
10 BOOL WINAPI DllMain(HANDLE hInstance, DWORD dwReason, LPVOID lpReserved)
11
12 {
13
14 return TRUE;
15
16
除此以外,刚才也提到了,dll里只包含字符串资源,所以必须添加一个资源配置文件如***.rc,在里面添加相应的字符串资源信息,如下:
1 IDR_HELLO_MENUBAR MENU DISCARDABLE
2
3 BEGIN
4
5 MENUITEM "Exit", PSP_DLGINDIRECT
6
7 POPUP "Menu"
8
9 BEGIN
10
11 MENUITEM "Exit", PSP_DLGINDIRECT
12
13 MENUITEM "Test", ID_MENU_TEST
14
15 END
16
17
在这里要特别注意了,因为每一个mui也就是说每一个dll就代表一种语言,所以在资源配置文件里就是通过对每个字符串资源进行相应语言的更改达到多国语言的效果,例如你要做成简体中文版本,你就必须在重新建一个dll,同样建立一个资源配置文件,但是得把刚才上面的这段资源配置脚本代码改成如下:
1 IDR_HELLO_MENUBAR MENU DISCARDABLE
2
3 BEGIN
4
5 MENUITEM "退出", PSP_DLGINDIRECT
6
7 POPUP "菜单"
8
9 BEGIN
10
11 MENUITEM "退出", PSP_DLGINDIRECT
12
13 MENUITEM "测试", ID_MENU_TEST
14
15 END
16
17
然后可以通过把定义资源ID的resources.h这个文件共享出来,让多个mui文件和应用程序用同一个资源ID。
同时你还需要在dll项目添加一个导出文件如***.def,其实不需要导出函数名如下就可以(其实下面的导出函数名可以不需要):
2
3 EXPORTS
4
也许你还会问,那应用程序怎么去通过匹配相应的mui文件来进行语言的定位?请看。
刚才说到windows目录下有shellres.dll.0804.mui,其实mui文件的命名有一定的规则可循,可不是乱来的,首先shellres.dll表明这个mui文件是专门用于shellres.dll多国语言版本,再例如hello.exe.0804.mui这个表示是专用于hello.exe。然后0804这又是表示什么意思呢,这是微软定义的语言ID是一个十六进制数,例如简体中文的ID是0x0804,而美国英语ID则是0409。其他国家的语言ID可以查看sdk中的Language Identifiers and Locales。
那系统怎么去实现识别应用使用哪一个mui文件呢?在系统注册表中HKEY_CURRENT_USER/Control/Panel/Desktop/MultiUILanguageId记录了系统的默认语言ID,所以系统会根据这个默认ID进行自动配置,而不需程序员再使用代码控制。但是有一点要注意的是mui文件和应用程序要放在同一个目录下。在使用vs生成mui文件时,可以通过对项目属性进行设置,让vs直接生成mui文件,在dll项目中”项目属性”----“链接器”----“常规”中的”输出文件” $(OutDir)/your_mui_name,只需要修改your_mui_name为你相应mui文件名就可以。
使用mui来实现多国语言版本的实现,不需要更改应用程序的代码,只需要直接添加或删除独立的mui文件,mui文件和应用程序是高分离的,方便管理。
- 多国语言实现
- 多国语言实现
- 实现多国语言处理
- Delphi 实现多国语言
- MFC多国语言实现
- Struts实现多国语言切换
- c++builder的多国语言实现
- Struts实现多国语言切换
- WinForm中多国语言的实现
- WinForm中多国语言的实现
- 软件多国语言的实现方式
- windows mobile多国语言实现
- WPF UI多国语言的实现
- 多国语言系统实现基本原理
- Struts实现多国语言切换
- resx实现多国语言化
- java实现多国语言页面处理
- OEA 中的多国语言实现
- 程序员能力矩阵 Programmer Competency Matrix
- 通知链
- HTML 超链接打开新窗口
- 题目
- 百度联手清华发布《搜索引擎技术基础》
- 多国语言实现
- Oracle与Java之发布main()方法
- zoj 1242 Carbon Dating
- 虚拟机操作系统及Meego SDK 安装过程
- 批处理—TXT文档中的E-MAIL 条数统计出来
- Spring Aop 异常
- 【原创】Key-Value小数据库tmdb发布:原理和实现
- 一、消除txt数据文件中空行批处理小程序
- 关于以前的应用程序settimer以及现在RTC棘手问题