home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / wxos2240.zip / wxWindows-2.4.0 / samples / internat / internat.cpp next >
C/C++ Source or Header  |  2002-11-10  |  6KB  |  218 lines

  1. /////////////////////////////////////////////////////////////////////////////
  2. // Name:        internat.cpp
  3. // Purpose:     Demonstrates internationalisation (i18n) support
  4. // Author:      Vadim Zeitlin/Julian Smart
  5. // Modified by:
  6. // Created:     04/01/98
  7. // RCS-ID:      $Id: internat.cpp,v 1.24.2.3 2002/11/10 15:01:56 VS Exp $
  8. // Copyright:   (c) Julian Smart and Markus Holzem
  9. // Licence:     wxWindows license
  10. /////////////////////////////////////////////////////////////////////////////
  11.  
  12. #if defined(__GNUG__) && !defined(__APPLE__)
  13. #pragma implementation
  14. #pragma interface
  15. #endif
  16.  
  17. // For compilers that support precompilation, includes "wx/wx.h".
  18. #include "wx/wxprec.h"
  19.  
  20. #ifdef __BORLANDC__
  21. #pragma hdrstop
  22. #endif
  23.  
  24. #ifndef WX_PRECOMP
  25. #include "wx/wx.h"
  26. #endif
  27.  
  28. #include "wx/intl.h"
  29. #include "wx/file.h"
  30. #include "wx/log.h"
  31.  
  32. #if defined(__WXGTK__) || defined(__WXX11__) || defined(__WXMOTIF__) || defined(__WXMAC__) || defined(__WXMGL__)
  33. #include "mondrian.xpm"
  34. #endif
  35.  
  36. // Define a new application type
  37. class MyApp: public wxApp
  38. {
  39. public:
  40.     virtual bool OnInit();
  41.  
  42. protected:
  43.     wxLocale m_locale; // locale we'll be using
  44. };
  45.  
  46. // Define a new frame type
  47. class MyFrame: public wxFrame
  48. {
  49. public:
  50.     MyFrame(wxFrame *frame, const wxChar *title,
  51.         const wxPoint& pos, const wxSize& size, wxLocale& m_locale);
  52.  
  53. public:
  54.     void OnQuit(wxCommandEvent& event);
  55.     void OnAbout(wxCommandEvent& event);
  56.     void OnPlay(wxCommandEvent& event);
  57.     void OnOpen(wxCommandEvent& event);
  58.  
  59.     DECLARE_EVENT_TABLE()
  60.  
  61.     wxLocale& m_locale;
  62. };
  63.  
  64. // ID for the menu commands
  65. enum
  66. {
  67.     MINIMAL_QUIT = 1,
  68.     MINIMAL_TEXT,
  69.     MINIMAL_TEST,
  70.     MINIMAL_OPEN
  71. };
  72.  
  73. BEGIN_EVENT_TABLE(MyFrame, wxFrame)
  74.     EVT_MENU(MINIMAL_QUIT, MyFrame::OnQuit)
  75.     EVT_MENU(wxID_ABOUT, MyFrame::OnAbout)
  76.     EVT_MENU(MINIMAL_TEST, MyFrame::OnPlay)
  77.     EVT_MENU(MINIMAL_OPEN, MyFrame::OnOpen)
  78. END_EVENT_TABLE()
  79.  
  80. IMPLEMENT_APP(MyApp)
  81.  
  82.  
  83. // `Main program' equivalent, creating windows and returning main app frame
  84. bool MyApp::OnInit()
  85. {
  86.     const wxString langs[] =
  87.     {
  88.         _T("(System default)"),
  89.         _T("French"),
  90.         _T("German"),
  91.         _T("Russian"),
  92.         _T("English"),
  93.         _T("English (U.S.)")
  94.     };
  95.  
  96.     SetExitOnFrameDelete(FALSE);
  97.     int lng = wxGetSingleChoiceIndex(_T("Please choose language:"), _T("Language"), 
  98.                                    WXSIZEOF(langs), langs);
  99.     SetExitOnFrameDelete(TRUE);
  100.  
  101.     switch (lng)
  102.     {
  103.         case 0 : m_locale.Init(wxLANGUAGE_DEFAULT); break;
  104.         case 1 : m_locale.Init(wxLANGUAGE_FRENCH); break;
  105.         case 2 : m_locale.Init(wxLANGUAGE_GERMAN); break;
  106.         case 3 : m_locale.Init(wxLANGUAGE_RUSSIAN); break;
  107.         case 4 : m_locale.Init(wxLANGUAGE_ENGLISH); break;
  108.         case -1:
  109.         case 5 : m_locale.Init(wxLANGUAGE_ENGLISH_US); break;
  110.     }
  111.  
  112.     // Initialize the catalogs we'll be using
  113.     /* not needed any more, done in wxLocale ctor
  114.     m_locale.AddCatalog("wxstd");      // 1) for library messages
  115.     */
  116.     m_locale.AddCatalog(wxT("internat"));      // 2) our private one
  117.     /* this catalog is installed in standard location on Linux systems,
  118.      it might not be installed on yours - just ignore the errrors
  119.      or comment out this line then */
  120. #ifdef __LINUX__
  121.     {
  122.     wxLogNull noLog;
  123.     m_locale.AddCatalog(_T("fileutils"));  // 3) and another just for testing
  124.     }
  125. #endif
  126.  
  127.     // Create the main frame window
  128.     MyFrame *frame = new MyFrame( (wxFrame *) NULL,
  129.         _("International wxWindows App"), wxPoint(50, 50), wxSize(350, 60),
  130.         m_locale);
  131.  
  132.     // Give it an icon
  133.     frame->SetIcon(wxICON(mondrian));
  134.  
  135.     // Make a menubar
  136.     wxMenu *file_menu = new wxMenu;
  137.     file_menu->Append(wxID_ABOUT, _("&About..."));
  138.     file_menu->AppendSeparator();
  139.     file_menu->Append(MINIMAL_QUIT, _("E&xit"));
  140.  
  141.     wxMenu *test_menu = new wxMenu;
  142.     test_menu->Append(MINIMAL_OPEN, _("&Open bogus file"));
  143.     test_menu->Append(MINIMAL_TEST, _("&Play a game"));
  144.  
  145.     wxMenuBar *menu_bar = new wxMenuBar;
  146.     menu_bar->Append(file_menu, _("&File"));
  147.     menu_bar->Append(test_menu, _("&Test"));
  148.     frame->SetMenuBar(menu_bar);
  149.  
  150.     // Show the frame
  151.     frame->Show(TRUE);
  152.     SetTopWindow(frame);
  153.  
  154.     return TRUE;
  155. }
  156.  
  157. // My frame constructor
  158. MyFrame::MyFrame(wxFrame *frame, const wxChar *title,
  159.     const wxPoint& pos, const wxSize& size, wxLocale& l)
  160.        : wxFrame(frame, -1, title, pos, size),
  161.          m_locale(l)
  162. {
  163.     // Empty
  164. }
  165.  
  166. void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event) )
  167. {
  168.     Close(TRUE);
  169. }
  170.  
  171. void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event))
  172. {
  173.     wxString localeInfo;
  174.     wxString locale = m_locale.GetLocale();
  175.     wxString sysname = m_locale.GetSysName();
  176.     wxString canname = m_locale.GetCanonicalName();
  177.  
  178.     localeInfo.Printf( _("Language: %s\nSystem locale name: %s\nCanonical locale name: %s\n"),
  179.         locale.c_str(), sysname.c_str(), canname.c_str() );
  180.  
  181.     wxMessageDialog(this, wxString(_("I18n sample\n(c) 1998, 1999 Vadim Zeitlin and Julian Smart"))
  182.         + wxT("\n\n") + localeInfo,
  183.         _("About Internat"), wxOK | wxICON_INFORMATION).ShowModal();
  184. }
  185.  
  186. void MyFrame::OnPlay(wxCommandEvent& WXUNUSED(event))
  187. {
  188.     wxString str = wxGetTextFromUser(_("Enter your number:"),
  189.         _("Try to guess my number!"), wxEmptyString, this);
  190.  
  191.     if ( str.IsEmpty() ) return;
  192.  
  193.     int num;
  194.     wxSscanf(str, wxT("%d"), &num);
  195.     if ( num == 0 )
  196.         str = _("You've probably entered an invalid number.");
  197.     else if ( num == 9 )  // this message is not translated (not in catalog)
  198.         str = _T("You've found a bug in this program!");
  199.     else if ( num != 17 ) // a more implicit way to write _()
  200.         str = wxGetTranslation(wxT("Bad luck! try again..."));
  201.     else
  202.     {
  203.         str.Empty();
  204.         // string must be split in two -- otherwise the translation won't be found
  205.         str << _("Congratulations! you've won. Here is the magic phrase:")
  206.             << _("cannot create fifo `%s'");
  207.     }
  208.  
  209.     wxMessageBox(str, _("Result"), wxOK | wxICON_INFORMATION);
  210. }
  211.  
  212. void MyFrame::OnOpen(wxCommandEvent&)
  213. {
  214.     // open a bogus file -- the error message should be also translated if you've
  215.     // got wxstd.mo somewhere in the search path
  216.     wxFile file(wxT("NOTEXIST.ING"));
  217. }
  218.