mozilla-language.patch
changeset 294 5330447b83a3
parent 251 4c9ebbedd59c
child 568 2c74c5927ea2
--- 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 <wr@rosenauer.org>
-# 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<nsLocale> 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