程序的多语言支持
来源:互联网 发布:网商银行客户贷款数据 编辑:程序博客网 时间:2024/05/20 00:51
程序的多语言支持 收藏
经常会遇到这样的问题,程序要支持多种语言的操作系统。下面就说说VC6下怎样实现。
一、使用字符列表文件
这种方法算是比较好的。说白了就是配置文件,把所有需要显示的字符串都放在一个文件里,每种语言对应一个文件。如Simplified Chinese.ini、Traditional Chinese.ini、English.ini。文件内容示例如下:
// In Simplified Chinese.ini
ID_APP_CAPTION = 我的程序
……
// In English.ini
ID_APP_CAPTION = MyProgram
采用这种方法,程序中通常会创建一个类(如CLanguageManager)用来专门管理这些琐事。需要显示字符串,就通过调用CLanguageManager的方法(如GetAppCaption())来取得。
这方法的好处是你可以在程序运行时改变语言。缺点是需要仔仔细细的撰写这些配置文件。顺便提一下,早期版本的Skype用的就是这方法,不过它的配置文件是xml格式。
二、使用资源DLL
上面是每种语言对应一个配置文件,资源DLL类似,不过是每种语言对应一个资源DLL,类似的就会有Simplified Chinese.DLL、Traditional Chinese.DLL、English.DLL这样的DLL。资源DLL是一种特殊的数据,不能用上面的简单读取文件的方法来初始化内容,而会用到LoadLibrary和AfxSetResourceHandle两个函数。示例代码如下:
BOOL CMultilanguageApp::InitInstance()
{
AfxEnableControlContainer();
if (m_bChinese)
{
m_hLangDLL=::LoadLibrary("Chinese.dll");
}
else
{
m_hLangDLL=::LoadLibrary("English.dll");
}
AfxSetResourceHandle(m_hLangDLL);
……
}
与第一种方法比,资源DLL由于都是在VC6的集成环境中编辑,优点是比较直观,缺点是需要维护多份资源代码,且每次修改资源,都要重新编译和链接。第一种方法则只需要修改配置文件则可。同时,资源DLL的方法也做不到程序运行时切换语言。
三、包含多份资源
这种方法和第二种“使用资源DLL”的方法类似,不同之处是你可以在一个工程中管理多份资源,而不需要创建资源DLL。奥妙在于,资源编辑时,VC6 IDE提供了Insert Copy这个选项。在Insert新Copy时你可以指定与原资源不一样的语言。假设你的资源文件中有语言为“简体中文”和“繁体中文”的两份,那程序运行在简体下时,它便会显示简体中文,在繁体中文下时便会显示繁体中文的界面。在语言选择列表的最上面有个“Neutral”项,如果你创建了这样的资源,那么在每个操作系统中都将显示“Neutral”的资源,就是独立于操作系统代码页的意思。这种方法同样做不到动态切换语言,与第二种方法比,好处是不用管理资源DLL,程序启动时,会自动匹配相同代码页的资源。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/swimmer2000/archive/2008/12/16/3529053.aspx
- 程序的多语言支持
- 程序的多语言支持
- Qt程序多语言支持
- 向你的程序中添加多语言支持
- 关于DELPHI程序多语言支持的问题
- 如何让你的iPhone程序支持多语言环境
- 如何让你的iPhone程序支持多语言环境
- 如何让你的iPhone程序支持多语言环境
- 如何让你的iPhone程序支持多语言环境
- 用VC实现支持多语言的程序
- 浅谈灵活的WPF程序多语言支持
- C#如何开发多语言支持的Winform程序
- thinkphp的多语言支持
- ScriptCase的多语言支持
- android的多语言支持
- UTF-8到acsii的转换(让自己的C++程序支持多语言)
- UTF-8到acsii的转换(让自己的C++程序支持多语言)
- 分享两种实现Winform程序的多语言支持的解决方案
- 有关Request.UrlReferrer使用
- HDFS针对多硬盘节点的存储策略
- C#路径的八种相关操作
- 嵌入式内功.扎马步
- 获取IWebBrowser2指针的方法(一)
- 程序的多语言支持
- squid 缓存 nginx,gzip设置
- 人脉经营全攻略:认识、经营与开发
- 不惑之礼
- 确保实现“十一五”节能减排目标
- Error: Read from storage 0 bytes, but requested 12 bytes 的解决方法
- 在C++中使用Google的“Protocol Buffers”
- POJ_2559
- 获取IWebBrowser2指针的方法(二)