From: Robin Dunn Date: Sat, 2 Dec 2006 04:52:46 +0000 (+0000) Subject: Implemented wxLocale::IsAvailable for unix systems X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/327bf990ab194b68e162157ac3e03dd5b6449ff4?ds=sidebyside Implemented wxLocale::IsAvailable for unix systems git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@43738 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/docs/latex/wx/locale.tex b/docs/latex/wx/locale.tex index 66197b87e8..7acf7cf621 100644 --- a/docs/latex/wx/locale.tex +++ b/docs/latex/wx/locale.tex @@ -433,7 +433,7 @@ given a two letter ISO language code, use wxLanguageInfo structure. See \helpref{AddLanguage}{wxlocaleaddlanguage} for the wxLanguageInfo description. -\newsince{2.7.1}. Currently only implemented under Windows. +\newsince{2.7.1}. \membersection{wxLocale::IsLoaded}\label{wxlocaleisloaded} diff --git a/src/common/intl.cpp b/src/common/intl.cpp index 4d689229a7..93052fae79 100644 --- a/src/common/intl.cpp +++ b/src/common/intl.cpp @@ -2724,7 +2724,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 +2734,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; }