added wxLocale::IsAvailable() (extended patch 1547191)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@41147 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -58,6 +58,7 @@ All:
|
||||
|
||||
- Added wxDir::FindFirst() (Francesco Montorsi)
|
||||
- Added wxPlatformInfo class (Francesco Montorsi)
|
||||
- Added wxLocale::IsAvailable() (Creighton)
|
||||
|
||||
All (GUI):
|
||||
|
||||
|
@@ -418,6 +418,24 @@ translate the messages using the message catalogs for this locale.
|
||||
Returns true on success or false if the given locale couldn't be set.
|
||||
|
||||
|
||||
\membersection{wxLocale::IsAvailable}\label{wxlocaleisavailable}
|
||||
|
||||
\func{static bool}{IsAvailable}{\param{int }{lang}}
|
||||
|
||||
Check whether the operating system and/or C run time environment supports
|
||||
this locale. For example in Windows 2000 and Windows XP, support for many
|
||||
locales is not installed by default. Returns \true if the locale is
|
||||
supported.
|
||||
|
||||
The argument \arg{lang} is the wxLanguage identifier. To obtain this for a
|
||||
given a two letter ISO language code, use
|
||||
\helpref{FindLanguageInfo}{wxlocalefindlanguageinfo} to obtain its
|
||||
wxLanguageInfo structure. See \helpref{AddLanguage}{wxlocaleaddlanguage} for
|
||||
the wxLanguageInfo description.
|
||||
|
||||
\newsince{2.7.1}. Currently only implemented under Windows.
|
||||
|
||||
|
||||
\membersection{wxLocale::IsLoaded}\label{wxlocaleisloaded}
|
||||
|
||||
\constfunc{bool}{IsLoaded}{\param{const char* }{domain}}
|
||||
|
@@ -466,6 +466,9 @@ public:
|
||||
bool AddCatalog(const wxChar *szDomain,
|
||||
wxLanguage msgIdLanguage, const wxChar *msgIdCharset);
|
||||
|
||||
// check if the given locale is provided by OS and C run time
|
||||
static bool IsAvailable(int lang);
|
||||
|
||||
// check if the given catalog is loaded
|
||||
bool IsLoaded(const wxChar *szDomain) const;
|
||||
|
||||
|
@@ -57,8 +57,10 @@ public:
|
||||
MyFrame(wxLocale& m_locale);
|
||||
|
||||
public:
|
||||
void OnQuit(wxCommandEvent& event);
|
||||
void OnTestLocaleAvail(wxCommandEvent& event);
|
||||
void OnAbout(wxCommandEvent& event);
|
||||
void OnQuit(wxCommandEvent& event);
|
||||
|
||||
void OnPlay(wxCommandEvent& event);
|
||||
void OnOpen(wxCommandEvent& event);
|
||||
void OnTest1(wxCommandEvent& event);
|
||||
@@ -77,8 +79,8 @@ public:
|
||||
// ID for the menu commands
|
||||
enum
|
||||
{
|
||||
INTERNAT_TEXT = wxID_HIGHEST + 1,
|
||||
INTERNAT_TEST,
|
||||
INTERNAT_TEST = wxID_HIGHEST + 1,
|
||||
INTERNAT_PLAY,
|
||||
INTERNAT_TEST_1,
|
||||
INTERNAT_TEST_2,
|
||||
INTERNAT_TEST_3
|
||||
@@ -140,9 +142,11 @@ wxCOMPILE_TIME_ASSERT( WXSIZEOF(langNames) == WXSIZEOF(langIds),
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
BEGIN_EVENT_TABLE(MyFrame, wxFrame)
|
||||
EVT_MENU(wxID_EXIT, MyFrame::OnQuit)
|
||||
EVT_MENU(INTERNAT_TEST, MyFrame::OnTestLocaleAvail)
|
||||
EVT_MENU(wxID_ABOUT, MyFrame::OnAbout)
|
||||
EVT_MENU(INTERNAT_TEST, MyFrame::OnPlay)
|
||||
EVT_MENU(wxID_EXIT, MyFrame::OnQuit)
|
||||
|
||||
EVT_MENU(INTERNAT_PLAY, MyFrame::OnPlay)
|
||||
EVT_MENU(wxID_OPEN, MyFrame::OnOpen)
|
||||
EVT_MENU(INTERNAT_TEST_1, MyFrame::OnTest1)
|
||||
EVT_MENU(INTERNAT_TEST_2, MyFrame::OnTest2)
|
||||
@@ -221,13 +225,15 @@ bool MyApp::OnInit()
|
||||
|
||||
// Make a menubar
|
||||
wxMenu *file_menu = new wxMenu;
|
||||
file_menu->Append(INTERNAT_TEST, _("&Test locale availability...\tCtrl-T"));
|
||||
file_menu->AppendSeparator();
|
||||
file_menu->Append(wxID_ABOUT, _("&About..."));
|
||||
file_menu->AppendSeparator();
|
||||
file_menu->Append(wxID_EXIT, _("E&xit"));
|
||||
|
||||
wxMenu *test_menu = new wxMenu;
|
||||
test_menu->Append(wxID_OPEN, _("&Open bogus file"));
|
||||
test_menu->Append(INTERNAT_TEST, _("&Play a game"));
|
||||
test_menu->Append(INTERNAT_PLAY, _("&Play a game"));
|
||||
test_menu->AppendSeparator();
|
||||
test_menu->Append(INTERNAT_TEST_1, _("&1 _() (gettext)"));
|
||||
test_menu->Append(INTERNAT_TEST_2, _("&2 _N() (ngettext)"));
|
||||
@@ -339,7 +345,34 @@ void MyFrame::OnPlay(wxCommandEvent& WXUNUSED(event))
|
||||
wxMessageBox(str, _("Result"), wxOK | wxICON_INFORMATION);
|
||||
}
|
||||
|
||||
void MyFrame::OnOpen(wxCommandEvent&)
|
||||
void MyFrame::OnTestLocaleAvail(wxCommandEvent& WXUNUSED(event))
|
||||
{
|
||||
static wxString s_locale;
|
||||
wxString locale = wxGetTextFromUser
|
||||
(
|
||||
_("Enter the locale to test"),
|
||||
wxGetTextFromUserPromptStr,
|
||||
s_locale,
|
||||
this
|
||||
);
|
||||
if ( locale.empty() )
|
||||
return;
|
||||
|
||||
s_locale = locale;
|
||||
const wxLanguageInfo * const info = wxLocale::FindLanguageInfo(s_locale);
|
||||
if ( !info )
|
||||
{
|
||||
wxLogError(_("Locale \"%s\" is unknown."), s_locale.c_str());
|
||||
return;
|
||||
}
|
||||
|
||||
if ( wxLocale::IsAvailable(info->Language) )
|
||||
wxLogMessage(_("Locale \"%s\" is available."), s_locale.c_str());
|
||||
else
|
||||
wxLogWarning(_("Locale \"%s\" is not available."), s_locale.c_str());
|
||||
}
|
||||
|
||||
void MyFrame::OnOpen(wxCommandEvent& WXUNUSED(event))
|
||||
{
|
||||
// open a bogus file -- the error message should be also translated if
|
||||
// you've got wxstd.mo somewhere in the search path
|
||||
|
@@ -2711,6 +2711,31 @@ wxMsgCatalog *wxLocale::FindCatalog(const wxChar *szDomain) const
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// check if the given locale is provided by OS and C run time
|
||||
/* static */
|
||||
bool wxLocale::IsAvailable(int lang)
|
||||
{
|
||||
const wxLanguageInfo *info = wxLocale::GetLanguageInfo(lang);
|
||||
wxCHECK_MSG( info, false, _T("invalid language") );
|
||||
|
||||
#ifdef __WIN32__
|
||||
if ( !info->WinLang )
|
||||
return false;
|
||||
|
||||
if ( !::IsValidLocale
|
||||
(
|
||||
MAKELCID(MAKELANGID(info->WinLang, info->WinSublang),
|
||||
SORT_DEFAULT),
|
||||
LCID_INSTALLED
|
||||
) )
|
||||
return false;
|
||||
#else // !__WIN32__
|
||||
// TODO: test if setlocale(info->CanonicalName) works under other OS?
|
||||
#endif // __WIN32__/!__WIN32__
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
// check if the given catalog is loaded
|
||||
bool wxLocale::IsLoaded(const wxChar *szDomain) const
|
||||
{
|
||||
|
Reference in New Issue
Block a user