SOFTIST 编程方法筆記 目录

资源文件国际化(VC++)

1.取得系统的既定语言识别ID

LANGID GetSystemDefaultLangID(VOID)函数可以取得系统的既定语言识别ID。用宏定义 PRIMARYLANGID(LANGID) 可以取出语言识别PRIMARY部分(语种)。用宏定义SUBLANGID(LANGID) 可以取出语言识别ID的详细分类。

例:
	LANGID wdLangID = GetSystemDefaultLangID();
	wdLangID = PRIMARYLANGID(wdLangID);
	WORD wdSubLangID = -1;
	switch (wdLangID)
	{
	case LANG_CHINESE:				//中国語
		wdSubLangID = SUBLANGID(GetSystemDefaultLangID());
		switch (wdSubLangID)
		{
		case SUBLANG_CHINESE_TRADITIONAL:	// 台湾
			//TODO 処理
			break;
		case SUBLANG_CHINESE_HONGKONG:	// 香港 
			//TODO 処理
			break;
		case SUBLANG_CHINESE_SIMPLIFIED:	// 中国
			//TODO 処理
			break;
		case SUBLANG_CHINESE_SINGAPORE:	// シンガポール
			//TODO 処理
			break;
		default:
			//TODO 処理
			break;
		}
		break;
	case LANG_JAPANESE:				//日本語
		//TODO 処理
		break;
	}

2.做一个只有资源的DLL

生成一个普通的DLL工程。将要国际化的工程中的与资源有关系的文件拷贝到这个DLL工程的底下,并追加到这个DLL工程中去。说起由关系的文件也就是rc文件,resource.h文件,和res目录下的所以文件。把资源里的文字改成某国的语言、编译制作DLL。

3.只有资源的DLL的使用

在主程序一侧,使用HINSTANCE LoadLibrary(LPCTSTR)函数把DLL调入。调用void AfxSetResourceHandle( HINSTANCE hInstResource )函数,使主程序能够使用DLL里的资源。如此操作可以对应多种外语版本。

例:

	m_hResource = ::LoadLibrary(strURL);
	if (m_hResource != NULL)
		AfxSetResourceHandle(m_hResource);

4.释放DLL

BOOL FreeLibrary(HMODULE);