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:
Vadim Zeitlin
2009-07-05 11:48:01 +00:00
parent 60c4147a07
commit 42c097b83e
3 changed files with 50 additions and 2 deletions

View File

@@ -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).

View File

@@ -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."));
}
}

View File

@@ -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();