X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/c222ad41b23c67d9a0b5b4de0b6a25b03a4974a2..e94d0c1e66cc70f851a1b87f8a6ee19834572d25:/src/common/intl.cpp?ds=sidebyside diff --git a/src/common/intl.cpp b/src/common/intl.cpp index 784aa6253a..b8fec9fdc7 100644 --- a/src/common/intl.cpp +++ b/src/common/intl.cpp @@ -18,12 +18,6 @@ // headers // ---------------------------------------------------------------------------- -#ifdef __EMX__ -// The following define is needed by Innotek's libc to -// make the definition of struct localeconv available. -#define __INTERNAL_DEFS -#endif - // For compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" @@ -31,6 +25,12 @@ #pragma hdrstop #endif +#ifdef __EMX__ +// The following define is needed by Innotek's libc to +// make the definition of struct localeconv available. +#define __INTERNAL_DEFS +#endif + #if wxUSE_INTL #ifndef WX_PRECOMP @@ -1017,21 +1017,25 @@ wxMsgCatalogFile::~wxMsgCatalogFile() static wxString GetMsgCatalogSubdirs(const wxString& prefix, const wxString& lang) { - wxString searchPath; - searchPath << prefix << wxFILE_SEP_PATH << lang; - - // Under Unix, the message catalogs are supposed to go into LC_MESSAGES - // subdirectory so look there too. Note that we do it on all platforms - // and not just Unix, because it doesn't cost much to look into one more - // directory and doing it this way has two important benefits: + // Search first in Unix-standard prefix/lang/LC_MESSAGES, then in + // prefix/lang and finally in just prefix. + // + // Note that we use LC_MESSAGES on all platforms and not just Unix, because + // it doesn't cost much to look into one more directory and doing it this + // way has two important benefits: // a) we don't break compatibility with wx-2.6 and older by stopping to // look in a directory where the catalogs used to be and thus silently // breaking apps after they are recompiled against the latest wx // b) it makes it possible to package app's support files in the same // way on all target platforms - const wxString searchPathOrig(searchPath); - searchPath << wxFILE_SEP_PATH << wxT("LC_MESSAGES") - << wxPATH_SEP << searchPathOrig; + wxString pathPrefix; + pathPrefix << prefix << wxFILE_SEP_PATH << lang; + + wxString searchPath; + searchPath.reserve(4*pathPrefix.length()); + searchPath << pathPrefix << wxFILE_SEP_PATH << "LC_MESSAGES" << wxPATH_SEP + << prefix << wxFILE_SEP_PATH << wxPATH_SEP + << pathPrefix; return searchPath; } @@ -1642,6 +1646,8 @@ static const char *wxSetlocaleTryUTF8(int c, const wxString& lc) bool wxLocale::Init(int language, int flags) { + bool ret = true; + int lang = language; if (lang == wxLANGUAGE_DEFAULT) { @@ -1729,10 +1735,7 @@ bool wxLocale::Init(int language, int flags) } if ( !retloc ) - { - wxLogError(wxT("Cannot set locale to '%s'."), locale.c_str()); - return false; - } + ret = false; #ifdef __AIX__ // at least in AIX 5.2 libc is buggy and the string returned from @@ -1798,8 +1801,7 @@ bool wxLocale::Init(int language, int flags) if (locale.empty()) { wxLogLastError(wxT("SetThreadLocale")); - wxLogError(wxT("Cannot set locale to language %s."), name.c_str()); - return false; + ret = false; } else { @@ -1839,10 +1841,7 @@ bool wxLocale::Init(int language, int flags) } if ( !retloc ) - { - wxLogError(wxT("Cannot set locale to language %s."), name.c_str()); - return false; - } + ret = false; #elif defined(__WXMAC__) if (lang == wxLANGUAGE_DEFAULT) locale = wxEmptyString; @@ -1856,11 +1855,6 @@ bool wxLocale::Init(int language, int flags) // Some C libraries don't like xx_YY form and require xx only retloc = wxSetlocale(LC_ALL, locale.Mid(0,2)); } - if ( !retloc ) - { - wxLogError(wxT("Cannot set locale to '%s'."), locale.c_str()); - return false; - } #else wxUnusedVar(flags); return false; @@ -1868,9 +1862,20 @@ bool wxLocale::Init(int language, int flags) #endif #ifndef WX_NO_LOCALE_SUPPORT - bool ret = Init(name, canonical, retloc, - (flags & wxLOCALE_LOAD_DEFAULT) != 0, - (flags & wxLOCALE_CONV_ENCODING) != 0); + if ( !ret ) + { + wxLogWarning(_("Cannot set locale to language \"%s\"."), name.c_str()); + + // continue nevertheless and try to load at least the translations for + // this language + } + + if ( !Init(name, canonical, retloc, + (flags & wxLOCALE_LOAD_DEFAULT) != 0, + (flags & wxLOCALE_CONV_ENCODING) != 0) ) + { + ret = false; + } if (IsOk()) // setlocale() succeeded m_language = lang;