// Example for use of GNU gettext. // This file is in the public domain. // Source code of the C++ program. #include #include /* Get getpid() declaration. */ #if HAVE_UNISTD_H # include #endif class MyApp: public wxApp { public: virtual bool OnInit(); private: // wxWidgets has the concept of a "current locale". It is the one returned // by wxGetLocale() and implicitly used by wxGetTranslation. // But there is no way to explicitly set this current locale! Rather, it is // always set to the last constructed locale(!), and is modified when a // locale is destroyed. In such a way that the current locale points to // invalid memory after you do // wxLocale *a = new wxLocale; // wxLocale *b = new wxLocale; // delete a; // delete b; // So, to avoid problems, we use exactly one instance of wxLocale, and keep // it alive for the entire application lifetime. wxLocale appLocale; }; class MyFrame: public wxFrame { public: MyFrame(); }; // This defines the main() function. IMPLEMENT_APP(MyApp) bool MyApp::OnInit() { // First, register the base directory where to look up .mo files. wxLocale::AddCatalogLookupPathPrefix(wxT(LOCALEDIR)); // Second, initialize the locale and set the application-wide message domain. appLocale.Init(); appLocale.AddCatalog(wxT("hello-c++-wxwidgets")); // Now wxGetLocale() is initialized appropriately. // Then only start building the GUI elements of the application. // Create the main frame window. MyFrame *frame = new MyFrame(); // Show the frame. frame->Show(true); SetTopWindow(frame); return true; } MyFrame::MyFrame() : wxFrame(NULL, wxID_ANY, _T("Hello example")) { wxStaticText *label1 = new wxStaticText(this, wxID_ANY, _("Hello, world!")); wxString label2text = wxString::Format(_("This program is running as process number %d."), getpid()); wxStaticText *label2 = new wxStaticText(this, wxID_ANY, label2text); wxBoxSizer *topSizer = new wxBoxSizer(wxVERTICAL); topSizer->Add(label1); topSizer->Add(label2); SetSizer(topSizer); }