X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/ca6a9a148646fb024d76b3e19c940ace56eec1f8..0aaa804e7019b8187e2d35dffba133b43af79533:/src/common/intl.cpp diff --git a/src/common/intl.cpp b/src/common/intl.cpp index 742fd49fb3..d47dbea5b1 100644 --- a/src/common/intl.cpp +++ b/src/common/intl.cpp @@ -1600,6 +1600,18 @@ bool wxLocale::Init(int language, int flags) wxMB2WXbuf retloc = wxSetlocaleTryUTF(LC_ALL, locale); +#ifdef __AIX__ + // at least in AIX 5.2 libc is buggy and the string returned from setlocale(LC_ALL) + // can't be passed back to it because it returns 6 strings (one for each locale + // category), i.e. for C locale we get back "C C C C C C" + // + // this contradicts IBM own docs but this is not of much help, so just work around + // it in the crudest possible manner + wxChar *p = wxStrchr((wxChar *)retloc, _T(' ')); + if ( p ) + *p = _T('\0'); +#endif // __AIX__ + if ( !retloc ) { // Some C libraries don't like xx_YY form and require xx only @@ -2267,35 +2279,9 @@ wxString wxLocale::GetSystemEncodingName() if ( alang ) { - // 7 bit ASCII encoding has several alternative names which we should - // recognize to avoid warnings about unrecognized encoding on each - // program startup - - // nl_langinfo() under Solaris returns 646 by default which stands for - // ISO-646, i.e. 7 bit ASCII - // - // and recent glibc call it ANSI_X3.4-1968... - // - // HP-UX uses HP-Roman8 cset which is not the same as ASCII (see RFC - // 1345 for its definition) but must be recognized as otherwise HP - // users get a warning about it on each program startup, so handle it - // here -- but it would be obviously better to add real supprot to it, - // of course! - if ( strcmp(alang, "646") == 0 - || strcmp(alang, "ANSI_X3.4-1968") == 0 -#ifdef __HPUX__ - || strcmp(alang, "roman8") == 0 -#endif // __HPUX__ - ) - { - encname = _T("US-ASCII"); - } - else - { - encname = wxString::FromAscii( alang ); - } + encname = wxString::FromAscii( alang ); } - else + else // nl_langinfo() failed #endif // HAVE_LANGINFO_H { // if we can't get at the character set directly, try to see if it's in @@ -2371,16 +2357,15 @@ wxFontEncoding wxLocale::GetSystemEncoding() #endif return wxMacGetFontEncFromSystemEnc( encoding ) ; #elif defined(__UNIX_LIKE__) && wxUSE_FONTMAP - wxString encname = GetSystemEncodingName(); + const wxString encname = GetSystemEncodingName(); if ( !encname.empty() ) { - wxFontEncoding enc = (wxFontMapperBase::Get())-> - CharsetToEncoding(encname, false /* not interactive */); + wxFontEncoding enc = wxFontMapperBase::GetEncodingFromName(encname); // on some modern Linux systems (RedHat 8) the default system locale // is UTF8 -- but it isn't supported by wxGTK in ANSI build at all so // don't even try to use it in this case -#if !wxUSE_UNICODE +#if !wxUSE_UNICODE && defined(__WXGTK__) if ( enc == wxFONTENCODING_UTF8 ) { // the most similar supported encoding... @@ -2388,13 +2373,11 @@ wxFontEncoding wxLocale::GetSystemEncoding() } #endif // !wxUSE_UNICODE - // this should probably be considered as a bug in CharsetToEncoding(): - // it shouldn't return wxFONTENCODING_DEFAULT at all - but it does it - // for US-ASCII charset - // - // we, OTOH, definitely shouldn't return it as it doesn't make sense at - // all (which encoding is it?) - if ( enc != wxFONTENCODING_DEFAULT ) + // GetEncodingFromName() returns wxFONTENCODING_DEFAULT for C locale + // (a.k.a. US-ASCII) which is arguably a bug but keep it like this for + // backwards compatibility and just take care to not return + // wxFONTENCODING_DEFAULT from here as this surely doesn't make sense + if ( enc != wxFONTENCODING_MAX && enc != wxFONTENCODING_DEFAULT ) { return enc; } @@ -2555,20 +2538,12 @@ const wxChar *wxLocale::GetString(const wxChar *szOrigString, { NoTransErr noTransErr; - if ( szDomain != NULL ) - { - wxLogTrace(TRACE_I18N, - _T("string '%s'[%lu] not found in domain '%s' for locale '%s'."), - szOrigString, (unsigned long)n, - szDomain, m_strLocale.c_str()); - - } - else - { - wxLogTrace(TRACE_I18N, - _T("string '%s'[%lu] not found in locale '%s'."), - szOrigString, (unsigned long)n, m_strLocale.c_str()); - } + wxLogTrace(TRACE_I18N, + _T("string \"%s\"[%ld] not found in %slocale '%s'."), + szOrigString, (long)n, + szDomain ? wxString::Format(_T("domain '%s' "), szDomain).c_str() + : _T(""), + m_strLocale.c_str()); } #endif // __WXDEBUG__