简介www.goodsgy.com
在当今这个发展越来越快的世界中,软件的本地化及翻译工作越来越重要,极大地关系到软件的销量及普及率;就拿常见的Win32/MFC程序来说,一个比较方便的办法就是附加单独的资源DLL文件。www.goodsgy.com
本文介绍了一种易于应用的方法,可在C++/MFC程序中支持多种语言,并演示了怎样用少量的代码添加对资源DLL的支持,这包含了两个方面:根据用户偏好在程序开始时自动选择最合适的语言;提供一个语言选择子菜单(以供用户自行选择)。如图所示:www.goodsgy.com
www.goodsgy.com
关于资源DLLwww.goodsgy.com
有关在程序中支持多语言最灵活的方法,也许就是使用所谓的“资源DLL”了,其主要思想是为每种语言创建一个单独的DLL文件,而这个DLL中包含了已翻译为某种特定语言的程序资源;因此,如果你的程序最初版本是中文,且又翻译成了法文、德文、日文,这样你就有了三个资源DLL。中文资源在.exe文件中,而其他三种语言各自对应一个DLL文件。www.goodsgy.com
如果程序中又需要支持某种新的语言,只须简单地添加一个DLL到安装文件中就行了。在程序运行时,会根据用户偏好,相应地加载资源DLL。www.goodsgy.com
资源DLL可由一个专门的Visual Studio工程来创建,也可由某些专用的工具来创建,本文以Visual Studio 2003来创建,Visual Studio 2005也差不多。顺便提一下,把所有的语言资源都打包进EXE文件,在理论上是可行的,但在实际中却行不通;因为,大多数加载资源的高层API——如LoadString()、DialogBox()等等——不会让你指定想要的语言,而SetThreadLocale()也不会如预期那样工作(此API在Win9X中不存在)。www.goodsgy.com
一步一步支持资源DLLwww.goodsgy.com
以下是在主程序中,添加支持资源DLL(语言选择菜单)的步骤:www.goodsgy.com
1、 把LanguageSupport.h及LanguageSupport.cpp添加到你的工程。www.goodsgy.com
在MyApp.h及MyApp.cpp(假定CMyApp是工程类)中,加入以下黑体行:www.goodsgy.com
以下是引用片段: #include "LanguageSupport.h" class CMyApp : public CWinApp { public: CLanguageSupport m_LanguageSupport; ... }; BOOL CMyApp::InitInstance() { //把以下这行注释掉,防止MFC进行自己的资源DLL处理。 // CWinApp::InitInstance(); ... SetRegistryKey(_T("MyCompany")); //根据用户偏好,加载相应的资源DLL。 m_LanguageSupport.LoadBestLanguage(); ... } |
www.goodsgy.com
在主菜单中,添加一个名为“语言(Language)”的菜单项。接下来,在CMainFrame类中,为“语言(Language)”菜单项添加一个菜单更新处理程序,假定名为OnUpdateToolsLanguage(),如下所示:www.goodsgy.com
以下是引用片段: void CMainFrame::OnUpdateToolsLanguage(CCmdUI *pCmdUI) { //创建语言子菜单(只在菜单第一次打开时)。 theApp.m_LanguageSupport.CreateMenu(pCmdUI); } |
www.goodsgy.com