Implemented wxLocale::IsAvailable for unix systems

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@43738 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Robin Dunn
2006-12-02 04:52:46 +00:00
parent 13db99f1f5
commit 327bf990ab
2 changed files with 19 additions and 6 deletions

View File

@@ -433,7 +433,7 @@ given a two letter ISO language code, use
wxLanguageInfo structure. See \helpref{AddLanguage}{wxlocaleaddlanguage} for wxLanguageInfo structure. See \helpref{AddLanguage}{wxlocaleaddlanguage} for
the wxLanguageInfo description. the wxLanguageInfo description.
\newsince{2.7.1}. Currently only implemented under Windows. \newsince{2.7.1}.
\membersection{wxLocale::IsLoaded}\label{wxlocaleisloaded} \membersection{wxLocale::IsLoaded}\label{wxlocaleisloaded}

View File

@@ -2724,7 +2724,7 @@ bool wxLocale::IsAvailable(int lang)
const wxLanguageInfo *info = wxLocale::GetLanguageInfo(lang); const wxLanguageInfo *info = wxLocale::GetLanguageInfo(lang);
wxCHECK_MSG( info, false, _T("invalid language") ); wxCHECK_MSG( info, false, _T("invalid language") );
#ifdef __WIN32__ #if defined(__WIN32__)
if ( !info->WinLang ) if ( !info->WinLang )
return false; return false;
@@ -2735,9 +2735,22 @@ bool wxLocale::IsAvailable(int lang)
LCID_INSTALLED LCID_INSTALLED
) ) ) )
return false; return false;
#else // !__WIN32__
// TODO: test if setlocale(info->CanonicalName) works under other OS? #elif defined(__UNIX__)
#endif // __WIN32__/!__WIN32__
// 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; return true;
} }