void OnTest1(wxCommandEvent& event);
void OnTest2(wxCommandEvent& event);
void OnTest3(wxCommandEvent& event);
+ void OnTestMsgBox(wxCommandEvent& event);
DECLARE_EVENT_TABLE()
INTERNAT_PLAY,
INTERNAT_TEST_1,
INTERNAT_TEST_2,
- INTERNAT_TEST_3
+ INTERNAT_TEST_3,
+ INTERNAT_TEST_MSGBOX
};
// language data
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)
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"));
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."));
+ }
+}
#ifndef WX_PRECOMP
#include "wx/app.h"
+ #include "wx/intl.h"
#include "wx/utils.h"
#include "wx/dialog.h"
#if wxUSE_MSGBOX_HOOK
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();