リソースの国際対応(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を開放します。 |