程序的多语言支持
2010-05-07 11:05
106 查看
程序的多语言支持 收藏
经常会遇到这样的问题,程序要支持多种语言的操作系统。下面就说说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
经常会遇到这样的问题,程序要支持多种语言的操作系统。下面就说说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
相关文章推荐
- 安装office时提示:安装程序包的语言不受系统支持
- 怎样编写支持多国语言的程序, 让它能够根据所运行的操作系统自动显示相应的文字。
- 关于DELPHI程序多语言支持的问题
- 用VC实现支持多语言的程序
- SharePoint程序中的多语言支持
- Excel2007无法卸载:安装程序包的语言不受系统支持。微软的卸载程序也不行。——只能手工删除
- 如何让你的iPhone程序支持多语言环境
- IOS APP 国际化 程序内切换语言实现 不重新启动系统(支持项目中stroyboard 、xib 混用。完美解决方案)
- 晚上无聊象征性收取了网友100元辛苦费,实现支持多语言功能的XML语言包版的C#的ASP.NET多语言支持例子程序
- 怎样编写支持多国语言的程序, 让它能够根据所运行的操作系统自动显示相应的文字。
- UTF-8到acsii的转换(让自己的C++程序支持多语言)
- 如何让你的iPhone程序支持多语言环境(本地化)
- 让你的.NET程序支持多语言
- 一种灵活的WPF程序多国语言支持
- OFFICE 2010卸载 提示“安装程序包的语言不受系统支持”的解决方法
- 在程序中支持多语言环境,支持asp.net和winform。
- win xp出现“安装程序包的语言不受支持”的解决
- Windows 8背后数字:支持2种架构7种程序语言
- ubuntu (16.04) server 英文原版 添加中文语言支持 消除java 程序、mysql 数据库不能处理中文的错误
- 分享两种实现Winform程序的多语言支持的解决方案