mozilla-language.patch
author Stefan Brüns <stefan.bruens@rwth-aachen.de>
Sun, 01 Oct 2017 23:16:23 +0200
branchfirefox56
changeset 997 ca8a6ac7fbf6
parent 994 9fc447b00040
permissions -rw-r--r--
- Correct plugin directory for aarch64 (boo#1061207). The wrapper script was not detecting aarch64 as a 64 bit architecture, thus used /usr/lib/browser-plugins/.

# HG changeset patch
# User Wolfgang Rosenauer <wr@rosenauer.org>
# Parent 5a29924228527f8882c83cf62d470963ea1ce62e
# Parent  242f2521ed48bb63b91582956b5e4af80bcb3378
Bug 583793 - Firefox interface language set to LANG, ignores LANGUAGE

diff --git a/intl/locale/nsLocaleService.cpp b/intl/locale/nsLocaleService.cpp
--- a/intl/locale/nsLocaleService.cpp
+++ b/intl/locale/nsLocaleService.cpp
@@ -116,16 +116,17 @@ nsLocaleService::nsLocaleService(void)
     NS_ENSURE_SUCCESS_VOID(rv);
 #endif
 #if defined(XP_UNIX) && !defined(XP_MACOSX)
     RefPtr<nsLocale> resultLocale(new nsLocale());
     NS_ENSURE_TRUE_VOID(resultLocale);
 
     // Get system configuration
     const char* lang = getenv("LANG");
+    const char* language = getenv("LANGUAGE");
 
     nsAutoString xpLocale, platformLocale;
     nsAutoString category, category_platform;
     int i;
 
     for( i = 0; i < LocaleListLength; i++ ) {
         nsresult result;
         // setlocale( , "") evaluates LC_* and LANG
@@ -151,16 +152,37 @@ nsLocaleService::nsLocaleService(void)
             } else {
                 CopyASCIItoUTF16(lang, platformLocale);
                 result = nsPosixLocale::GetXPLocale(lang, xpLocale);
             }
         }
         if (NS_FAILED(result)) {
             return;
         }
+        // LANGUAGE is overriding LC_MESSAGES
+        // it can be a colon separated list of preferred languages
+        // as we do not recognize here if a language is available
+        // we actually only consider the first entry unless GetXPLocale
+        // fails completely
+        if (i == LC_MESSAGES && language && *language) {
+#define LANGUAGE_SEP ":"
+          nsAutoString xpLocale_temp;
+          char* rawBuffer = (char*) language;
+          char* token = nsCRT::strtok(rawBuffer, LANGUAGE_SEP, &rawBuffer);
+          for (; token;
+              token = nsCRT::strtok(rawBuffer, LANGUAGE_SEP, &rawBuffer)) {
+            result = nsPosixLocale::GetXPLocale(token, xpLocale_temp);
+            if (NS_SUCCEEDED(result)) {
+              CopyASCIItoUTF16(token, platformLocale);
+              xpLocale = xpLocale_temp;
+              break;
+            }
+          }
+        }
+
         resultLocale->AddCategory(category, xpLocale);
         resultLocale->AddCategory(category_platform, platformLocale);
     }
     mSystemLocale = do_QueryInterface(resultLocale);
     mApplicationLocale = do_QueryInterface(resultLocale);
 
 #endif // XP_UNIX