diff --git a/src/AboutDialog.cpp b/src/AboutDialog.cpp
index b6cd5fa8c..cb0c06946 100644
--- a/src/AboutDialog.cpp
+++ b/src/AboutDialog.cpp
@@ -508,8 +508,8 @@ void AboutDialog::PopulateInformationPage( ShuttleGui & S )
wxSize(ABOUT_DIALOG_WIDTH, 264),
wxHW_SCROLLBAR_AUTO | wxSUNKEN_BORDER);
// create a html pane in it to put the content in.
- wxString enabled = _("Enabled");
- wxString disabled = _("Disabled");
+ auto enabled = XO("Enabled");
+ auto disabled = XO("Disabled");
wxString blank;
/* this builds up the list of information to go in the window in the string
@@ -604,10 +604,10 @@ void AboutDialog::PopulateInformationPage( ShuttleGui & S )
XO("Sample rate conversion"), enabled);
AddBuildinfoRow(&informationStr, wxT("PortAudio"),
- XO("Audio playback and recording"), wxString(wxT("v19")));
+ XO("Audio playback and recording"), Verbatim(wxT("v19")));
AddBuildinfoRow(&informationStr, wxT("wxWidgets"),
- XO("Cross-platform GUI library"), wxVERSION_NUM_DOT_STRING_T);
+ XO("Cross-platform GUI library"), Verbatim(wxVERSION_NUM_DOT_STRING_T));
informationStr
<< wxT("\n") //end table of libraries
@@ -1111,7 +1111,7 @@ wxString AboutDialog::GetCreditsByRole(AboutDialog::Role role)
* library is enabled or not, and what it does */
void AboutDialog::AddBuildinfoRow(
wxTextOutputStream *str, const wxChar * libname,
- const TranslatableString &libdesc, const wxString &status)
+ const TranslatableString &libdesc, const TranslatableString &status)
{
*str
<< wxT("
")
diff --git a/src/AboutDialog.h b/src/AboutDialog.h
index ac817b0b3..d3059f84c 100644
--- a/src/AboutDialog.h
+++ b/src/AboutDialog.h
@@ -66,7 +66,7 @@ class AboutDialog final : public wxDialogWrapper {
wxString GetCreditsByRole(AboutDialog::Role role);
void AddBuildinfoRow( wxTextOutputStream *str, const wxChar * libname,
- const TranslatableString &libdesc, const wxString &status);
+ const TranslatableString &libdesc, const TranslatableString &status);
void AddBuildinfoRow( wxTextOutputStream *str,
const TranslatableString &description, const wxChar *spec);
};
diff --git a/src/Snap.cpp b/src/Snap.cpp
index 3c145ed1a..944494f2f 100644
--- a/src/Snap.cpp
+++ b/src/Snap.cpp
@@ -360,13 +360,14 @@ SnapResults SnapManager::Snap
return results;
}
-/* static */ wxArrayStringEx SnapManager::GetSnapLabels()
+/* static */ const TranslatableStrings &SnapManager::GetSnapLabels()
{
- return wxArrayStringEx{
- _("Off") ,
- _("Nearest") ,
- _("Prior") ,
+ static const TranslatableStrings result{
+ XO("Off") ,
+ XO("Nearest") ,
+ XO("Prior") ,
};
+ return result;
}
#include "AColor.h"
diff --git a/src/Snap.h b/src/Snap.h
index ef19f85d1..7f8c4bac1 100644
--- a/src/Snap.h
+++ b/src/Snap.h
@@ -93,7 +93,7 @@ public:
double t,
bool rightEdge);
- static wxArrayStringEx GetSnapLabels();
+ static const TranslatableStrings &GetSnapLabels();
// The two coordinates need not be ordered:
static void Draw( wxDC *dc, wxInt64 snap0, wxInt64 snap1 );
diff --git a/src/effects/audiounits/AudioUnitEffect.cpp b/src/effects/audiounits/AudioUnitEffect.cpp
index 58845af78..8eb10d43c 100644
--- a/src/effects/audiounits/AudioUnitEffect.cpp
+++ b/src/effects/audiounits/AudioUnitEffect.cpp
@@ -646,7 +646,7 @@ public:
void PopulateOrExchange(ShuttleGui & S);
bool HasPresets();
- wxString Import(const wxString & path, const wxString & name);
+ TranslatableString Import(const wxString & path, const wxString & name);
void OnOk(wxCommandEvent & evt);
@@ -751,7 +751,8 @@ bool AudioUnitEffectImportDialog::HasPresets()
return mList->GetItemCount() > 0;
}
-wxString AudioUnitEffectImportDialog::Import(const wxString & path, const wxString & name)
+TranslatableString AudioUnitEffectImportDialog::Import(
+ const wxString & path, const wxString & name)
{
// Generate the path
wxString fullPath;
@@ -763,7 +764,7 @@ wxString AudioUnitEffectImportDialog::Import(const wxString & path, const wxStri
wxFFile f(fullPath, wxT("r"));
if (!f.IsOpened())
{
- return wxString::Format(_("Couldn't open \"%s\""), fullPath);
+ return XO("Couldn't open \"%s\"").Format( fullPath );
}
// Load it into the buffer
@@ -771,23 +772,23 @@ wxString AudioUnitEffectImportDialog::Import(const wxString & path, const wxStri
wxMemoryBuffer buf(len);
if (f.Read(buf.GetData(), len) != len || f.Error())
{
- return wxString::Format(_("Unable to read the preset from \"%s\""), fullPath);
+ return XO("Unable to read the preset from \"%s\"").Format( fullPath );
}
wxString parms = wxBase64Encode(buf.GetData(), len);
if (parms.IsEmpty())
{
- return wxString::Format(_("Failed to encode preset from \"%s\""), fullPath);
+ return XO("Failed to encode preset from \"%s\"").Format( fullPath );
}
// And write it to the config
wxString group = mEffect->mHost->GetUserPresetsGroup(name);
if (!mEffect->mHost->SetPrivateConfig(group, PRESET_KEY, parms))
{
- return wxString::Format(_("Unable to store preset in config file"));
+ return XO("Unable to store preset in config file");
}
- return wxEmptyString;
+ return {};
}
void AudioUnitEffectImportDialog::OnOk(wxCommandEvent & evt)
@@ -806,9 +807,9 @@ void AudioUnitEffectImportDialog::OnOk(wxCommandEvent & evt)
wxString path = item.GetText();
wxString name = mList->GetItemText(sel);
- wxString msg = Import(path, name);
+ auto msg = Import(path, name);
- if (!msg.IsEmpty())
+ if (!msg.empty())
{
AudacityMessageBox(
XO("Could not import \"%s\" preset\n\n%s").Format( name, msg ),
@@ -1851,8 +1852,8 @@ void AudioUnitEffect::ExportPresets()
return;
}
- wxString msg = Export(path);
- if (!msg.IsEmpty())
+ auto msg = Export(path);
+ if (!msg.empty())
{
AudacityMessageBox(
XO("Could not export \"%s\" preset\n\n%s").Format( path, msg ),
@@ -1893,8 +1894,8 @@ void AudioUnitEffect::ImportPresets()
return;
}
- wxString msg = Import(path);
- if (!msg.IsEmpty())
+ auto msg = Import(path);
+ if (!msg.empty())
{
AudacityMessageBox(
XO("Could not import \"%s\" preset\n\n%s").Format( path, msg ),
@@ -2260,13 +2261,13 @@ void AudioUnitEffect::SetChannelCount(unsigned numChannels)
mNumChannels = numChannels;
}
-wxString AudioUnitEffect::Export(const wxString & path)
+TranslatableString AudioUnitEffect::Export(const wxString & path)
{
// Create the file
wxFFile f(path, wxT("wb"));
if (!f.IsOpened())
{
- return _("Couldn't open \"%s\"").Format(path);
+ return XO("Couldn't open \"%s\"").Format(path);
}
// First set the name of the preset
@@ -2287,7 +2288,7 @@ wxString AudioUnitEffect::Export(const wxString & path)
sizeof(preset));
if (result != noErr)
{
- return _("Failed to set preset name");
+ return XO("Failed to set preset name");
}
// Now retrieve the preset content
@@ -2302,7 +2303,7 @@ wxString AudioUnitEffect::Export(const wxString & path)
CFunique_ptr ucontent { (char *) content };
if (result != noErr)
{
- return _("Failed to retrieve preset content");
+ return XO("Failed to retrieve preset content");
}
// And convert it to serialized XML data
@@ -2316,34 +2317,34 @@ wxString AudioUnitEffect::Export(const wxString & path)
};
if (!data)
{
- return _("Failed to convert property list to XML data");
+ return XO("Failed to convert property list to XML data");
}
// Nothing to do if we don't have any data
SInt32 length = CFDataGetLength(data.get());
if (!length)
{
- return _("XML data is empty after conversion");
+ return XO("XML data is empty after conversion");
}
// Write XML data
if (f.Write(CFDataGetBytePtr(data.get()), length) != length || f.Error())
{
- return _("Failed to write XML preset to \"%s\"").Format(path);
+ return XO("Failed to write XML preset to \"%s\"").Format(path);
}
f.Close();
- return wxEmptyString;
+ return {};
}
-wxString AudioUnitEffect::Import(const wxString & path)
+TranslatableString AudioUnitEffect::Import(const wxString & path)
{
// Open the preset
wxFFile f(path, wxT("r"));
if (!f.IsOpened())
{
- return _("Couldn't open \"%s\"").Format(path);
+ return XO("Couldn't open \"%s\"").Format(path);
}
// Load it into the buffer
@@ -2351,7 +2352,7 @@ wxString AudioUnitEffect::Import(const wxString & path)
wxMemoryBuffer buf(len);
if (f.Read(buf.GetData(), len) != len || f.Error())
{
- return _("Unable to read the preset from \"%s\"").Format(path);
+ return XO("Unable to read the preset from \"%s\"").Format(path);
}
// Create a CFData object that references the decoded preset
@@ -2364,7 +2365,7 @@ wxString AudioUnitEffect::Import(const wxString & path)
};
if (!data)
{
- return _("Failed to convert preset to internal format");
+ return XO("Failed to convert preset to internal format");
}
// Convert it back to a property list.
@@ -2378,7 +2379,7 @@ wxString AudioUnitEffect::Import(const wxString & path)
};
if (!content)
{
- return _("Failed to create property list for preset");
+ return XO("Failed to create property list for preset");
}
CFunique_ptr ucontent { (char *) content };
@@ -2392,13 +2393,13 @@ wxString AudioUnitEffect::Import(const wxString & path)
sizeof(content));
if (result != noErr)
{
- return _("Failed to set class info for \"%s\" preset");
+ return XO("Failed to set class info for \"%s\" preset");
}
// Notify interested parties of change and propagate to slaves
Notify(mUnit, kAUParameterListener_AnyParameter);
- return wxEmptyString;
+ return {};
}
void AudioUnitEffect::Notify(AudioUnit unit, AudioUnitParameterID parm)
diff --git a/src/effects/audiounits/AudioUnitEffect.h b/src/effects/audiounits/AudioUnitEffect.h
index ce59f5643..93c03dfb2 100644
--- a/src/effects/audiounits/AudioUnitEffect.h
+++ b/src/effects/audiounits/AudioUnitEffect.h
@@ -135,8 +135,8 @@ private:
bool SetRateAndChannels();
bool CopyParameters(AudioUnit srcUnit, AudioUnit dstUnit);
- wxString Export(const wxString & path);
- wxString Import(const wxString & path);
+ TranslatableString Export(const wxString & path);
+ TranslatableString Import(const wxString & path);
void Notify(AudioUnit unit, AudioUnitParameterID parm);
// Realtime
diff --git a/src/toolbars/SelectionBar.cpp b/src/toolbars/SelectionBar.cpp
index 0fae2bed6..75aae49bc 100644
--- a/src/toolbars/SelectionBar.cpp
+++ b/src/toolbars/SelectionBar.cpp
@@ -300,8 +300,10 @@ void SelectionBar::Populate()
AddVLine( mainSizer );
mSnapTo = safenew wxChoice(this, SnapToID,
- wxDefaultPosition, wxDefaultSize,
- SnapManager::GetSnapLabels());
+ wxDefaultPosition, wxDefaultSize,
+ transform_container< wxArrayStringEx >(
+ SnapManager::GetSnapLabels(),
+ std::mem_fn( &TranslatableString::Translation ) ) );
#ifdef __WXGTK__
// Combo boxes are taller on Linux, and if we don't do the following, the selection toolbar will
|