mozilla-language.patch
branchfirefox51
changeset 939 3604ed712e16
parent 932 a58cc7936ce7
child 994 9fc447b00040
equal deleted inserted replaced
938:a888b9636517 939:3604ed712e16
     1 # HG changeset patch
     1 # HG changeset patch
     2 # User Wolfgang Rosenauer <wr@rosenauer.org>
     2 # User Wolfgang Rosenauer <wr@rosenauer.org>
     3 # Parent 5a29924228527f8882c83cf62d470963ea1ce62e
     3 # Parent 5a29924228527f8882c83cf62d470963ea1ce62e
     4 # Parent  bf7b3a5853467b34f13465102a19b9c7c2524bd4
     4 # Parent  4f39ed617c2f151a3a15903c7ae4471b66774e9e
     5 Bug 583793 - Firefox interface language set to LANG, ignores LANGUAGE
     5 Bug 583793 - Firefox interface language set to LANG, ignores LANGUAGE
     6 
     6 
     7 diff --git a/intl/locale/nsLocaleService.cpp b/intl/locale/nsLocaleService.cpp
     7 diff --git a/intl/locale/nsLocaleService.cpp b/intl/locale/nsLocaleService.cpp
     8 --- a/intl/locale/nsLocaleService.cpp
     8 --- a/intl/locale/nsLocaleService.cpp
     9 +++ b/intl/locale/nsLocaleService.cpp
     9 +++ b/intl/locale/nsLocaleService.cpp
    23      int i;
    23      int i;
    24  
    24  
    25      for( i = 0; i < LocaleListLength; i++ ) {
    25      for( i = 0; i < LocaleListLength; i++ ) {
    26          nsresult result;
    26          nsresult result;
    27          // setlocale( , "") evaluates LC_* and LANG
    27          // setlocale( , "") evaluates LC_* and LANG
    28 @@ -149,16 +150,21 @@ nsLocaleService::nsLocaleService(void)
    28 @@ -149,16 +150,36 @@ nsLocaleService::nsLocaleService(void)
    29              } else {
    29              } else {
    30                  CopyASCIItoUTF16(lang, platformLocale);
    30                  CopyASCIItoUTF16(lang, platformLocale);
    31                  result = nsPosixLocale::GetXPLocale(lang, xpLocale);
    31                  result = nsPosixLocale::GetXPLocale(lang, xpLocale);
    32              }
    32              }
    33          }
    33          }
    34          if (NS_FAILED(result)) {
    34          if (NS_FAILED(result)) {
    35              return;
    35              return;
    36          }
    36          }
    37 +        // LANGUAGE is overriding LC_MESSAGES
    37 +        // LANGUAGE is overriding LC_MESSAGES
       
    38 +        // it can be a colon separated list of preferred languages
       
    39 +        // as we do not recognize here if a language is available
       
    40 +        // we actually only consider the first entry unless GetXPLocale
       
    41 +        // fails completely
    38 +        if (i == LC_MESSAGES && language && *language) {
    42 +        if (i == LC_MESSAGES && language && *language) {
    39 +          CopyASCIItoUTF16(language, platformLocale);
    43 +#define LANGUAGE_SEP ":"
    40 +          result = nsPosixLocale::GetXPLocale(language, xpLocale);
    44 +          nsAutoString xpLocale_temp;
       
    45 +          char* rawBuffer = (char*) language;
       
    46 +          char* token = nsCRT::strtok(rawBuffer, LANGUAGE_SEP, &rawBuffer);
       
    47 +          for (; token;
       
    48 +              token = nsCRT::strtok(rawBuffer, LANGUAGE_SEP, &rawBuffer)) {
       
    49 +            result = nsPosixLocale::GetXPLocale(token, xpLocale_temp);
       
    50 +            if (NS_SUCCEEDED(result)) {
       
    51 +              CopyASCIItoUTF16(token, platformLocale);
       
    52 +              xpLocale = xpLocale_temp;
       
    53 +              break;
       
    54 +            }
       
    55 +          }
    41 +        }
    56 +        }
    42          resultLocale->AddCategory(category, xpLocale);
    57          resultLocale->AddCategory(category, xpLocale);
    43          resultLocale->AddCategory(category_platform, platformLocale);
    58          resultLocale->AddCategory(category_platform, platformLocale);
    44      }
    59      }
    45      mSystemLocale = do_QueryInterface(resultLocale);
    60      mSystemLocale = do_QueryInterface(resultLocale);