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 wxDir::FindFirst() (Francesco Montorsi)
|
||||||
- Added wxPlatformInfo class (Francesco Montorsi)
|
- Added wxPlatformInfo class (Francesco Montorsi)
|
||||||
|
- Added wxLocale::IsAvailable() (Creighton)
|
||||||
|
|
||||||
All (GUI):
|
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.
|
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}
|
\membersection{wxLocale::IsLoaded}\label{wxlocaleisloaded}
|
||||||
|
|
||||||
\constfunc{bool}{IsLoaded}{\param{const char* }{domain}}
|
\constfunc{bool}{IsLoaded}{\param{const char* }{domain}}
|
||||||
|
@@ -466,6 +466,9 @@ public:
|
|||||||
bool AddCatalog(const wxChar *szDomain,
|
bool AddCatalog(const wxChar *szDomain,
|
||||||
wxLanguage msgIdLanguage, const wxChar *msgIdCharset);
|
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
|
// check if the given catalog is loaded
|
||||||
bool IsLoaded(const wxChar *szDomain) const;
|
bool IsLoaded(const wxChar *szDomain) const;
|
||||||
|
|
||||||
|
@@ -57,8 +57,10 @@ public:
|
|||||||
MyFrame(wxLocale& m_locale);
|
MyFrame(wxLocale& m_locale);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
void OnQuit(wxCommandEvent& event);
|
void OnTestLocaleAvail(wxCommandEvent& event);
|
||||||
void OnAbout(wxCommandEvent& event);
|
void OnAbout(wxCommandEvent& event);
|
||||||
|
void OnQuit(wxCommandEvent& event);
|
||||||
|
|
||||||
void OnPlay(wxCommandEvent& event);
|
void OnPlay(wxCommandEvent& event);
|
||||||
void OnOpen(wxCommandEvent& event);
|
void OnOpen(wxCommandEvent& event);
|
||||||
void OnTest1(wxCommandEvent& event);
|
void OnTest1(wxCommandEvent& event);
|
||||||
@@ -77,8 +79,8 @@ public:
|
|||||||
// ID for the menu commands
|
// ID for the menu commands
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
INTERNAT_TEXT = wxID_HIGHEST + 1,
|
INTERNAT_TEST = wxID_HIGHEST + 1,
|
||||||
INTERNAT_TEST,
|
INTERNAT_PLAY,
|
||||||
INTERNAT_TEST_1,
|
INTERNAT_TEST_1,
|
||||||
INTERNAT_TEST_2,
|
INTERNAT_TEST_2,
|
||||||
INTERNAT_TEST_3
|
INTERNAT_TEST_3
|
||||||
@@ -140,9 +142,11 @@ wxCOMPILE_TIME_ASSERT( WXSIZEOF(langNames) == WXSIZEOF(langIds),
|
|||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
BEGIN_EVENT_TABLE(MyFrame, wxFrame)
|
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(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(wxID_OPEN, MyFrame::OnOpen)
|
||||||
EVT_MENU(INTERNAT_TEST_1, MyFrame::OnTest1)
|
EVT_MENU(INTERNAT_TEST_1, MyFrame::OnTest1)
|
||||||
EVT_MENU(INTERNAT_TEST_2, MyFrame::OnTest2)
|
EVT_MENU(INTERNAT_TEST_2, MyFrame::OnTest2)
|
||||||
@@ -221,13 +225,15 @@ bool MyApp::OnInit()
|
|||||||
|
|
||||||
// Make a menubar
|
// Make a menubar
|
||||||
wxMenu *file_menu = new wxMenu;
|
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->Append(wxID_ABOUT, _("&About..."));
|
||||||
file_menu->AppendSeparator();
|
file_menu->AppendSeparator();
|
||||||
file_menu->Append(wxID_EXIT, _("E&xit"));
|
file_menu->Append(wxID_EXIT, _("E&xit"));
|
||||||
|
|
||||||
wxMenu *test_menu = new wxMenu;
|
wxMenu *test_menu = new wxMenu;
|
||||||
test_menu->Append(wxID_OPEN, _("&Open bogus file"));
|
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->AppendSeparator();
|
||||||
test_menu->Append(INTERNAT_TEST_1, _("&1 _() (gettext)"));
|
test_menu->Append(INTERNAT_TEST_1, _("&1 _() (gettext)"));
|
||||||
test_menu->Append(INTERNAT_TEST_2, _("&2 _N() (ngettext)"));
|
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);
|
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
|
// open a bogus file -- the error message should be also translated if
|
||||||
// you've got wxstd.mo somewhere in the search path
|
// you've got wxstd.mo somewhere in the search path
|
||||||
|
@@ -2711,6 +2711,31 @@ wxMsgCatalog *wxLocale::FindCatalog(const wxChar *szDomain) const
|
|||||||
return NULL;
|
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
|
// check if the given catalog is loaded
|
||||||
bool wxLocale::IsLoaded(const wxChar *szDomain) const
|
bool wxLocale::IsLoaded(const wxChar *szDomain) const
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user