]> git.saurik.com Git - wxWidgets.git/commitdiff
added wxLocale::IsAvailable() (extended patch 1547191)
authorVadim Zeitlin <vadim@wxwidgets.org>
Sun, 10 Sep 2006 23:28:20 +0000 (23:28 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Sun, 10 Sep 2006 23:28:20 +0000 (23:28 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@41147 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

docs/changes.txt
docs/latex/wx/locale.tex
include/wx/intl.h
samples/internat/internat.cpp
src/common/intl.cpp

index c108d27e8e767a2cd5f6d7933555e3dd583967c2..d73fca8361ce99669e7a532c7dce3f6bb0ffa291 100644 (file)
@@ -58,6 +58,7 @@ All:
 
 - Added wxDir::FindFirst() (Francesco Montorsi)
 - Added wxPlatformInfo class (Francesco Montorsi)
 
 - Added wxDir::FindFirst() (Francesco Montorsi)
 - Added wxPlatformInfo class (Francesco Montorsi)
+- Added wxLocale::IsAvailable() (Creighton)
 
 All (GUI):
 
 
 All (GUI):
 
index a8d51c9378a666d1ed51156151834ec5375ed7f2..66197b87e8a2c9d7934f8b44e218cf80d494bb0e 100644 (file)
@@ -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}
 
 \constfunc{bool}{IsLoaded}{\param{const char* }{domain}}
 \membersection{wxLocale::IsLoaded}\label{wxlocaleisloaded}
 
 \constfunc{bool}{IsLoaded}{\param{const char* }{domain}}
index e7dcff8a9175bdb4cd3f789e5e80798a07bb32e5..471d9ad9bab693c51aa48737108a68fa31313421 100644 (file)
@@ -466,6 +466,9 @@ public:
     bool AddCatalog(const wxChar *szDomain,
                     wxLanguage msgIdLanguage, const wxChar *msgIdCharset);
 
     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;
 
     // check if the given catalog is loaded
     bool IsLoaded(const wxChar *szDomain) const;
 
index 4bde4cdea48d84ba1a45c7565337669249ff9436..7f7b8b9cb248293d55145d6e065bd1dcf678bac8 100644 (file)
@@ -57,8 +57,10 @@ public:
     MyFrame(wxLocale& m_locale);
 
 public:
     MyFrame(wxLocale& m_locale);
 
 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 OnOpen(wxCommandEvent& event);
     void OnTest1(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
 {
 // 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
     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)
 // ----------------------------------------------------------------------------
 
 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(INTERNAT_TEST_1, MyFrame::OnTest1)
     EVT_MENU(INTERNAT_TEST_2, MyFrame::OnTest2)
     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;
 
     // 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"));
     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)"));
     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);
 }
 
     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
 {
     // open a bogus file -- the error message should be also translated if
     // you've got wxstd.mo somewhere in the search path
index ccc1418e29da724d97fc07cd974d65ba03cf9c14..4915e52efe3c8de0ccab96e3663aa47033f03aac 100644 (file)
@@ -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
 bool wxLocale::IsLoaded(const wxChar *szDomain) const
 {
 // check if the given catalog is loaded
 bool wxLocale::IsLoaded(const wxChar *szDomain) const
 {