Module: wine Branch: master Commit: 8c2b290d11f404aed5f461192769b3ec1b28e9fb URL: http://source.winehq.org/git/wine.git/?a=commit;h=8c2b290d11f404aed5f4611927...
Author: Ken Thomases ken@codeweavers.com Date: Fri Feb 19 09:44:26 2010 -0600
kernel32: Mac: If language is less specific variant of locale, keep locale.
For a Mac user in Australia, for example, the out-of-the-box configuration is that the preferred language is generic English ("en"). Their formats locale should be Australia ("en_AU"). Detect that case and don't override LC_MESSAGES.
---
dlls/kernel32/locale.c | 10 +++++++--- 1 files changed, 7 insertions(+), 3 deletions(-)
diff --git a/dlls/kernel32/locale.c b/dlls/kernel32/locale.c index d6a8492..6f965e3 100644 --- a/dlls/kernel32/locale.c +++ b/dlls/kernel32/locale.c @@ -2945,8 +2945,6 @@ void LOCALE_Init(void) }
CFStringGetCString( user_locale_string_ref, user_locale, sizeof(user_locale), kCFStringEncodingUTF8 ); - CFRelease( user_locale_ref ); - CFRelease( user_locale_string_ref );
unix_cp = CP_UTF8; /* default to utf-8 even if we don't get a valid locale */ setenv( "LANG", user_locale, 0 ); @@ -2963,11 +2961,14 @@ void LOCALE_Init(void) if (!getenv("LC_ALL") && !getenv("LC_MESSAGES")) { /* Retrieve the preferred language as chosen in System Preferences. */ + /* If language is a less specific variant of locale (e.g. 'en' vs. 'en_US'), + leave things be. */ CFArrayRef all_locales = CFLocaleCopyAvailableLocaleIdentifiers(); CFArrayRef preferred_locales = CFBundleCopyLocalizationsForPreferences( all_locales, NULL ); CFStringRef user_language_string_ref; if (preferred_locales && CFArrayGetCount( preferred_locales ) && - (user_language_string_ref = CFArrayGetValueAtIndex( preferred_locales, 0 ))) + (user_language_string_ref = CFArrayGetValueAtIndex( preferred_locales, 0 )) && + !CFEqual(user_language_string_ref, user_locale_lang_ref)) { struct locale_name locale_name; WCHAR buffer[128]; @@ -2981,6 +2982,9 @@ void LOCALE_Init(void) if (preferred_locales) CFRelease( preferred_locales ); } + + CFRelease( user_locale_ref ); + CFRelease( user_locale_string_ref ); #endif
NtSetDefaultUILanguage( LANGIDFROMLCID(lcid_LC_MESSAGES) );