static LCID LCIDFromLocale(const AtomicString& locale) { // According to MSDN, 9 is enough for LOCALE_SISO639LANGNAME. const size_t languageCodeBufferSize = 9; WCHAR lowercaseLanguageCode[languageCodeBufferSize]; ::GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_SISO639LANGNAME, lowercaseLanguageCode, languageCodeBufferSize); String userDefaultLanguageCode = String(lowercaseLanguageCode); LCID lcid = LCIDFromLocaleInternal(LOCALE_USER_DEFAULT, userDefaultLanguageCode, String(locale)); if (!lcid) lcid = LCIDFromLocaleInternal(LOCALE_USER_DEFAULT, userDefaultLanguageCode, defaultLanguage()); return lcid; }
static LCID LCIDFromLocale(const String& locale, bool defaultsForLocale) { // LocaleNameToLCID() is available since Windows Vista. LocaleNameToLCIDPtr localeNameToLCID = reinterpret_cast<LocaleNameToLCIDPtr>(::GetProcAddress(::GetModuleHandle(L"kernel32"), "LocaleNameToLCID")); if (!localeNameToLCID) localeNameToLCID = convertLocaleNameToLCID; // According to MSDN, 9 is enough for LOCALE_SISO639LANGNAME. const size_t languageCodeBufferSize = 9; WCHAR lowercaseLanguageCode[languageCodeBufferSize]; ::GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_SISO639LANGNAME | (defaultsForLocale ? LOCALE_NOUSEROVERRIDE : 0), lowercaseLanguageCode, languageCodeBufferSize); String userDefaultLanguageCode = String(lowercaseLanguageCode); LCID lcid = LCIDFromLocaleInternal(LOCALE_USER_DEFAULT, userDefaultLanguageCode, localeNameToLCID, locale); if (!lcid) lcid = LCIDFromLocaleInternal(LOCALE_USER_DEFAULT, userDefaultLanguageCode, localeNameToLCID, defaultLanguage()); return lcid; }