diff -r 65e317e42eff -r 77c890186192 mozilla-language.patch --- 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 -# 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 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 -