Commit 59bf036c authored by Ken Thomases's avatar Ken Thomases Committed by Alexandre Julliard

kernel32: Strip modifiers from the Mac locale so setlocale can parse it.

The CFLocale API can produce locale identifiers with modifiers, such as "pl_PL@currency=EUR". However, the Mac setlocale() can't understand such locale strings.
parent 6a65f3b3
...@@ -2867,12 +2867,15 @@ void LOCALE_Init(void) ...@@ -2867,12 +2867,15 @@ 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_string_ref = CFLocaleGetIdentifier( user_locale_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. */
if (p = strchr( user_locale, '@' )) *p = 0;
if (!strchr( user_locale, '.' )) strcat( user_locale, ".UTF-8" ); 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 );
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment