mozilla-language.patch
changeset 1008 77c890186192
parent 1007 65e317e42eff
child 1011 85bd01789b6f
child 1018 0e45f8ad501c
--- a/mozilla-language.patch	Mon Nov 06 07:44:08 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,65 +0,0 @@
-# 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
-