C++/CX で Windows Phone 8 のデバイス ロケールを取得する正しい方法を探しています。
次のコードは、Windows Phone 8 エミュレーターでは常に"en"を返します。
int ccBuf = GetLocaleInfoEx(LOCALE_NAME_USER_DEFAULT,
LOCALE_SISO639LANGNAME,
buf, 9);
C++/CX で Windows Phone 8 のデバイス ロケールを取得する正しい方法を探しています。
次のコードは、Windows Phone 8 エミュレーターでは常に"en"を返します。
int ccBuf = GetLocaleInfoEx(LOCALE_NAME_USER_DEFAULT,
LOCALE_SISO639LANGNAME,
buf, 9);
この関数は、デバイスの言語を「en」、「fr」などの 2 文字形式で返します。
#include <windows.h>
std::string platformGetDeviceLanguage()
{
ULONG numLanguages = 0;
DWORD cchLanguagesBuffer = 0;
BOOL hr = GetUserPreferredUILanguages(MUI_LANGUAGE_NAME, &numLanguages, NULL, &cchLanguagesBuffer);
if (hr)
{
WCHAR* pwszLanguagesBuffer = new WCHAR[cchLanguagesBuffer];
std::string lang_code = "en";
hr = GetUserPreferredUILanguages(MUI_LANGUAGE_NAME, &numLanguages, pwszLanguagesBuffer, &cchLanguagesBuffer);
if (hr)
{
lang_code[0] = pwszLanguagesBuffer[0];
lang_code[1] = pwszLanguagesBuffer[1];
}
delete[] pwszLanguagesBuffer;
return lang_code;
}
return "en";
}