プログラミングメモ →目次

リソースの国際対応(VC++)

1.システムの既定言語識別子の取得

LANGID GetSystemDefaultLangID(VOID)関数で、システムの既定言語識別子を取得します。PRIMARYLANGID(LANGID) で、言語識別子からプライマリ言語識別子を取得します。SUBLANGID(LANGID) で、言語識別子からサブ言語識別子を取得します。

例:

	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プロジェクトでリソースを修正し、DLLをビルドします。

3.リソースのみのDLLの使用

メインプログラム側で、HINSTANCE LoadLibrary(LPCTSTR)関数を使って、DLLをロードします。void AfxSetResourceHandle( HINSTANCE hInstResource )関数で利用する他の言語のリソースのハンドルを指定することができます。こうすることで、他の言語に対応するリソースを反映できます。

例:

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

4.DLLの開放

BOOL FreeLibrary(HMODULE);でDLLを開放します。