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)に続くヨ。