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.StartVerticalLay(true);
{
S.AddTitle( wxString::Format(
_("Audacity needs the file '%s' to import and export audio via FFmpeg."),
mName));
S.AddTitle(
XO(
"Audacity needs the file '%s' to import and export audio via FFmpeg.")
.Format( mName ) );
S.SetBorder(3);
S.StartHorizontalLay(wxALIGN_LEFT, true);
{
S.AddTitle( wxString::Format(_("Location of '%s':"), mName) );
S.AddTitle( XO("Location of '%s':").Format( mName ) );
}
S.EndHorizontalLay();

View File

@ -266,18 +266,19 @@ void ShuttleGuiBase::AddUnits(const wxString &Prompt, int wrapWidth)
}
/// Centred text string.
void ShuttleGuiBase::AddTitle(const wxString &Prompt, int wrapWidth)
void ShuttleGuiBase::AddTitle(const TranslatableString &Prompt, int wrapWidth)
{
if( Prompt.empty() )
return;
if( mShuttleMode != eIsCreating )
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 ));
mpWind = text;
if (wrapWidth > 0)
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();
}
@ -478,10 +479,13 @@ wxStaticText * ShuttleGuiBase::AddVariableText(
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 );
AddPrompt( Prompt );
const auto translated = Prompt.Translation();
HandleOptionality( translated );
AddPrompt( translated );
UseUpId();
if( mShuttleMode != eIsCreating )
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,
n, Choices, GetStyle( 0 ));
mpWind->SetName(wxStripMenuCodes(Prompt));
mpWind->SetName(wxStripMenuCodes(translated));
UpdateSizers();
return pCombo;
@ -569,10 +573,12 @@ wxSlider * ShuttleGuiBase::AddSlider(const wxString &Prompt, int pos, int Max, i
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 );
AddPrompt( Prompt );
const auto translated = Prompt.Translation();
HandleOptionality( translated );
AddPrompt( translated );
UseUpId();
if( mShuttleMode != eIsCreating )
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 ),
Min, Max, Value
);
mpWind->SetName(wxStripMenuCodes(Prompt));
mpWind->SetName(wxStripMenuCodes(translated));
miProp=1;
UpdateSizers();
return pSpinCtrl;
@ -1299,9 +1305,11 @@ wxCheckBox * ShuttleGuiBase::DoTieCheckBoxOnRight(const wxString &Prompt, Wrappe
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.
if( mShuttleMode == eIsCreating )
return AddSpinCtrl( Prompt, WrappedRef.ReadAsInt(), max, min );
@ -1625,7 +1633,8 @@ wxCheckBox * ShuttleGuiBase::TieCheckBoxOnRight(const wxString &Prompt, bool &Va
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);
return DoTieSpinCtrl( Prompt, WrappedRef, max, min );
@ -1872,10 +1881,10 @@ wxSlider * ShuttleGuiBase::TieSlider(
/// Variant of the standard TieSpinCtrl which does the two step exchange
/// between gui and stack variable and stack variable and shuttle.
wxSpinCtrl * ShuttleGuiBase::TieSpinCtrl(
const wxString &Prompt,
const SettingSpec< int > &Setting,
const int max,
const int min)
const TranslatableString &Prompt,
const SettingSpec< int > &Setting,
const int max,
const int min)
{
wxSpinCtrl * pSpinCtrl=NULL;

View File

@ -268,11 +268,12 @@ public:
void HandleOptionality(const wxString &Prompt);
void AddPrompt(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);
wxSlider * AddSlider(const wxString &Prompt, int pos, int Max, int Min = 0);
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();
// Pass the same initValue to the sequence of calls to AddRadioButton and
@ -331,7 +332,8 @@ public:
wxGrid * AddGrid();
wxCheckBox * AddCheckBox( 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,
const TranslatableStrings &choices, int Selected = -1 );
wxChoice * AddChoice( const TranslatableString &Prompt,
@ -420,7 +422,8 @@ public:
// and as many times as there are values in the enumeration.
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
@ -468,7 +471,7 @@ public:
const int max,
const int min = 0);
virtual wxSpinCtrl * TieSpinCtrl(
const wxString &Prompt,
const TranslatableString &Prompt,
const SettingSpec< int > &Setting,
const int max,
const int min);
@ -553,7 +556,8 @@ private:
const TranslatableString &Prompt, WrappedType & WrappedRef,
const TranslatableStrings & choices );
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;
wxString mRadioSettingName; /// The setting controlled by a group.

View File

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

View File

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

View File

@ -299,7 +299,7 @@ void EffectChangeSpeed::PopulateOrExchange(ShuttleGui & S)
S.StartVerticalLay(0);
{
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);
// Speed multiplier and percent change controls.

View File

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

View File

@ -224,7 +224,8 @@ ContrastDialog::ContrastDialog(wxWindow * parent, wxWindowID id,
S.StartHorizontalLay(wxCENTER, false);
{
/* 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.StartStatic( XO("Parameters") );

View File

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

View File

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

View File

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

View File

@ -120,7 +120,7 @@ void ExportCLOptions::PopulateOrExchange(ShuttleGui & S)
S.StartMultiColumn(3, wxEXPAND);
{
S.SetStretchyCol(1);
mCmd = S.AddCombo(_("Command:"),
mCmd = S.AddCombo(XO("Command:"),
cmd,
cmds);
S.Id(ID_BROWSE).AddButton(XO("Browse..."),
@ -134,12 +134,13 @@ void ExportCLOptions::PopulateOrExchange(ShuttleGui & S)
}
S.EndHorizontalLay();
S.AddTitle(XO(
/* i18n-hint: Some programmer-oriented terminology here:
"Data" refers to the sound to be exported, "piped" means sent,
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
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();
}

View File

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

View File

@ -1541,7 +1541,7 @@ void ExportFFmpegOptions::PopulateOrExchange(ShuttleGui & S)
S.StartMultiColumn(7, wxEXPAND);
{
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"));
mSavePreset = S.Id(FESavePresetID).AddButton(XO("Save Preset"));
mDeletePreset = S.Id(FEDeletePresetID).AddButton(XO("Delete Preset"));
@ -1606,19 +1606,19 @@ void ExportFFmpegOptions::PopulateOrExchange(ShuttleGui & S)
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"))
.TieSpinCtrl(_("Bit Rate:"), {wxT("/FileFormats/FFmpegBitRate"), 0}, 1000000, 0);
.TieSpinCtrl(XO("Bit Rate:"), {wxT("/FileFormats/FFmpegBitRate"), 0}, 1000000, 0);
mQualitySpin = S.Id(FEQualityID)
.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)
.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)
.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)
.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
.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)
.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)
.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)
.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)
.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)
.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)
.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)
.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",
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 */
mMuxRate = S.Id(FEMuxRateID)
.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
compression. It measures how big a chunk of audio is compressed in one piece. */
mPacketSize = S.Id(FEPacketSizeID)
.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();
}

View File

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

View File

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

View File

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

View File

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

View File

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