mozilla-locale.patch
author Wolfgang Rosenauer <wr@rosenauer.org>
Wed, 14 Sep 2011 09:11:27 +0200
branchmozilla-1.9.2
changeset 314 0103840bc431
parent 184 e398c79b1668
permissions -rw-r--r--
add dbus-1-glib-devel to BuildRequires

# HG changeset patch
# User Wolfgang Rosenauer <wr@rosenauer.org>
# Parent e069ee20084757311e0826e68d5a1fbeb3dcc29f
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
@@ -169,39 +169,48 @@ nsLocaleService::nsLocaleService(void)
         nsAutoString category, category_platform;
         nsLocale* resultLocale;
         int i;
 
         resultLocale = new nsLocale();
         if ( resultLocale == NULL ) { 
             return; 
         }
+
+        // Get system configuration
+        char* language = getenv("LANGUAGE");
+        char* lang = getenv("LANG");
         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; 
+            category_platform = category;
             category_platform.AppendLiteral("##PLATFORM");
             if (lc_temp != nsnull) {
                 result = posixConverter->GetXPLocale(lc_temp, xpLocale);
                 CopyASCIItoUTF16(lc_temp, platformLocale);
             } else {
-                char* lang = getenv("LANG");
                 if ( lang == nsnull ) {
                     platformLocale.AssignLiteral("en_US");
                     result = posixConverter->GetXPLocale("en-US", xpLocale);
                 }
                 else {
                     CopyASCIItoUTF16(lang, platformLocale);
-                    result = posixConverter->GetXPLocale(lang, xpLocale); 
+                    result = posixConverter->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);
         }
         mSystemLocale = do_QueryInterface(resultLocale);
         mApplicationLocale = do_QueryInterface(resultLocale);
     }  // if ( NS_SUCCEEDED )...
        
 #endif // XP_UNIX || XP_BEOS