MFC默认的多国语言实现方法

关于MFC多国语言的实现方法,网上给出的主流方案是:

一. 自己实现

从ini或者xml文件读取字符串,根据需要动态填充到控件或者菜单中.

这种方法通用性好,甚至可以实现动态切换界面语言,但实现起来比较复杂,需要自己写很多代码.

二.加载纯资源文件

生成一个纯资源的DLL文件,每种语言一个DLL文件.

在程序启动的时候,一般是XXX::InitInstance()函数中添加以下代码:

HINSTANCE hDll;
hDll = ::LoadLibrary(L"xxx.dll");
AfxSetResourceHandle(hDll); 

加载不同的xxx.dll就会显示不同的语言.

今天我在这里主要记录一下第三种方案:

这种方案和第二方案非常相似,也是生成纯资源DLL文件,每种语言一个DLL.

但不同的是不需要我们手动加载资源,MFC其实会自动加载多语言DLL.

这个技术叫做Satellite DLLs.MFC从7.0版本开始就已经支持这种技术.

但此方法网上讨论者非常少,相关的介绍资料也很少.

官方资料只找到这一篇: https://docs.microsoft.com/en-us/cpp/build/localized-resources-in-mfc-applications-satellite-dlls

这种方案运行原理是,MFC应用程序在运行时会自动加载合适的多语言资源文件 .

比如我的应用程序文件名叫app.exe,那么在运行时会自动在当前目录下加载appxxx.dll.

xxx表示不同的语言,这3个字母有哪些组合没有找到资料,但已知的组合有:

CHS简体中文
CHT繁体中文
DEU德语
ENU英语
ESN西班牙语
FRA法语
ITA意大利语
JPN日语
KOR朝鲜语
RUS俄语
LOC默认语言

LOC是个特殊的组合,它表示默认语言,当以上指定语言文件都找不到时,最后会使用LOC.dll.

如果连LOC.dll都没有呢,那就相当于没有多国语言了,使用应用程序自带的资源做为界面显示.