kernel32: On Mac, construct locale string from language and country codes.
Don't rely on CFLocaleGetIdentifier(), whose result may not be sensible to the C library.
This commit is contained in:
parent
317d95a9db
commit
21acb71e42
|
@ -2929,16 +2929,27 @@ void LOCALE_Init(void)
|
||||||
CFArrayRef preferred_locales, all_locales;
|
CFArrayRef preferred_locales, all_locales;
|
||||||
CFStringRef user_language_string_ref = NULL;
|
CFStringRef user_language_string_ref = NULL;
|
||||||
char user_locale[50];
|
char user_locale[50];
|
||||||
char* p;
|
|
||||||
|
|
||||||
CFLocaleRef user_locale_ref = CFLocaleCopyCurrent();
|
CFLocaleRef user_locale_ref = CFLocaleCopyCurrent();
|
||||||
CFStringRef user_locale_string_ref = CFLocaleGetIdentifier( user_locale_ref );
|
CFStringRef user_locale_lang_ref = CFLocaleGetValue( user_locale_ref, kCFLocaleLanguageCode );
|
||||||
|
CFStringRef user_locale_country_ref = CFLocaleGetValue( user_locale_ref, kCFLocaleCountryCode );
|
||||||
|
CFStringRef user_locale_string_ref;
|
||||||
|
|
||||||
|
if (user_locale_country_ref)
|
||||||
|
{
|
||||||
|
user_locale_string_ref = CFStringCreateWithFormat(NULL, NULL, CFSTR("%@_%@.UTF-8"),
|
||||||
|
user_locale_lang_ref, user_locale_country_ref);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
user_locale_string_ref = CFStringCreateWithFormat(NULL, NULL, CFSTR("%@.UTF-8"),
|
||||||
|
user_locale_lang_ref);
|
||||||
|
}
|
||||||
|
|
||||||
CFStringGetCString( user_locale_string_ref, user_locale, sizeof(user_locale), kCFStringEncodingUTF8 );
|
CFStringGetCString( user_locale_string_ref, user_locale, sizeof(user_locale), kCFStringEncodingUTF8 );
|
||||||
CFRelease( user_locale_ref );
|
CFRelease( user_locale_ref );
|
||||||
/* Strip modifiers because setlocale() can't parse them. */
|
CFRelease( user_locale_string_ref );
|
||||||
if ((p = strchr( user_locale, '@' ))) *p = 0;
|
|
||||||
if (!strchr( user_locale, '.' )) strcat( user_locale, ".UTF-8" );
|
|
||||||
unix_cp = CP_UTF8; /* default to utf-8 even if we don't get a valid locale */
|
unix_cp = CP_UTF8; /* default to utf-8 even if we don't get a valid locale */
|
||||||
setenv( "LANG", user_locale, 0 );
|
setenv( "LANG", user_locale, 0 );
|
||||||
TRACE( "setting locale to '%s'\n", user_locale );
|
TRACE( "setting locale to '%s'\n", user_locale );
|
||||||
|
|
Loading…
Reference in New Issue