MFC多语言实现方法

时间:2023-01-20 15:57:15


我们公司目前软件大多数用MFC单文档实现,前段时间为了海外扩展,要求所以软件采用多语言。

因此我给下属下了一个命令,就是归纳多语言实现方式,总结最优实现方式。

 

一共有四种方法:先介绍常规的前三种。

例子在资源里面“MFC多语言实现方法”。

 

 

 

 

 

需要转换语言的地方有:

1、程序界面:菜单,控件标签等。

2、提示字符串等。

 

一、字符放在DLL资源文件中,切换资源模块(程序默认使用exe模块资源)。

实现要点:

新建一个只包含资源的DLL。通过函数AfxSetResourceHandle设置资源模块。

示意代码为:

       AfxSetResourceHandle(LoadLibrary("english.dll"));

Cstring strMsg;

strMsg.LoadString(ID_TITLE);

SetWindowText(strMsg);

见例子MulLanguage_dll.rar

二、字符放在EXE资源文件中,选择对应的语言资源。

实现要点:

新建多个ID相同,语言不同的资源。

通过SetThreadLocale设置当前线程使用语言。

示意代码:

SetThreadLocale(MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US));

CString strMsg;

strMsg.LoadString(ID_TITLE);

SetWindowText(strMsg);

     例子:MulLanguage_rc.rar

三、字符放在INI文件中。

实现要点:

同种语言字符放在单独的文本,通过切换文件方式切换语言。

优点:增加一种新语言,只需增加相应的语言的文件。

缺点:DLL模块中的字符转换,字符ID命名。

CString strMsg;

GetPrivateProfileString(…);

SetWindowText(strMsg);

见例子MulLanguage_ini.rar

 

综合上面三种方法,从原理上看其实是同一种方法,获取相应语言下的字符,再显示字符,不同之处是字符存放位置不同。字符可以存放在DLL资源中,exe资源中,文本文件中。相应地获取字符方式也不同。

http://download.csdn.net/source/3342781