1 // Example for use of GNU gettext.
2 // Copyright (C) 2006 Free Software Foundation, Inc.
3 // This file is in the public domain.
4 
5 // Source code of the C++ program.
6 
7 #include <wx/wx.h>
8 #include <wx/intl.h>
9 
10 /* Get getpid() declaration.  */
11 #if HAVE_UNISTD_H
12 # include <unistd.h>
13 #endif
14 
15 class MyApp: public wxApp
16 {
17 public:
18   virtual bool OnInit();
19 private:
20   // wxWidgets has the concept of a "current locale". It is the one returned
21   // by wxGetLocale() and implicitly used by wxGetTranslation.
22   // But there is no way to explicitly set this current locale! Rather, it is
23   // always set to the last constructed locale(!), and is modified when a
24   // locale is destroyed. In such a way that the current locale points to
25   // invalid memory after you do
26   //    wxLocale *a = new wxLocale;
27   //    wxLocale *b = new wxLocale;
28   //    delete a;
29   //    delete b;
30   // So, to avoid problems, we use exactly one instance of wxLocale, and keep
31   // it alive for the entire application lifetime.
32   wxLocale appLocale;
33 };
34 
35 class MyFrame: public wxFrame
36 {
37 public:
38   MyFrame();
39 };
40 
41 // This defines the main() function.
IMPLEMENT_APP(MyApp)42 IMPLEMENT_APP(MyApp)
43 
44 bool MyApp::OnInit()
45 {
46   // First, register the base directory where to look up .mo files.
47   wxLocale::AddCatalogLookupPathPrefix(wxT(LOCALEDIR));
48   // Second, initialize the locale and set the application-wide message domain.
49   appLocale.Init();
50   appLocale.AddCatalog(wxT("hello-c++-wxwidgets"));
51   // Now wxGetLocale() is initialized appropriately.
52 
53   // Then only start building the GUI elements of the application.
54 
55   // Create the main frame window.
56   MyFrame *frame = new MyFrame();
57 
58   // Show the frame.
59   frame->Show(true);
60   SetTopWindow(frame);
61 
62   return true;
63 }
64 
MyFrame()65 MyFrame::MyFrame()
66   : wxFrame(NULL, wxID_ANY, _T("Hello example"))
67 {
68   wxStaticText *label1 =
69     new wxStaticText(this, wxID_ANY, _("Hello, world!"));
70 
71   wxString label2text =
72     wxString::Format(_("This program is running as process number %d."),
73                      getpid());
74   wxStaticText *label2 =
75     new wxStaticText(this, wxID_ANY, label2text);
76 
77   wxBoxSizer *topSizer = new wxBoxSizer(wxVERTICAL);
78   topSizer->Add(label1);
79   topSizer->Add(label2);
80   SetSizer(topSizer);
81 }
82