///////////////////////////////////////////////////////////////////////////// // Name: internat.cpp // Purpose: Demonstrates internationalisation (i18n) support // Author: Vadim Zeitlin/Julian Smart // Modified by: // Created: 04/01/98 // RCS-ID: $Id$ // Copyright: (c) Julian Smart and Markus Holzem // Licence: wxWindows license ///////////////////////////////////////////////////////////////////////////// #ifdef __GNUG__ #pragma implementation #pragma interface #endif // For compilers that support precompilation, includes "wx/wx.h". #include "wx/wxprec.h" #ifdef __BORLANDC__ #pragma hdrstop #endif #ifndef WX_PRECOMP #include "wx/wx.h" #endif #include "wx/intl.h" #include "wx/file.h" #include "wx/log.h" #ifdef __WXGTK__ #include "mondrian.xpm" #endif // Define a new application type class MyApp: public wxApp { public: MyApp(); virtual bool OnInit(); protected: wxLocale m_locale; // locale we'll be using }; // Define a new frame type class MyFrame: public wxFrame { public: MyFrame(wxFrame *frame, const char *title, int x, int y, int w, int h); public: void OnQuit(wxCommandEvent& event); void OnAbout(wxCommandEvent& event); void OnPlay(wxCommandEvent& event); void OnOpen(wxCommandEvent& event); bool OnClose(void) { return TRUE; } DECLARE_EVENT_TABLE() }; // ID for the menu commands enum { MINIMAL_QUIT, MINIMAL_TEXT, MINIMAL_ABOUT, MINIMAL_TEST, MINIMAL_OPEN }; BEGIN_EVENT_TABLE(MyFrame, wxFrame) EVT_MENU(MINIMAL_QUIT, MyFrame::OnQuit) EVT_MENU(MINIMAL_ABOUT, MyFrame::OnAbout) EVT_MENU(MINIMAL_TEST, MyFrame::OnPlay) EVT_MENU(MINIMAL_OPEN, MyFrame::OnOpen) END_EVENT_TABLE() IMPLEMENT_APP(MyApp) MyApp::MyApp() : m_locale("french", "fr", "C") { // catalogs we'll be using: /* not needed any more, done in wxLocale ctor m_locale.AddCatalog("wxstd"); // 1) for library messages */ m_locale.AddCatalog("internat"); // 2) our private one /* this catalog is installed in standard location on Linux systems, it might not be installed on yours - just ignore the errrors or comment out this line then */ m_locale.AddCatalog("fileutils"); // 3) and another just for testing } // `Main program' equivalent, creating windows and returning main app frame bool MyApp::OnInit(void) { // Create the main frame window MyFrame *frame = new MyFrame(NULL, _("Minimal wxWindows App"), 50, 50, 150, 40); // Give it an icon #ifdef __WXMSW__ frame->SetIcon(wxIcon("mondrian")); #else frame->SetIcon(wxIcon(mondrian_xpm)); #endif // Make a menubar wxMenu *file_menu = new wxMenu; file_menu->Append(MINIMAL_ABOUT, _("&About")); file_menu->AppendSeparator(); file_menu->Append(MINIMAL_QUIT, _("E&xit")); wxMenu *test_menu = new wxMenu; test_menu->Append(MINIMAL_OPEN, _("&Open bogus file")); test_menu->Append(MINIMAL_TEST, _("&Play a game")); wxMenuBar *menu_bar = new wxMenuBar; menu_bar->Append(file_menu, _("&File")); menu_bar->Append(test_menu, _("&Test")); frame->SetMenuBar(menu_bar); // Show the frame frame->Show(TRUE); SetTopWindow(frame); return TRUE; } // My frame constructor MyFrame::MyFrame(wxFrame *frame, const char *title, int x, int y, int w, int h) : wxFrame(frame, -1, title, wxPoint(x, y), wxSize(w, h)) { } void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event) ) { Close(TRUE); } void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event)) { wxMessageDialog(this, _("I18n sample\nŠ Vadim Zeitlin & Julian Smart"), _("About Internat"), wxOK | wxICON_INFORMATION).ShowModal(); } void MyFrame::OnPlay(wxCommandEvent& WXUNUSED(event)) { wxString str = wxGetTextFromUser(_("Enter your number:"), _("Try to guess my number!"), "", this); int num; sscanf(str, "%d", &num); if ( num == 0 ) str = _("you've probably entered an invalid number."); else if ( num == 9 ) // this message is not translated (not in catalog) str = _("you've found a bug in this program!"); else if ( num != 17 ) // a more implicit way to write _() str = wxGetTranslation("bad luck! try again..."); else { str.Empty(); // string must be split in two -- otherwise the translation won't be found str << _("congratulations! you've won. Here is the magic phrase:") << _("cannot create fifo `%s'"); } wxMessageBox(str, _("Result"), wxOK | wxICON_INFORMATION); } void MyFrame::OnOpen(wxCommandEvent&) { // open a bogus file -- the error message should be also translated if you've // got wxstd.mo somewhere in the search path wxFile file("NOTEXIST.ING"); }