1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-07-15 16:17:41 +02:00

TranslatableString for titles, and spin control and combo prompts

This commit is contained in:
Paul Licameli 2019-12-22 18:14:40 -05:00
parent 707a069712
commit acd1158e1b
19 changed files with 103 additions and 88 deletions

View File

@ -469,14 +469,15 @@ public:
S.SetBorder(10); S.SetBorder(10);
S.StartVerticalLay(true); S.StartVerticalLay(true);
{ {
S.AddTitle( wxString::Format( S.AddTitle(
_("Audacity needs the file '%s' to import and export audio via FFmpeg."), XO(
mName)); "Audacity needs the file '%s' to import and export audio via FFmpeg.")
.Format( mName ) );
S.SetBorder(3); S.SetBorder(3);
S.StartHorizontalLay(wxALIGN_LEFT, true); S.StartHorizontalLay(wxALIGN_LEFT, true);
{ {
S.AddTitle( wxString::Format(_("Location of '%s':"), mName) ); S.AddTitle( XO("Location of '%s':").Format( mName ) );
} }
S.EndHorizontalLay(); S.EndHorizontalLay();

View File

@ -266,18 +266,19 @@ void ShuttleGuiBase::AddUnits(const wxString &Prompt, int wrapWidth)
} }
/// Centred text string. /// Centred text string.
void ShuttleGuiBase::AddTitle(const wxString &Prompt, int wrapWidth) void ShuttleGuiBase::AddTitle(const TranslatableString &Prompt, int wrapWidth)
{ {
if( Prompt.empty() ) if( Prompt.empty() )
return; return;
if( mShuttleMode != eIsCreating ) if( mShuttleMode != eIsCreating )
return; return;
auto text = safenew wxStaticText(GetParent(), -1, Prompt, wxDefaultPosition, wxDefaultSize, const auto translated = Prompt.Translation();
auto text = safenew wxStaticText(GetParent(), -1, translated, wxDefaultPosition, wxDefaultSize,
GetStyle( wxALIGN_CENTRE )); GetStyle( wxALIGN_CENTRE ));
mpWind = text; mpWind = text;
if (wrapWidth > 0) if (wrapWidth > 0)
text->Wrap(wrapWidth); text->Wrap(wrapWidth);
mpWind->SetName(Prompt); // fix for bug 577 (NVDA/Narrator screen readers do not read static text in dialogs) mpWind->SetName(translated); // fix for bug 577 (NVDA/Narrator screen readers do not read static text in dialogs)
UpdateSizers(); UpdateSizers();
} }
@ -478,10 +479,13 @@ wxStaticText * ShuttleGuiBase::AddVariableText(
return pStatic; return pStatic;
} }
wxComboBox * ShuttleGuiBase::AddCombo( const wxString &Prompt, const wxString &Selected,const wxArrayStringEx & choices ) wxComboBox * ShuttleGuiBase::AddCombo(
const TranslatableString &Prompt,
const wxString &Selected, const wxArrayStringEx & choices )
{ {
HandleOptionality( Prompt ); const auto translated = Prompt.Translation();
AddPrompt( Prompt ); HandleOptionality( translated );
AddPrompt( translated );
UseUpId(); UseUpId();
if( mShuttleMode != eIsCreating ) if( mShuttleMode != eIsCreating )
return wxDynamicCast(wxWindow::FindWindowById( miId, mpDlg), wxComboBox); return wxDynamicCast(wxWindow::FindWindowById( miId, mpDlg), wxComboBox);
@ -499,7 +503,7 @@ wxComboBox * ShuttleGuiBase::AddCombo( const wxString &Prompt, const wxString &S
mpWind = pCombo = safenew wxComboBox(GetParent(), miId, Selected, wxDefaultPosition, wxDefaultSize, mpWind = pCombo = safenew wxComboBox(GetParent(), miId, Selected, wxDefaultPosition, wxDefaultSize,
n, Choices, GetStyle( 0 )); n, Choices, GetStyle( 0 ));
mpWind->SetName(wxStripMenuCodes(Prompt)); mpWind->SetName(wxStripMenuCodes(translated));
UpdateSizers(); UpdateSizers();
return pCombo; return pCombo;
@ -569,10 +573,12 @@ wxSlider * ShuttleGuiBase::AddSlider(const wxString &Prompt, int pos, int Max, i
return pSlider; return pSlider;
} }
wxSpinCtrl * ShuttleGuiBase::AddSpinCtrl(const wxString &Prompt, int Value, int Max, int Min) wxSpinCtrl * ShuttleGuiBase::AddSpinCtrl(
const TranslatableString &Prompt, int Value, int Max, int Min)
{ {
HandleOptionality( Prompt ); const auto translated = Prompt.Translation();
AddPrompt( Prompt ); HandleOptionality( translated );
AddPrompt( translated );
UseUpId(); UseUpId();
if( mShuttleMode != eIsCreating ) if( mShuttleMode != eIsCreating )
return wxDynamicCast(wxWindow::FindWindowById( miId, mpDlg), wxSpinCtrl); return wxDynamicCast(wxWindow::FindWindowById( miId, mpDlg), wxSpinCtrl);
@ -583,7 +589,7 @@ wxSpinCtrl * ShuttleGuiBase::AddSpinCtrl(const wxString &Prompt, int Value, int
GetStyle( wxSP_VERTICAL | wxSP_ARROW_KEYS ), GetStyle( wxSP_VERTICAL | wxSP_ARROW_KEYS ),
Min, Max, Value Min, Max, Value
); );
mpWind->SetName(wxStripMenuCodes(Prompt)); mpWind->SetName(wxStripMenuCodes(translated));
miProp=1; miProp=1;
UpdateSizers(); UpdateSizers();
return pSpinCtrl; return pSpinCtrl;
@ -1299,9 +1305,11 @@ wxCheckBox * ShuttleGuiBase::DoTieCheckBoxOnRight(const wxString &Prompt, Wrappe
return pCheckBox; return pCheckBox;
} }
wxSpinCtrl * ShuttleGuiBase::DoTieSpinCtrl( const wxString &Prompt, WrappedType & WrappedRef, const int max, const int min ) wxSpinCtrl * ShuttleGuiBase::DoTieSpinCtrl(
const TranslatableString &Prompt,
WrappedType & WrappedRef, const int max, const int min )
{ {
HandleOptionality( Prompt ); HandleOptionality( Prompt.Translation() );
// The Add function does a UseUpId(), so don't do it here in that case. // The Add function does a UseUpId(), so don't do it here in that case.
if( mShuttleMode == eIsCreating ) if( mShuttleMode == eIsCreating )
return AddSpinCtrl( Prompt, WrappedRef.ReadAsInt(), max, min ); return AddSpinCtrl( Prompt, WrappedRef.ReadAsInt(), max, min );
@ -1625,7 +1633,8 @@ wxCheckBox * ShuttleGuiBase::TieCheckBoxOnRight(const wxString &Prompt, bool &Va
return DoTieCheckBox( Prompt, WrappedRef ); return DoTieCheckBox( Prompt, WrappedRef );
} }
wxSpinCtrl * ShuttleGuiBase::TieSpinCtrl( const wxString &Prompt, int &Value, const int max, const int min ) wxSpinCtrl * ShuttleGuiBase::TieSpinCtrl(
const TranslatableString &Prompt, int &Value, const int max, const int min )
{ {
WrappedType WrappedRef(Value); WrappedType WrappedRef(Value);
return DoTieSpinCtrl( Prompt, WrappedRef, max, min ); return DoTieSpinCtrl( Prompt, WrappedRef, max, min );
@ -1872,10 +1881,10 @@ wxSlider * ShuttleGuiBase::TieSlider(
/// Variant of the standard TieSpinCtrl which does the two step exchange /// Variant of the standard TieSpinCtrl which does the two step exchange
/// between gui and stack variable and stack variable and shuttle. /// between gui and stack variable and stack variable and shuttle.
wxSpinCtrl * ShuttleGuiBase::TieSpinCtrl( wxSpinCtrl * ShuttleGuiBase::TieSpinCtrl(
const wxString &Prompt, const TranslatableString &Prompt,
const SettingSpec< int > &Setting, const SettingSpec< int > &Setting,
const int max, const int max,
const int min) const int min)
{ {
wxSpinCtrl * pSpinCtrl=NULL; wxSpinCtrl * pSpinCtrl=NULL;

View File

@ -268,11 +268,12 @@ public:
void HandleOptionality(const wxString &Prompt); void HandleOptionality(const wxString &Prompt);
void AddPrompt(const wxString &Prompt, int wrapWidth = 0); void AddPrompt(const wxString &Prompt, int wrapWidth = 0);
void AddUnits(const wxString &Prompt, int wrapWidth = 0); void AddUnits(const wxString &Prompt, int wrapWidth = 0);
void AddTitle(const wxString &Prompt, int wrapWidth = 0); void AddTitle(const TranslatableString &Prompt, int wrapWidth = 0);
wxWindow * AddWindow(wxWindow * pWindow); wxWindow * AddWindow(wxWindow * pWindow);
wxSlider * AddSlider(const wxString &Prompt, int pos, int Max, int Min = 0); wxSlider * AddSlider(const wxString &Prompt, int pos, int Max, int Min = 0);
wxSlider * AddVSlider(const wxString &Prompt, int pos, int Max); wxSlider * AddVSlider(const wxString &Prompt, int pos, int Max);
wxSpinCtrl * AddSpinCtrl(const wxString &Prompt, int Value, int Max, int Min); wxSpinCtrl * AddSpinCtrl(const TranslatableString &Prompt,
int Value, int Max, int Min);
wxTreeCtrl * AddTree(); wxTreeCtrl * AddTree();
// Pass the same initValue to the sequence of calls to AddRadioButton and // Pass the same initValue to the sequence of calls to AddRadioButton and
@ -331,7 +332,8 @@ public:
wxGrid * AddGrid(); wxGrid * AddGrid();
wxCheckBox * AddCheckBox( const wxString &Prompt, bool Selected); wxCheckBox * AddCheckBox( const wxString &Prompt, bool Selected);
wxCheckBox * AddCheckBoxOnRight( const wxString &Prompt, bool Selected); wxCheckBox * AddCheckBoxOnRight( const wxString &Prompt, bool Selected);
wxComboBox * AddCombo( const wxString &Prompt, const wxString &Selected,const wxArrayStringEx & choices ); wxComboBox * AddCombo( const TranslatableString &Prompt,
const wxString &Selected, const wxArrayStringEx & choices );
wxChoice * AddChoice( const TranslatableString &Prompt, wxChoice * AddChoice( const TranslatableString &Prompt,
const TranslatableStrings &choices, int Selected = -1 ); const TranslatableStrings &choices, int Selected = -1 );
wxChoice * AddChoice( const TranslatableString &Prompt, wxChoice * AddChoice( const TranslatableString &Prompt,
@ -420,7 +422,8 @@ public:
// and as many times as there are values in the enumeration. // and as many times as there are values in the enumeration.
wxRadioButton * TieRadioButton(); wxRadioButton * TieRadioButton();
wxSpinCtrl * TieSpinCtrl( const wxString &Prompt, int &Value, const int max, const int min = 0 ); wxSpinCtrl * TieSpinCtrl( const TranslatableString &Prompt,
int &Value, const int max, const int min = 0 );
//-- Variants of the standard Tie functions which do two step exchange in one go //-- Variants of the standard Tie functions which do two step exchange in one go
@ -468,7 +471,7 @@ public:
const int max, const int max,
const int min = 0); const int min = 0);
virtual wxSpinCtrl * TieSpinCtrl( virtual wxSpinCtrl * TieSpinCtrl(
const wxString &Prompt, const TranslatableString &Prompt,
const SettingSpec< int > &Setting, const SettingSpec< int > &Setting,
const int max, const int max,
const int min); const int min);
@ -553,7 +556,8 @@ private:
const TranslatableString &Prompt, WrappedType & WrappedRef, const TranslatableString &Prompt, WrappedType & WrappedRef,
const TranslatableStrings & choices ); const TranslatableStrings & choices );
wxSlider * DoTieSlider( const wxString &Prompt, WrappedType & WrappedRef, const int max, const int min = 0 ); wxSlider * DoTieSlider( const wxString &Prompt, WrappedType & WrappedRef, const int max, const int min = 0 );
wxSpinCtrl * DoTieSpinCtrl( const wxString &Prompt, WrappedType & WrappedRef, const int max, const int min = 0 ); wxSpinCtrl * DoTieSpinCtrl( const TranslatableString &Prompt,
WrappedType & WrappedRef, const int max, const int min = 0 );
std::vector<EnumValueSymbol> mRadioSymbols; std::vector<EnumValueSymbol> mRadioSymbols;
wxString mRadioSettingName; /// The setting controlled by a group. wxString mRadioSettingName; /// The setting controlled by a group.

View File

@ -229,7 +229,7 @@ public:
const int max, const int max,
const int min = 0) override; const int min = 0) override;
wxSpinCtrl * TieSpinCtrl( wxSpinCtrl * TieSpinCtrl(
const wxString &Prompt, const TranslatableString &Prompt,
const SettingSpec< int > &Setting, const SettingSpec< int > &Setting,
const int max, const int max,
const int min) override; const int min) override;
@ -342,14 +342,14 @@ wxSlider * ShuttleGuiGetDefinition::TieSlider(
return ShuttleGui::TieSlider( Prompt, Setting, max, min ); return ShuttleGui::TieSlider( Prompt, Setting, max, min );
} }
wxSpinCtrl * ShuttleGuiGetDefinition::TieSpinCtrl( wxSpinCtrl * ShuttleGuiGetDefinition::TieSpinCtrl(
const wxString &Prompt, const TranslatableString &Prompt,
const SettingSpec< int > &Setting, const SettingSpec< int > &Setting,
const int max, const int max,
const int min) const int min)
{ {
StartStruct(); StartStruct();
AddItem( Setting.GetPath(), "id" ); AddItem( Setting.GetPath(), "id" );
AddItem( Prompt, "prompt" ); AddItem( Prompt.Translation(), "prompt" );
AddItem( "number", "type" ); AddItem( "number", "type" );
AddItem( Setting.GetDefault(), "default" ); AddItem( Setting.GetDefault(), "default" );
EndStruct(); EndStruct();

View File

@ -263,11 +263,10 @@ void EffectChangePitch::PopulateOrExchange(ShuttleGui & S)
{ {
S.StartVerticalLay(); S.StartVerticalLay();
{ {
S.AddTitle(_("Change Pitch without Changing Tempo")); S.AddTitle(XO("Change Pitch without Changing Tempo"));
S.AddTitle( S.AddTitle(
XO("Estimated Start Pitch: %s%d (%.3f Hz)") XO("Estimated Start Pitch: %s%d (%.3f Hz)")
.Format( pitch[m_nFromPitch], m_nFromOctave, m_FromFrequency) .Format( pitch[m_nFromPitch], m_nFromOctave, m_FromFrequency) );
.Translation() );
} }
S.EndVerticalLay(); S.EndVerticalLay();

View File

@ -299,7 +299,7 @@ void EffectChangeSpeed::PopulateOrExchange(ShuttleGui & S)
S.StartVerticalLay(0); S.StartVerticalLay(0);
{ {
S.AddSpace(0, 5); S.AddSpace(0, 5);
S.AddTitle(_("Change Speed, affecting both Tempo and Pitch")); S.AddTitle(XO("Change Speed, affecting both Tempo and Pitch"));
S.AddSpace(0, 10); S.AddSpace(0, 10);
// Speed multiplier and percent change controls. // Speed multiplier and percent change controls.

View File

@ -226,7 +226,7 @@ void EffectChangeTempo::PopulateOrExchange(ShuttleGui & S)
S.StartVerticalLay(0); S.StartVerticalLay(0);
{ {
S.AddSpace(0, 5); S.AddSpace(0, 5);
S.AddTitle(_("Change Tempo without Changing Pitch")); S.AddTitle(XO("Change Tempo without Changing Pitch"));
S.SetBorder(5); S.SetBorder(5);
// //

View File

@ -224,7 +224,8 @@ ContrastDialog::ContrastDialog(wxWindow * parent, wxWindowID id,
S.StartHorizontalLay(wxCENTER, false); S.StartHorizontalLay(wxCENTER, false);
{ {
/* i18n-hint: RMS abbreviates root mean square, a certain averaging method */ /* i18n-hint: RMS abbreviates root mean square, a certain averaging method */
S.AddTitle(_("Contrast Analyzer, for measuring RMS volume differences between two selections of audio.")); S.AddTitle(XO(
"Contrast Analyzer, for measuring RMS volume differences between two selections of audio."));
} }
S.EndHorizontalLay(); S.EndHorizontalLay();
S.StartStatic( XO("Parameters") ); S.StartStatic( XO("Parameters") );

View File

@ -444,15 +444,15 @@ void EffectReverb::PopulateOrExchange(ShuttleGui & S)
.Style(wxSL_HORIZONTAL) \ .Style(wxSL_HORIZONTAL) \
.AddSlider( {}, DEF_ ## n, MAX_ ## n, MIN_ ## n); .AddSlider( {}, DEF_ ## n, MAX_ ## n, MIN_ ## n);
SpinSlider(RoomSize, _("&Room Size (%):")) SpinSlider(RoomSize, XO("&Room Size (%):"))
SpinSlider(PreDelay, _("&Pre-delay (ms):")) SpinSlider(PreDelay, XO("&Pre-delay (ms):"))
SpinSlider(Reverberance, _("Rever&berance (%):")) SpinSlider(Reverberance, XO("Rever&berance (%):"))
SpinSlider(HfDamping, _("Da&mping (%):")) SpinSlider(HfDamping, XO("Da&mping (%):"))
SpinSlider(ToneLow, _("Tone &Low (%):")) SpinSlider(ToneLow, XO("Tone &Low (%):"))
SpinSlider(ToneHigh, _("Tone &High (%):")) SpinSlider(ToneHigh, XO("Tone &High (%):"))
SpinSlider(WetGain, _("Wet &Gain (dB):")) SpinSlider(WetGain, XO("Wet &Gain (dB):"))
SpinSlider(DryGain, _("Dr&y Gain (dB):")) SpinSlider(DryGain, XO("Dr&y Gain (dB):"))
SpinSlider(StereoWidth, _("Stereo Wid&th (%):")) SpinSlider(StereoWidth, XO("Stereo Wid&th (%):"))
#undef SpinSlider #undef SpinSlider

View File

@ -351,13 +351,13 @@ void EffectToneGen::PopulateOrExchange(ShuttleGui & S)
{ {
S.StartHorizontalLay(wxLEFT, 50); S.StartHorizontalLay(wxLEFT, 50);
{ {
S.AddTitle(_("Start")); S.AddTitle(XO("Start"));
} }
S.EndHorizontalLay(); S.EndHorizontalLay();
S.StartHorizontalLay(wxLEFT, 50); S.StartHorizontalLay(wxLEFT, 50);
{ {
S.AddTitle(_("End")); S.AddTitle(XO("End"));
} }
S.EndHorizontalLay(); S.EndHorizontalLay();
} }

View File

@ -226,7 +226,7 @@ void ExportPlugin::OptionsCreate(ShuttleGui &S, int WXUNUSED(format))
{ {
S.StartHorizontalLay(wxCENTER, 0); S.StartHorizontalLay(wxCENTER, 0);
{ {
S.Prop(1).AddTitle(_("No format specific options")); S.Prop(1).AddTitle(XO("No format specific options"));
} }
S.EndHorizontalLay(); S.EndHorizontalLay();
} }

View File

@ -120,7 +120,7 @@ void ExportCLOptions::PopulateOrExchange(ShuttleGui & S)
S.StartMultiColumn(3, wxEXPAND); S.StartMultiColumn(3, wxEXPAND);
{ {
S.SetStretchyCol(1); S.SetStretchyCol(1);
mCmd = S.AddCombo(_("Command:"), mCmd = S.AddCombo(XO("Command:"),
cmd, cmd,
cmds); cmds);
S.Id(ID_BROWSE).AddButton(XO("Browse..."), S.Id(ID_BROWSE).AddButton(XO("Browse..."),
@ -134,12 +134,13 @@ void ExportCLOptions::PopulateOrExchange(ShuttleGui & S)
} }
S.EndHorizontalLay(); S.EndHorizontalLay();
S.AddTitle(XO(
/* i18n-hint: Some programmer-oriented terminology here: /* i18n-hint: Some programmer-oriented terminology here:
"Data" refers to the sound to be exported, "piped" means sent, "Data" refers to the sound to be exported, "piped" means sent,
and "standard in" means the default input stream that the external program, and "standard in" means the default input stream that the external program,
named by %f, will read. And yes, it's %f, not %s -- this isn't actually used named by %f, will read. And yes, it's %f, not %s -- this isn't actually used
in the program as a format string. Keep %f unchanged. */ in the program as a format string. Keep %f unchanged. */
S.AddTitle(_("Data will be piped to standard in. \"%f\" uses the file name in the export window.")); "Data will be piped to standard in. \"%f\" uses the file name in the export window."));
} }
S.EndVerticalLay(); S.EndVerticalLay();
} }

View File

@ -1051,13 +1051,13 @@ int ExportFFmpeg::AskResample(int bitrate, int rate, int lowrate, int highrate,
{ {
S.AddTitle( S.AddTitle(
(bitrate == 0 (bitrate == 0
? wxString::Format( ? XO(
_("The project sample rate (%d) is not supported by the current output\nfile format. "), "The project sample rate (%d) is not supported by the current output\nfile format. ")
rate) .Format( rate )
: wxString::Format( : XO(
_("The project sample rate (%d) and bit rate (%d kbps) combination is not\nsupported by the current output file format. "), "The project sample rate (%d) and bit rate (%d kbps) combination is not\nsupported by the current output file format. ")
rate, bitrate/1024)) .Format( rate, bitrate/1024))
+ _("You may resample to one of the rates below.") + XO("You may resample to one of the rates below.")
); );
} }
S.EndHorizontalLay(); S.EndHorizontalLay();

View File

@ -1541,7 +1541,7 @@ void ExportFFmpegOptions::PopulateOrExchange(ShuttleGui & S)
S.StartMultiColumn(7, wxEXPAND); S.StartMultiColumn(7, wxEXPAND);
{ {
S.SetStretchyCol(1); S.SetStretchyCol(1);
mPresetCombo = S.Id(FEPresetID).AddCombo(_("Preset:"), gPrefs->Read(wxT("/FileFormats/FFmpegPreset"),wxEmptyString), mPresetNames); mPresetCombo = S.Id(FEPresetID).AddCombo(XO("Preset:"), gPrefs->Read(wxT("/FileFormats/FFmpegPreset"),wxEmptyString), mPresetNames);
mLoadPreset = S.Id(FELoadPresetID).AddButton(XO("Load Preset")); mLoadPreset = S.Id(FELoadPresetID).AddButton(XO("Load Preset"));
mSavePreset = S.Id(FESavePresetID).AddButton(XO("Save Preset")); mSavePreset = S.Id(FESavePresetID).AddButton(XO("Save Preset"));
mDeletePreset = S.Id(FEDeletePresetID).AddButton(XO("Delete Preset")); mDeletePreset = S.Id(FEDeletePresetID).AddButton(XO("Delete Preset"));
@ -1606,19 +1606,19 @@ void ExportFFmpegOptions::PopulateOrExchange(ShuttleGui & S)
mBitrateSpin = S.Id(FEBitrateID) mBitrateSpin = S.Id(FEBitrateID)
.ToolTip(XO("Bit Rate (bits/second) - influences the resulting file size and quality\nSome codecs may only accept specific values (128k, 192k, 256k etc)\n0 - automatic\nRecommended - 192000")) .ToolTip(XO("Bit Rate (bits/second) - influences the resulting file size and quality\nSome codecs may only accept specific values (128k, 192k, 256k etc)\n0 - automatic\nRecommended - 192000"))
.TieSpinCtrl(_("Bit Rate:"), {wxT("/FileFormats/FFmpegBitRate"), 0}, 1000000, 0); .TieSpinCtrl(XO("Bit Rate:"), {wxT("/FileFormats/FFmpegBitRate"), 0}, 1000000, 0);
mQualitySpin = S.Id(FEQualityID) mQualitySpin = S.Id(FEQualityID)
.ToolTip(XO("Overall quality, used differently by different codecs\nRequired for vorbis\n0 - automatic\n-1 - off (use bitrate instead)")) .ToolTip(XO("Overall quality, used differently by different codecs\nRequired for vorbis\n0 - automatic\n-1 - off (use bitrate instead)"))
.TieSpinCtrl(_("Quality:"), {wxT("/FileFormats/FFmpegQuality"), 0}, 500, -1); .TieSpinCtrl(XO("Quality:"), {wxT("/FileFormats/FFmpegQuality"), 0}, 500, -1);
mSampleRateSpin = S.Id(FESampleRateID) mSampleRateSpin = S.Id(FESampleRateID)
.ToolTip(XO("Sample rate (Hz)\n0 - don't change sample rate")) .ToolTip(XO("Sample rate (Hz)\n0 - don't change sample rate"))
.TieSpinCtrl(_("Sample Rate:"), {wxT("/FileFormats/FFmpegSampleRate"), 0}, 200000, 0); .TieSpinCtrl(XO("Sample Rate:"), {wxT("/FileFormats/FFmpegSampleRate"), 0}, 200000, 0);
mCutoffSpin = S.Id(FECutoffID) mCutoffSpin = S.Id(FECutoffID)
.ToolTip(XO("Audio cutoff bandwidth (Hz)\nOptional\n0 - automatic")) .ToolTip(XO("Audio cutoff bandwidth (Hz)\nOptional\n0 - automatic"))
.TieSpinCtrl(_("Cutoff:"), {wxT("/FileFormats/FFmpegCutOff"), 0}, 10000000, 0); .TieSpinCtrl(XO("Cutoff:"), {wxT("/FileFormats/FFmpegCutOff"), 0}, 10000000, 0);
mProfileChoice = S.Id(FEProfileID) mProfileChoice = S.Id(FEProfileID)
.ToolTip(XO("AAC Profile\nLow Complexity - default\nMost players won't play anything other than LC")) .ToolTip(XO("AAC Profile\nLow Complexity - default\nMost players won't play anything other than LC"))
@ -1634,15 +1634,15 @@ void ExportFFmpegOptions::PopulateOrExchange(ShuttleGui & S)
{ {
mCompressionLevelSpin = S mCompressionLevelSpin = S
.ToolTip(XO("Compression level\nRequired for FLAC\n-1 - automatic\nmin - 0 (fast encoding, large output file)\nmax - 10 (slow encoding, small output file)")) .ToolTip(XO("Compression level\nRequired for FLAC\n-1 - automatic\nmin - 0 (fast encoding, large output file)\nmax - 10 (slow encoding, small output file)"))
.Id(FECompLevelID).TieSpinCtrl(_("Compression:"), {wxT("/FileFormats/FFmpegCompLevel"), 0}, 10, -1); .Id(FECompLevelID).TieSpinCtrl(XO("Compression:"), {wxT("/FileFormats/FFmpegCompLevel"), 0}, 10, -1);
mFrameSizeSpin = S.Id(FEFrameSizeID) mFrameSizeSpin = S.Id(FEFrameSizeID)
.ToolTip(XO("Frame size\nOptional\n0 - default\nmin - 16\nmax - 65535")) .ToolTip(XO("Frame size\nOptional\n0 - default\nmin - 16\nmax - 65535"))
.TieSpinCtrl(_("Frame:"), {wxT("/FileFormats/FFmpegFrameSize"), 0}, 65535, 0); .TieSpinCtrl(XO("Frame:"), {wxT("/FileFormats/FFmpegFrameSize"), 0}, 65535, 0);
mLPCCoeffsPrecisionSpin = S.Id(FELPCCoeffsID) mLPCCoeffsPrecisionSpin = S.Id(FELPCCoeffsID)
.ToolTip(XO("LPC coefficients precision\nOptional\n0 - default\nmin - 1\nmax - 15")) .ToolTip(XO("LPC coefficients precision\nOptional\n0 - default\nmin - 1\nmax - 15"))
.TieSpinCtrl(_("LPC"), {wxT("/FileFormats/FFmpegLPCCoefPrec"), 0}, 15, 0); .TieSpinCtrl(XO("LPC"), {wxT("/FileFormats/FFmpegLPCCoefPrec"), 0}, 15, 0);
mPredictionOrderMethodChoice = S.Id(FEPredOrderID) mPredictionOrderMethodChoice = S.Id(FEPredOrderID)
.ToolTip(XO("Prediction Order Method\nEstimate - fastest, lower compression\nLog search - slowest, best compression\nFull search - default")) .ToolTip(XO("Prediction Order Method\nEstimate - fastest, lower compression\nLog search - slowest, best compression\nFull search - default"))
@ -1656,19 +1656,19 @@ void ExportFFmpegOptions::PopulateOrExchange(ShuttleGui & S)
mMinPredictionOrderSpin = S.Id(FEMinPredID) mMinPredictionOrderSpin = S.Id(FEMinPredID)
.ToolTip(XO("Minimal prediction order\nOptional\n-1 - default\nmin - 0\nmax - 32 (with LPC) or 4 (without LPC)")) .ToolTip(XO("Minimal prediction order\nOptional\n-1 - default\nmin - 0\nmax - 32 (with LPC) or 4 (without LPC)"))
.TieSpinCtrl(_("Min. PdO"), {wxT("/FileFormats/FFmpegMinPredOrder"), -1}, 32, -1); .TieSpinCtrl(XO("Min. PdO"), {wxT("/FileFormats/FFmpegMinPredOrder"), -1}, 32, -1);
mMaxPredictionOrderSpin = S.Id(FEMaxPredID) mMaxPredictionOrderSpin = S.Id(FEMaxPredID)
.ToolTip(XO("Maximal prediction order\nOptional\n-1 - default\nmin - 0\nmax - 32 (with LPC) or 4 (without LPC)")) .ToolTip(XO("Maximal prediction order\nOptional\n-1 - default\nmin - 0\nmax - 32 (with LPC) or 4 (without LPC)"))
.TieSpinCtrl(_("Max. PdO"), {wxT("/FileFormats/FFmpegMaxPredOrder"), -1}, 32, -1); .TieSpinCtrl(XO("Max. PdO"), {wxT("/FileFormats/FFmpegMaxPredOrder"), -1}, 32, -1);
mMinPartitionOrderSpin = S.Id(FEMinPartOrderID) mMinPartitionOrderSpin = S.Id(FEMinPartOrderID)
.ToolTip(XO("Minimal partition order\nOptional\n-1 - default\nmin - 0\nmax - 8")) .ToolTip(XO("Minimal partition order\nOptional\n-1 - default\nmin - 0\nmax - 8"))
.TieSpinCtrl(_("Min. PtO"), {wxT("/FileFormats/FFmpegMinPartOrder"), -1}, 8, -1); .TieSpinCtrl(XO("Min. PtO"), {wxT("/FileFormats/FFmpegMinPartOrder"), -1}, 8, -1);
mMaxPartitionOrderSpin = S.Id(FEMaxPartOrderID) mMaxPartitionOrderSpin = S.Id(FEMaxPartOrderID)
.ToolTip(XO("Maximal partition order\nOptional\n-1 - default\nmin - 0\nmax - 8")) .ToolTip(XO("Maximal partition order\nOptional\n-1 - default\nmin - 0\nmax - 8"))
.TieSpinCtrl(_("Max. PtO"), {wxT("/FileFormats/FFmpegMaxPartOrder"), -1}, 8, -1); .TieSpinCtrl(XO("Max. PtO"), {wxT("/FileFormats/FFmpegMaxPartOrder"), -1}, 8, -1);
/* i18n-hint: Abbreviates "Linear Predictive Coding", /* i18n-hint: Abbreviates "Linear Predictive Coding",
but this text needs to be kept very short */ but this text needs to be kept very short */
@ -1688,13 +1688,13 @@ void ExportFFmpegOptions::PopulateOrExchange(ShuttleGui & S)
it has a hard to predict effect on the degree of compression */ it has a hard to predict effect on the degree of compression */
mMuxRate = S.Id(FEMuxRateID) mMuxRate = S.Id(FEMuxRateID)
.ToolTip(XO("Maximum bit rate of the multiplexed stream\nOptional\n0 - default")) .ToolTip(XO("Maximum bit rate of the multiplexed stream\nOptional\n0 - default"))
.TieSpinCtrl(_("Mux Rate:"), {wxT("/FileFormats/FFmpegMuxRate"), 0}, 10000000, 0); .TieSpinCtrl(XO("Mux Rate:"), {wxT("/FileFormats/FFmpegMuxRate"), 0}, 10000000, 0);
/* i18n-hint: 'Packet Size' is a parameter that has some bearing on compression ratio for MPEG /* i18n-hint: 'Packet Size' is a parameter that has some bearing on compression ratio for MPEG
compression. It measures how big a chunk of audio is compressed in one piece. */ compression. It measures how big a chunk of audio is compressed in one piece. */
mPacketSize = S.Id(FEPacketSizeID) mPacketSize = S.Id(FEPacketSizeID)
.ToolTip(XO("Packet size\nOptional\n0 - default")) .ToolTip(XO("Packet size\nOptional\n0 - default"))
.TieSpinCtrl(_("Packet Size:"), {wxT("/FileFormats/FFmpegPacketSize"), 0}, 10000000, 0); .TieSpinCtrl(XO("Packet Size:"), {wxT("/FileFormats/FFmpegPacketSize"), 0}, 10000000, 0);
} }
S.EndMultiColumn(); S.EndMultiColumn();
} }

View File

@ -576,13 +576,13 @@ public:
S.StartVerticalLay(true); S.StartVerticalLay(true);
{ {
S.AddTitle( S.AddTitle(
wxString::Format(_("Audacity needs the file %s to create MP3s."), XO("Audacity needs the file %s to create MP3s.")
mName)); .Format( mName ) );
S.SetBorder(3); S.SetBorder(3);
S.StartHorizontalLay(wxALIGN_LEFT, true); S.StartHorizontalLay(wxALIGN_LEFT, true);
{ {
S.AddTitle( wxString::Format(_("Location of %s:"), mName) ); S.AddTitle( XO("Location of %s:").Format( mName ) );
} }
S.EndHorizontalLay(); S.EndHorizontalLay();
@ -2017,13 +2017,13 @@ int ExportMP3::AskResample(int bitrate, int rate, int lowrate, int highrate)
{ {
S.AddTitle( S.AddTitle(
((bitrate == 0) ((bitrate == 0)
? wxString::Format( ? XO(
_("The project sample rate (%d) is not supported by the MP3\nfile format. "), "The project sample rate (%d) is not supported by the MP3\nfile format. ")
rate) .Format( rate )
: wxString::Format( : XO(
_("The project sample rate (%d) and bit rate (%d kbps) combination is not\nsupported by the MP3 file format. "), "The project sample rate (%d) and bit rate (%d kbps) combination is not\nsupported by the MP3 file format. ")
rate, bitrate)) .Format( rate, bitrate ))
+ _("You may resample to one of the rates below.") + XO("You may resample to one of the rates below.")
); );
} }
S.EndHorizontalLay(); S.EndHorizontalLay();

View File

@ -722,7 +722,7 @@ void OnResample(const CommandContext &context)
S.StartHorizontalLay(wxCENTER, false); S.StartHorizontalLay(wxCENTER, false);
{ {
cb = S.AddCombo(_("New sample rate (Hz):"), cb = S.AddCombo(XO("New sample rate (Hz):"),
rate, rate,
rates); rates);
} }

View File

@ -122,8 +122,8 @@ void KeyConfigPrefs::Populate()
{ {
S.StartStatic( {}, true); S.StartStatic( {}, true);
{ {
S.AddTitle(_("Keyboard preferences currently unavailable.")); S.AddTitle(XO("Keyboard preferences currently unavailable."));
S.AddTitle(_("Open a new project to modify keyboard shortcuts.")); S.AddTitle(XO("Open a new project to modify keyboard shortcuts."));
} }
S.EndStatic(); S.EndStatic();
} }
@ -173,7 +173,7 @@ void KeyConfigPrefs::PopulateOrExchange(ShuttleGui & S)
S.StartHorizontalLay(wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL, 0); S.StartHorizontalLay(wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL, 0);
{ {
S.AddTitle(_("View by:")); S.AddTitle(XO("View by:"));
S.StartRadioButtonGroup({ S.StartRadioButtonGroup({
wxT("/Prefs/KeyConfig/ViewBy"), wxT("/Prefs/KeyConfig/ViewBy"),
{ {

View File

@ -504,7 +504,7 @@ void RateMenuTable::OnRateOther(wxCommandEvent &)
S.SetBorder(10); S.SetBorder(10);
S.StartHorizontalLay(wxEXPAND, false); S.StartHorizontalLay(wxEXPAND, false);
{ {
cb = S.AddCombo(_("New sample rate (Hz):"), cb = S.AddCombo(XO("New sample rate (Hz):"),
rate, rate,
rates); rates);
#if defined(__WXMAC__) #if defined(__WXMAC__)

View File

@ -105,7 +105,7 @@ void HelpSystem::ShowInfoDialog( wxWindow *parent,
S.StartVerticalLay(1); S.StartVerticalLay(1);
{ {
S.AddTitle( shortMsg.Translation() ); S.AddTitle( shortMsg );
S.Style( wxTE_MULTILINE | wxTE_READONLY | wxTE_RICH | wxTE_RICH2 | S.Style( wxTE_MULTILINE | wxTE_READONLY | wxTE_RICH | wxTE_RICH2 |
wxTE_AUTO_URL | wxTE_NOHIDESEL | wxHSCROLL ) wxTE_AUTO_URL | wxTE_NOHIDESEL | wxHSCROLL )
.AddTextWindow(message); .AddTextWindow(message);