]> git.saurik.com Git - wxWidgets.git/blob - samples/internat/internat.cpp
new locales code checked in
[wxWidgets.git] / samples / internat / internat.cpp
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$
8 // Copyright: (c) Julian Smart and Markus Holzem
9 // Licence: wxWindows license
10 /////////////////////////////////////////////////////////////////////////////
11
12 #ifdef __GNUG__
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(__WXMOTIF__)
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 char *title, int x, int y, int w, int h,
51 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_ABOUT,
70 MINIMAL_TEST,
71 MINIMAL_OPEN
72 };
73
74 BEGIN_EVENT_TABLE(MyFrame, wxFrame)
75 EVT_MENU(MINIMAL_QUIT, MyFrame::OnQuit)
76 EVT_MENU(MINIMAL_ABOUT, MyFrame::OnAbout)
77 EVT_MENU(MINIMAL_TEST, MyFrame::OnPlay)
78 EVT_MENU(MINIMAL_OPEN, MyFrame::OnOpen)
79 END_EVENT_TABLE()
80
81 IMPLEMENT_APP(MyApp)
82
83
84 // `Main program' equivalent, creating windows and returning main app frame
85 bool MyApp::OnInit()
86 {
87 if (argc == 2 && wxString(argv[1]) == "french")
88 m_locale.Init(wxLANGUAGE_FRENCH);
89 else if (argc == 2 && wxString(argv[1]) == "german")
90 m_locale.Init(wxLANGUAGE_GERMAN);
91 else
92 m_locale.Init(wxLANGUAGE_DEFAULT);
93
94
95 // Initialize the catalogs we'll be using
96 /* not needed any more, done in wxLocale ctor
97 m_locale.AddCatalog("wxstd"); // 1) for library messages
98 */
99 m_locale.AddCatalog("internat"); // 2) our private one
100 /* this catalog is installed in standard location on Linux systems,
101 it might not be installed on yours - just ignore the errrors
102 or comment out this line then */
103 #ifdef __LINUX__
104 //m_locale.AddCatalog("fileutils"); // 3) and another just for testing
105 #endif
106
107 // Create the main frame window
108 MyFrame *frame = new MyFrame((wxFrame *) NULL, _("International wxWindows App"),
109 50, 50, 350, 60, m_locale);
110
111 // Give it an icon
112 frame->SetIcon(wxICON(mondrian));
113
114 // Make a menubar
115 wxMenu *file_menu = new wxMenu;
116 file_menu->Append(MINIMAL_ABOUT, _("&About..."));
117 file_menu->AppendSeparator();
118 file_menu->Append(MINIMAL_QUIT, _("E&xit"));
119
120 wxMenu *test_menu = new wxMenu;
121 test_menu->Append(MINIMAL_OPEN, _("&Open bogus file"));
122 test_menu->Append(MINIMAL_TEST, _("&Play a game"));
123
124 wxMenuBar *menu_bar = new wxMenuBar;
125 menu_bar->Append(file_menu, _("&File"));
126 menu_bar->Append(test_menu, _("&Test"));
127 frame->SetMenuBar(menu_bar);
128
129 // Show the frame
130 frame->Show(TRUE);
131 SetTopWindow(frame);
132
133 return TRUE;
134 }
135
136 // My frame constructor
137 MyFrame::MyFrame(wxFrame *frame, const char *title, int x, int y, int w, int h,
138 wxLocale& l)
139 : wxFrame(frame, -1, title, wxPoint(x, y), wxSize(w, h)),
140 m_locale(l)
141 {
142 }
143
144 void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event) )
145 {
146 Close(TRUE);
147 }
148
149 void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event))
150 {
151 wxString localeInfo;
152 localeInfo.Printf(_("Language: %s\n"
153 "System locale name: %s\n"
154 "Canonical locale name: %s\n"),
155 m_locale.GetLocale(),
156 m_locale.GetSysName().c_str(),
157 m_locale.GetCanonicalName().c_str());
158
159 wxMessageDialog(this, wxString(_("I18n sample\n"
160 "(c) 1998, 1999 Vadim Zeitlin and Julian Smart"))
161 + wxT("\n\n") + localeInfo,
162 _("About Internat"), wxOK | wxICON_INFORMATION).ShowModal();
163 }
164
165 void MyFrame::OnPlay(wxCommandEvent& WXUNUSED(event))
166 {
167 wxString str = wxGetTextFromUser(_("Enter your number:"),
168 _("Try to guess my number!"),
169 "", this);
170 if ( str.IsEmpty() )
171 return;
172
173 int num;
174 sscanf(str, "%d", &num);
175 if ( num == 0 )
176 str = _("You've probably entered an invalid number.");
177 else if ( num == 9 ) // this message is not translated (not in catalog)
178 str = "You've found a bug in this program!";
179 else if ( num != 17 ) // a more implicit way to write _()
180 str = wxGetTranslation("Bad luck! try again...");
181 else {
182 str.Empty();
183 // string must be split in two -- otherwise the translation won't be found
184 str << _("Congratulations! you've won. Here is the magic phrase:")
185 << _("cannot create fifo `%s'");
186 }
187
188 wxMessageBox(str, _("Result"), wxOK | wxICON_INFORMATION);
189 }
190
191 void MyFrame::OnOpen(wxCommandEvent&)
192 {
193 // open a bogus file -- the error message should be also translated if you've
194 // got wxstd.mo somewhere in the search path
195 wxFile file("NOTEXIST.ING");
196 }