c++实现动态多国语言的动态切换

时间:2024-05-19 15:21:47

动态多国语言的切换目前大多采用的是动态加载资源DLL 每一个资源DLL中包含了一份对应某一语言的字符串表, 但这种方法的缺点就是需要为每一种语言都要做一个DLL,程序安装时资源DLL过于繁多。下面我们将所有的多国语言资源都封装在一个动态库中,然后通过SetThreadLocale() API来实现动态切换多国语言。

首先我们要创建多国语言的RC,这一步至关重要,为了能支持多国语言,我们必须安装“Multilingual User Interface Pack”,下面我们就详细的讲解一下多国语言RC的制作过程,假如目前的系统是英文操作系统,我们要做中文的RC,我们需要设置系统环境,如下图:

c++实现动态多国语言的动态切换

重新启动后用“WordPad.exe”打开英文的RC(只需保留RC中的string table),编辑相应的字符串后选择另存为,如下图:

c++实现动态多国语言的动态切换

这样中文的RC就创建完成,由此类推我们使用类似的方法创建其他国语言的RCRC创建完成后,我们在编译程序的RC时,需要包含上面刚刚创建的多国RC,非常简单,只需添加以下代码:

#include "CHS.rc"

#include "CHT.rc"

预定义好该语言对应的宏,例如中文对应的是AFX_TARG_CHS,这样编译完成后,资源DLL就是多国语言版的了。

c++实现动态多国语言的动态切换

下面说一下具体应用,我们采用LoadString() API来从资源DLL中获取相应的字符串,在我们调用LoadString() 前我们调用SetThreadLocale() API来更改当期进程的语言版本,这样API就会自动寻找对应国家的字符串。