アプリケーションの国際化対応の話題スレ

このエントリーをはてなブックマークに追加
135デフォルトの名無しさん
Win32 APIのGetLocaleInfoWで日本語を指定するとU+A5を取得できた。
Aなら5Cになるし使えると思う。ただ、標準Cライブラリとの対応付けが面倒かもしれない。
#include <windows.h>
#include <iostream>
#include <locale>
int main()
{
std::wcout.imbue(std::locale("")); //VC++ 2005だとだめだったと思うけど
WCHAR c[6];
GetLocaleInfoW(LOCALE_USER_DEFAULT, LOCALE_SCURRENCY, c, sizeof c / sizeof c[0]);
std::wcout << std::hex << static_cast<UINT>(c[0]) << L'\n';

LCID lcidja = MAKELCID(MAKELANGID(LANG_JAPANESE, SUBLANG_DEFAULT), SORT_DEFAULT);
std::wcout << std::hex << lcidja << L'\n';
std::wcout << std::hex << GetUserDefaultLCID() << L'\n'; //日本ならlcidjaと同じ値になることの確認

GetLocaleInfoW(lcidja, LOCALE_SCURRENCY, c, sizeof c / sizeof c[0]);
std::wcout << std::hex << static_cast<UINT>(c[0]) << L'\n';
std::wcout << c << '\n';

CHAR mbs[6];
GetLocaleInfoA(lcidja, LOCALE_SCURRENCY, mbs, sizeof mbs);
std::wcout << mbs << '\n';
std::wcout << std::hex << static_cast<UINT>(mbs[0]) << std::endl;
}