Show translation from coreutils message catalog string

Actually test using the coreutils catalog, as this was broken for many
years due to using a wrong catalog name and not adding /usr/share/locale
as a search prefix, but went unnoticed.

So add a menu item to show translation of a string in this catalog to
make testing that this works simpler.
This commit is contained in:
Vadim Zeitlin
2021-06-15 14:43:38 +02:00
parent c880cf9872
commit aabfa8806b

View File

@@ -42,6 +42,7 @@
// coreutils package (which is always installed) as an example.
#ifdef __LINUX__
#define USE_COREUTILS_MO
static bool g_loadedCoreutilsMO = false;
#endif // __LINUX__
// ----------------------------------------------------------------------------
@@ -72,6 +73,9 @@ public:
public:
void OnTestLocaleAvail(wxCommandEvent& event);
void OnAbout(wxCommandEvent& event);
#ifdef USE_COREUTILS_MO
void OnCoreutilsHelp(wxCommandEvent& event);
#endif // USE_COREUTILS_MO
void OnQuit(wxCommandEvent& event);
void OnPlay(wxCommandEvent& event);
@@ -170,6 +174,9 @@ wxCOMPILE_TIME_ASSERT( WXSIZEOF(langNames) == WXSIZEOF(langIds),
wxBEGIN_EVENT_TABLE(MyFrame, wxFrame)
EVT_MENU(INTERNAT_TEST, MyFrame::OnTestLocaleAvail)
EVT_MENU(wxID_ABOUT, MyFrame::OnAbout)
#ifdef USE_COREUTILS_MO
EVT_MENU(wxID_HELP, MyFrame::OnCoreutilsHelp)
#endif // USE_COREUTILS_MO
EVT_MENU(wxID_EXIT, MyFrame::OnQuit)
EVT_MENU(INTERNAT_PLAY, MyFrame::OnPlay)
@@ -272,7 +279,8 @@ bool MyApp::OnInit()
//
// if it's not installed on your system, it is just silently ignored
#ifdef USE_COREUTILS_MO
m_locale.AddCatalog("coreutils");
wxLocale::AddCatalogLookupPathPrefix("/usr/share/locale");
g_loadedCoreutilsMO = m_locale.AddCatalog("coreutils");
#endif // USE_COREUTILS_MO
// Create the main frame window
@@ -330,6 +338,10 @@ MyFrame::MyFrame(wxLocale& locale)
macro_menu->Append(INTERNAT_MACRO_9, wxGETTEXT_IN_CONTEXT_PLURAL("context_2", "sing", "plur", 2));
wxMenu *help_menu = new wxMenu;
#ifdef USE_COREUTILS_MO
help_menu->Append(wxID_HELP, _("Show coreutils &help"));
help_menu->AppendSeparator();
#endif // USE_COREUTILS_MO
help_menu->Append(wxID_ABOUT, _("&About"));
wxMenuBar *menu_bar = new wxMenuBar;
@@ -383,6 +395,29 @@ void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event))
dlg.ShowModal();
}
#ifdef USE_COREUTILS_MO
void MyFrame::OnCoreutilsHelp(wxCommandEvent& WXUNUSED(event))
{
if ( g_loadedCoreutilsMO )
{
// Try showing translation of a message used by coreutils: notice that
// this string isn't inside _(), as its translation is supposed to be
// already present in the coreutils catalog, we don't need to extract
// it from here.
const char* const msg = " --help display this help and exit\n";
wxLogMessage("Translation of coreutils help option description is:\n%s",
wxGetTranslation(msg));
}
else
{
wxLogMessage("Loading coreutils message catalog failed, set "
"WXTRACE=i18n to get more information about it.");
}
}
#endif // USE_COREUTILS_MO
void MyFrame::OnPlay(wxCommandEvent& WXUNUSED(event))
{
wxString str = wxGetTextFromUser