C++/Win32プログラムの多言語対応について(1)
まず、プログラム内部で出てくる文字列をすべてリソース(StringTable)化する。
StringTableの手前にはLANGUAGEを使って言語を指定。LANGUAGEごとにStringTableを同一IDで定義する。
基本的にはこれだけでOK。これで、OSの言語設定にしたがって適切な言語のStringTableが参照されるようになります。
//English Resource LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US STRINGTABLE BEGIN IDS_MES1 "Message one" IDS_MES2 "Message two" END //Japanease Resource LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT #pragma code_page(932) STRINGTABLE IDS_MES1 "メッセージ1" IDS_MES2 "メッセージ2" BEGIN
多言語のリソースを作るだけならリソースエディタで簡単にできますが、ExpressEditionには存在しないので、上を自力で全部書く必要があります。
取得側は
TCHAR buf[256]; ::LoadString(hInst, IDS_MES1, buf, 256).
こう。
長くなるので明日(id:lord_hollow:20081024)に続くヨ。