X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/449090b54d2e74bfd28c217bab25d11764ca38cc..63e02796620637b50a96d74a2264f3dea8def866:/src/common/intl.cpp diff --git a/src/common/intl.cpp b/src/common/intl.cpp index 4d689229a7..95eb80b3e1 100644 --- a/src/common/intl.cpp +++ b/src/common/intl.cpp @@ -18,12 +18,6 @@ // headers // ---------------------------------------------------------------------------- -#if defined(__BORLAND__) && !defined(__WXDEBUG__) - // There's a bug in Borland's compiler that breaks wxLocale with -O2, - // so make sure that flag is not used for this file: - #pragma option -O1 -#endif - #ifdef __EMX__ // The following define is needed by Innotek's libc to // make the definition of struct localeconv available. @@ -1719,7 +1713,7 @@ bool wxLocale::Init(int language, int flags) { retloc = wxSetlocaleTryUTF(LC_ALL, localeAlt); if ( !retloc ) - retloc = wxSetlocaleTryUTF(LC_ALL, locale.Left(2)); + retloc = wxSetlocaleTryUTF(LC_ALL, localeAlt.Left(2)); } } @@ -1904,14 +1898,14 @@ void wxLocale::AddCatalogLookupPathPrefix(const wxString& prefix) !wxGetEnv(wxT("LC_MESSAGES"), &langFull) && !wxGetEnv(wxT("LANG"), &langFull)) { - // no language specified, threat it as English - return wxLANGUAGE_ENGLISH; + // no language specified, treat it as English + return wxLANGUAGE_ENGLISH_US; } if ( langFull == _T("C") || langFull == _T("POSIX") ) { - // default C locale - return wxLANGUAGE_ENGLISH; + // default C locale is English too + return wxLANGUAGE_ENGLISH_US; } // the language string has the following form @@ -2505,7 +2499,9 @@ const wxLanguageInfo *wxLocale::GetLanguageInfo(int lang) { if ( ms_languagesDB->Item(i).Language == lang ) { - return &ms_languagesDB->Item(i); + // We need to create a temporary here in order to make this work with BCC in final build mode + wxLanguageInfo *ptr = &ms_languagesDB->Item(i); + return ptr; } } @@ -2724,7 +2720,7 @@ bool wxLocale::IsAvailable(int lang) const wxLanguageInfo *info = wxLocale::GetLanguageInfo(lang); wxCHECK_MSG( info, false, _T("invalid language") ); -#ifdef __WIN32__ +#if defined(__WIN32__) if ( !info->WinLang ) return false; @@ -2734,10 +2730,23 @@ bool wxLocale::IsAvailable(int lang) SORT_DEFAULT), LCID_INSTALLED ) ) - return false; -#else // !__WIN32__ - // TODO: test if setlocale(info->CanonicalName) works under other OS? -#endif // __WIN32__/!__WIN32__ + return false; + +#elif defined(__UNIX__) + + // Test if setting the locale works, then set it back. + wxMB2WXbuf oldLocale = wxSetlocale(LC_ALL, wxEmptyString); + wxMB2WXbuf tmp = wxSetlocaleTryUTF(LC_ALL, info->CanonicalName); + if ( !tmp ) + { + // Some C libraries don't like xx_YY form and require xx only + tmp = wxSetlocaleTryUTF(LC_ALL, info->CanonicalName.Left(2)); + if ( !tmp ) + return false; + } + // restore the original locale + wxSetlocale(LC_ALL, oldLocale); +#endif return true; } @@ -2751,7 +2760,7 @@ bool wxLocale::IsLoaded(const wxChar *szDomain) const // add a catalog to our linked list bool wxLocale::AddCatalog(const wxChar *szDomain) { - return AddCatalog(szDomain, wxLANGUAGE_ENGLISH, NULL); + return AddCatalog(szDomain, wxLANGUAGE_ENGLISH_US, NULL); } // add a catalog to our linked list