diff -r 3fd4e37e5e52 -r 5330447b83a3 mozilla-language.patch --- a/mozilla-language.patch Sat Jul 23 15:16:24 2011 +0200 +++ b/mozilla-language.patch Sat Jul 23 15:31:44 2011 +0200 @@ -1,48 +1,48 @@ # HG changeset patch # User Wolfgang Rosenauer -# Parent db620d83124746201970dcf50c661957df979eca +# Parent 0d6917b8f28f6e0398dbf329dda4932ba4f997c2 Bug 583793 - Firefox interface language set to LANG, ignores LANGUAGE diff --git a/intl/locale/src/nsLocaleService.cpp b/intl/locale/src/nsLocaleService.cpp --- a/intl/locale/src/nsLocaleService.cpp +++ b/intl/locale/src/nsLocaleService.cpp -@@ -181,16 +181,17 @@ nsLocaleService::nsLocaleService(void) - } - +@@ -160,16 +160,17 @@ nsLocaleService::nsLocaleService(void) + nsRefPtr resultLocale(new nsLocale()); + NS_ENSURE_TRUE(resultLocale, ); #ifdef MOZ_WIDGET_QT - const char* lang = QLocale::system().name().toAscii(); + const char* lang = QLocale::system().name().toAscii(); #else - // Get system configuration - const char* lang = getenv("LANG"); -+ const char* language = getenv("LANGUAGE"); + // Get system configuration + const char* lang = getenv("LANG"); ++ const char* language = getenv("LANGUAGE"); #endif - for( i = 0; i < LocaleListLength; i++ ) { - nsresult result; - // setlocale( , "") evaluates LC_* and LANG - char* lc_temp = setlocale(posix_locale_category[i], ""); - CopyASCIItoUTF16(LocaleList[i], category); - category_platform = category; -@@ -206,16 +207,21 @@ nsLocaleService::nsLocaleService(void) - else { - CopyASCIItoUTF16(lang, platformLocale); - result = posixConverter->GetXPLocale(lang, xpLocale); - } + nsAutoString xpLocale, platformLocale; + nsAutoString category, category_platform; + int i; + + for( i = 0; i < LocaleListLength; i++ ) { + nsresult result; +@@ -188,16 +189,21 @@ nsLocaleService::nsLocaleService(void) + } else { + CopyASCIItoUTF16(lang, platformLocale); + result = nsPosixLocale::GetXPLocale(lang, xpLocale); } - if (NS_FAILED(result)) { - return; - } -+ // LANGUAGE is overriding LC_MESSAGES -+ if (i == LC_MESSAGES && language && *language) { -+ CopyASCIItoUTF16(language, platformLocale); -+ result = posixConverter->GetXPLocale(language, xpLocale); -+ } - resultLocale->AddCategory(category, xpLocale); - resultLocale->AddCategory(category_platform, platformLocale); + } + if (NS_FAILED(result)) { + return; } - mSystemLocale = do_QueryInterface(resultLocale); - mApplicationLocale = do_QueryInterface(resultLocale); - } // if ( NS_SUCCEEDED )... ++ // LANGUAGE is overriding LC_MESSAGES ++ if (i == LC_MESSAGES && language && *language) { ++ CopyASCIItoUTF16(language, platformLocale); ++ result = nsPosixLocale::GetXPLocale(language, xpLocale); ++ } + resultLocale->AddCategory(category, xpLocale); + resultLocale->AddCategory(category_platform, platformLocale); + } + mSystemLocale = do_QueryInterface(resultLocale); + mApplicationLocale = do_QueryInterface(resultLocale); #endif // XP_UNIX + #ifdef XP_OS2