translate wxMessageDialog labels to the language of the current locale (closes #10962)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@61319 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -371,6 +371,7 @@ GTK:
|
||||
|
||||
MSW:
|
||||
|
||||
- Translate wxMessageDialog labels to the language of the current locale.
|
||||
- Allow changing the height of wxChoice and wxComboBox.
|
||||
- Update CRT environment block in wxSetEnv() too.
|
||||
- Fix wxMDIChildFrame::SetSize() (Lars Rosenboom).
|
||||
|
@@ -76,6 +76,7 @@ public:
|
||||
void OnTest1(wxCommandEvent& event);
|
||||
void OnTest2(wxCommandEvent& event);
|
||||
void OnTest3(wxCommandEvent& event);
|
||||
void OnTestMsgBox(wxCommandEvent& event);
|
||||
|
||||
DECLARE_EVENT_TABLE()
|
||||
|
||||
@@ -93,7 +94,8 @@ enum
|
||||
INTERNAT_PLAY,
|
||||
INTERNAT_TEST_1,
|
||||
INTERNAT_TEST_2,
|
||||
INTERNAT_TEST_3
|
||||
INTERNAT_TEST_3,
|
||||
INTERNAT_TEST_MSGBOX
|
||||
};
|
||||
|
||||
// language data
|
||||
@@ -163,6 +165,7 @@ BEGIN_EVENT_TABLE(MyFrame, wxFrame)
|
||||
EVT_MENU(INTERNAT_TEST_1, MyFrame::OnTest1)
|
||||
EVT_MENU(INTERNAT_TEST_2, MyFrame::OnTest2)
|
||||
EVT_MENU(INTERNAT_TEST_3, MyFrame::OnTest3)
|
||||
EVT_MENU(INTERNAT_TEST_MSGBOX, MyFrame::OnTestMsgBox)
|
||||
END_EVENT_TABLE()
|
||||
|
||||
IMPLEMENT_APP(MyApp)
|
||||
@@ -302,6 +305,8 @@ MyFrame::MyFrame(wxLocale& locale)
|
||||
test_menu->Append(INTERNAT_TEST_1, _("&1 _() (gettext)"), _("Tests the _() macro"));
|
||||
test_menu->Append(INTERNAT_TEST_2, _("&2 _N() (ngettext)"), _("Tests the _N() macro"));
|
||||
test_menu->Append(INTERNAT_TEST_3, _("&3 wxTRANSLATE() (gettext_noop)"), _("Tests the wxTRANSLATE() macro"));
|
||||
test_menu->Append(INTERNAT_TEST_MSGBOX, _("&Message box test"),
|
||||
_("Tests message box buttons labels translation"));
|
||||
|
||||
wxMenuBar *menu_bar = new wxMenuBar;
|
||||
menu_bar->Append(file_menu, _("&File"));
|
||||
@@ -498,4 +503,17 @@ void MyFrame::OnTest3(wxCommandEvent& WXUNUSED(event))
|
||||
wxMessageBox(s);
|
||||
}
|
||||
|
||||
|
||||
void MyFrame::OnTestMsgBox(wxCommandEvent& WXUNUSED(event))
|
||||
{
|
||||
if ( wxMessageBox
|
||||
(
|
||||
_("Are the labels of the buttons in this message box "
|
||||
"translated into the current locale language?"),
|
||||
_("wxWidgets i18n sample"),
|
||||
wxYES_NO,
|
||||
this
|
||||
) != wxYES )
|
||||
{
|
||||
wxMessageBox(_("Please report the details of your platform to us."));
|
||||
}
|
||||
}
|
||||
|
@@ -30,6 +30,7 @@
|
||||
|
||||
#ifndef WX_PRECOMP
|
||||
#include "wx/app.h"
|
||||
#include "wx/intl.h"
|
||||
#include "wx/utils.h"
|
||||
#include "wx/dialog.h"
|
||||
#if wxUSE_MSGBOX_HOOK
|
||||
@@ -445,6 +446,34 @@ int wxMessageDialog::ShowModal()
|
||||
m_parent = GetParentForModalDialog();
|
||||
HWND hWnd = m_parent ? GetHwndOf(m_parent) : NULL;
|
||||
|
||||
#if wxUSE_INTL
|
||||
// native message box always uses the current user locale but the program
|
||||
// may be using a different one and in this case we need to manually
|
||||
// translate the button labels to avoid mismatch between the language of
|
||||
// the message box text and its buttons
|
||||
wxLocale * const loc = wxGetLocale();
|
||||
if ( loc && loc->GetLanguage() != wxLocale::GetSystemLanguage() )
|
||||
{
|
||||
if ( m_dialogStyle & wxYES_NO )
|
||||
{
|
||||
// use the strings with mnemonics here as the native message box
|
||||
// does
|
||||
SetYesNoLabels(_("&Yes"), _("&No"));
|
||||
}
|
||||
|
||||
// we may or not have the Ok/Cancel buttons but either we do have them
|
||||
// or we already made the labels custom because we called
|
||||
// SetYesNoLabels() above so doing this does no harm -- and is
|
||||
// necessary in wxYES_NO | wxCANCEL case
|
||||
//
|
||||
// note that we don't use mnemonics here for consistency with the
|
||||
// native message box (which probably doesn't use them because
|
||||
// Enter/Esc keys can be already used to dismiss the message box
|
||||
// using keyboard)
|
||||
SetOKCancelLabels(_("OK"), _("Cancel"));
|
||||
}
|
||||
#endif // wxUSE_INTL
|
||||
|
||||
// translate wx style in MSW
|
||||
unsigned int msStyle;
|
||||
const long wxStyle = GetMessageDialogStyle();
|
||||
|
Reference in New Issue
Block a user