Reviewed all i18n-hint comments...

... Moved many misplaced ones, which msgfmt would not have extracted into
audacity.pot.

Duplicated some of them, to appear with related but distinct msgids.

Added a few new comments.

Deleted one that was no longer needed in ProjectManager.cpp.
This commit is contained in:
Paul Licameli 2020-04-05 08:40:15 -04:00
parent 31ec92b80a
commit 61abb87a77
42 changed files with 174 additions and 96 deletions

View File

@ -336,13 +336,13 @@ visit our [[https://forum.audacityteam.org/|forum]].");
if( par2StrTranslated == par2Str.MSGID().GET() )
par2StrTranslated.Replace( wxT(", in English,"), wxT("") );
auto translatorCreditsMsgid = XO("translator_credits");
auto translatorCredits = translatorCreditsMsgid.Translation();
/* i18n-hint: The translation of "translator_credits" will appear
* in the credits in the About Audacity window. Use this to add
* your own name(s) to the credits.
*
* For example: "English translation by Dominic Mazzoni." */
auto translatorCreditsMsgid = XO("translator_credits");
auto translatorCredits = translatorCreditsMsgid.Translation();
if ( translatorCredits == translatorCreditsMsgid.MSGID().GET() )
// We're in an English locale
translatorCredits.clear();
@ -537,10 +537,10 @@ void AboutDialog::PopulateInformationPage( ShuttleGui & S )
AddBuildinfoRow(&informationStr, wxT("libmad"), XO("MP3 Importing"), disabled);
#endif
/* i18n-hint: Ogg is the container format. Vorbis is the compression codec.
* Both are proper nouns and shouldn't be translated */
#ifdef USE_LIBVORBIS
AddBuildinfoRow(&informationStr, wxT("libvorbis"),
/* i18n-hint: Ogg is the container format. Vorbis is the compression codec.
* Both are proper nouns and shouldn't be translated */
XO("Ogg Vorbis Import and Export"), enabled);
#else
AddBuildinfoRow(&informationStr, wxT("libvorbis"),
@ -555,9 +555,9 @@ void AboutDialog::PopulateInformationPage( ShuttleGui & S )
disabled);
#endif
# if USE_LIBFLAC
/* i18n-hint: FLAC stands for Free Lossless Audio Codec, but is effectively
* a proper noun and so shouldn't be translated */
# if USE_LIBFLAC
AddBuildinfoRow(&informationStr, wxT("libflac"), XO("FLAC import and export"),
enabled);
# else
@ -740,8 +740,8 @@ void AboutDialog::PopulateInformationPage( ShuttleGui & S )
#endif
// Install prefix
/* i18n-hint: The directory audacity is installed into (on *nix systems) */
#ifdef __WXGTK__
/* i18n-hint: The directory audacity is installed into (on *nix systems) */
AddBuildinfoRow(&informationStr, XO("Installation Prefix:"), \
wxT(INSTALL_PREFIX));
#endif

View File

@ -1071,16 +1071,24 @@ void AdornedRulerPanel::InvalidateRuler()
namespace {
const TranslatableString StartScrubbingMessage(const Scrubber &/*scrubber*/)
{
#if 0
if(scrubber.Seeks())
/* i18n-hint: These commands assist the user in finding a sound by ear. ...
"Scrubbing" is variable-speed playback, ...
"Seeking" is normal speed playback but with skips
*/
#if 0
if(scrubber.Seeks())
return XO("Click or drag to begin Seek");
else
/* i18n-hint: These commands assist the user in finding a sound by ear. ...
"Scrubbing" is variable-speed playback, ...
"Seeking" is normal speed playback but with skips
*/
return XO("Click or drag to begin Scrub");
#else
/* i18n-hint: These commands assist the user in finding a sound by ear. ...
"Scrubbing" is variable-speed playback, ...
"Seeking" is normal speed playback but with skips
*/
return XO("Click & move to Scrub. Click & drag to Seek.");
#endif
}
@ -1088,14 +1096,18 @@ namespace {
const TranslatableString ContinueScrubbingMessage(
const Scrubber &scrubber, bool clicked)
{
#if 0
if(scrubber.Seeks())
/* i18n-hint: These commands assist the user in finding a sound by ear. ...
"Scrubbing" is variable-speed playback, ...
"Seeking" is normal speed playback but with skips
*/
#if 0
if(scrubber.Seeks())
return XO("Move to Seek");
else
/* i18n-hint: These commands assist the user in finding a sound by ear. ...
"Scrubbing" is variable-speed playback, ...
"Seeking" is normal speed playback but with skips
*/
return XO("Move to Scrub");
#else
if( clicked ) {

View File

@ -1136,6 +1136,7 @@ wxString AudioIOBase::GetMidiDeviceInfo()
s << XO("Host name: %s\n").Format( hostName );
/* i18n-hint: Supported, meaning made available by the system */
s << XO("Supports output: %d\n").Format( info->output );
/* i18n-hint: Supported, meaning made available by the system */
s << XO("Supports input: %d\n").Format( info->input );
s << XO("Opened: %d\n").Format( info->opened );

View File

@ -962,8 +962,8 @@ void MacrosWindow::OnAdd(wxCommandEvent & WXUNUSED(event))
if (name.Contains(wxFILE_SEP_PATH) ||
name.Contains(wxFILE_SEP_PATH_UNIX)) {
/*i18n-hint: The %c will be replaced with 'forbidden characters', like '/' and '\'.*/
AudacityMessageBox(
/*i18n-hint: The %c will be replaced with 'forbidden characters', like '/' and '\'.*/
XO("Names may not contain '%c' and '%c'")
.Format(wxFILE_SEP_PATH, wxFILE_SEP_PATH_UNIX),
WindowTitle(),

View File

@ -134,7 +134,7 @@ END_EVENT_TABLE()
BenchmarkDialog::BenchmarkDialog(
wxWindow *parent, const ProjectSettings &settings)
:
/* i18n-hint: Benchmark means a software speed test */
/* i18n-hint: Benchmark means a software speed test */
wxDialogWrapper( parent, 0, XO("Benchmark"),
wxDefaultPosition, wxDefaultSize,
wxDEFAULT_DIALOG_STYLE |

View File

@ -400,7 +400,11 @@ void DependencyDialog::PopulateOrExchange(ShuttleGui& S)
/*i18n-hint: One of the choices of what you want Audacity to do when
* Audacity finds a project depends on another file.*/
XO("Ask me") ,
/*i18n-hint: One of the choices of what you want Audacity to do when
* Audacity finds a project depends on another file.*/
XO("Always copy all files (safest)") ,
/*i18n-hint: One of the choices of what you want Audacity to do when
* Audacity finds a project depends on another file.*/
XO("Never copy any files") ,
},
0 // "Ask me"

View File

@ -1474,9 +1474,7 @@ bool DirManager::EnsureSafeFilename(const wxFileName &fName)
if ( !make_iterator_range( aliasList ).contains( fullPath ) )
return true;
/* i18n-hint: 'old' is part of a filename used when a file is renamed. */
// Figure out what the NEW name for the existing file would be.
/* i18n-hint: e.g. Try to go from "mysong.wav" to "mysong-old1.wav". */
// Keep trying until we find a filename that doesn't exist.
wxFileNameWrapper renamedFileName{ fName };
@ -1485,7 +1483,9 @@ bool DirManager::EnsureSafeFilename(const wxFileName &fName)
i++;
/* i18n-hint: This is the pattern for filenames that are created
* when a file needs to be backed up to a different name. For
* example, mysong would become mysong-old1, mysong-old2, etc. */
* example, mysong would become mysong-old1, mysong-old2, etc.
* 'old' is part of a filename used when a file is renamed.
* e.g. Try to go from "mysong.wav" to "mysong-old1.wav". */
renamedFileName.SetName(wxString::Format(_("%s-old%d"), fName.GetName(), i));
} while (renamedFileName.FileExists());
@ -1506,8 +1506,8 @@ bool DirManager::EnsureSafeFilename(const wxFileName &fName)
testFile.Close();
if (!wxRemoveFile(renamedFullPath)) {
/* i18n-hint: %s is the name of a file.*/
{ // need braces to avoid compiler warning about ambiguous else, see the macro
/* i18n-hint: %s is the name of a file.*/
wxLogSysError(_("Unable to remove '%s'."),
renamedFullPath);
}

View File

@ -329,7 +329,7 @@ int SFFileCloser::operator() (SNDFILE *sf) const
char buffer[1000];
sf_error_str(sf, buffer, 1000);
AudacityMessageBox(
/* i18n-hint: %s will be the error message from libsndfile */
/* i18n-hint: %s will be the error message from the libsndfile software library */
XO( "Error (file may not have been written): %s" )
// Not attempting to localize error messages
// from the library

View File

@ -215,8 +215,6 @@ static wxString HelpTextBuiltIn( const wxString & Key )
if (Key == wxT("welcome"))
{
/* i18n-hint: Preserve '[[help:Quick_Help|' as it's the name of a link.*/
/* i18n-hint: Preserve '[[help:Main_Page|' as it's the name of a link.*/
wxStringOutputStream o;
wxTextOutputStream s(o);
s
@ -267,9 +265,11 @@ static wxString HelpTextBuiltIn( const wxString & Key )
<< wxT("</h3></center>")
<< XO("These are our support methods:")
<< wxT("<p><ul><li>")
/* i18n-hint: Preserve '[[help:Quick_Help|' as it's the name of a link.*/
<< XO("[[help:Quick_Help|Quick Help]] - if not installed locally, [[https://manual.audacityteam.org/quick_help.html|view online]]")
<< wxT("</li><li>")
<< XO(
/* i18n-hint: Preserve '[[help:Main_Page|' as it's the name of a link.*/
" [[help:Main_Page|Manual]] - if not installed locally, [[https://manual.audacityteam.org/|view online]]")
<< wxT("</li><li>")
<< XO(

View File

@ -391,9 +391,9 @@ AttachedItem sAttachment{ wxT("View/Windows"),
// FOR REDESIGN,
// clearly there are some limitations with the flags/mask bitmaps.
( FinderScope{ findCommandHandler },
/* i18n-hint: Clicking this menu item shows the various editing steps
that have been taken.*/
( FinderScope{ findCommandHandler },
Command( wxT("UndoHistory"), XXO("&History..."), &Handler::OnHistory,
AudioIONotBusyFlag() ) )
};

View File

@ -835,10 +835,6 @@ void ProjectManager::OnOpenAudioFile(wxCommandEvent & event)
// static method, can be called outside of a project
void ProjectManager::OpenFiles(AudacityProject *proj)
{
/* i18n-hint: This string is a label in the file type filter in the open
* and save dialogues, for the option that only shows project files created
* with Audacity. Do not include pipe symbols or .aup (this extension will
* now be added automatically for the Save Projects dialogues).*/
auto selectedFiles =
ProjectFileManager::ShowOpenDialog( FileNames::AudacityProjects );
if (selectedFiles.size() == 0) {

View File

@ -362,16 +362,16 @@ void ScreenshotBigDialog::PopulateOrExchange(ShuttleGui & S)
{
S.Id(IdMainWindowSmall).AddButton(XO("Resize Small"));
S.Id(IdMainWindowLarge).AddButton(XO("Resize Large"));
/* i18n-hint: Bkgnd is short for background and appears on a small button
* It is OK to just translate this item as if it said 'Blue' */
mBlue = safenew wxToggleButton(S.GetParent(),
IdToggleBackgroundBlue,
/* i18n-hint: Bkgnd is short for background and appears on a small button
* It is OK to just translate this item as if it said 'Blue' */
_("Blue Bkgnd"));
S.AddWindow(mBlue);
/* i18n-hint: Bkgnd is short for background and appears on a small button
* It is OK to just translate this item as if it said 'White' */
mWhite = safenew wxToggleButton(S.GetParent(),
IdToggleBackgroundWhite,
/* i18n-hint: Bkgnd is short for background and appears on a small button
* It is OK to just translate this item as if it said 'White' */
_("White Bkgnd"));
S.AddWindow(mWhite);
}

View File

@ -952,8 +952,8 @@ bool ThemeBase::ReadImageCache( teThemeType type, bool bOkIfNotFound)
}
if( !ImageCache.LoadFile( FileName, wxBITMAP_TYPE_PNG ))
{
/* i18n-hint: Do not translate png. It is the name of a file format.*/
AudacityMessageBox(
/* i18n-hint: Do not translate png. It is the name of a file format.*/
XO("Audacity could not load file:\n %s.\nBad png format perhaps?")
.Format( FileName ));
return false;
@ -1076,9 +1076,9 @@ void ThemeBase::LoadComponents( bool bOkIfNotFound )
{
if( !mImages[i].LoadFile( FileName, wxBITMAP_TYPE_PNG ))
{
/* i18n-hint: Do not translate png. It is the name of a file format.*/
AudacityMessageBox(
XO(
/* i18n-hint: Do not translate png. It is the name of a file format.*/
"Audacity could not load file:\n %s.\nBad png format perhaps?")
.Format( FileName ));
return;

View File

@ -899,6 +899,13 @@ void TimerRecordDialog::PopulateOrExchange(ShuttleGui& S)
S.StartStatic(XO("Duration"), true);
{
m_pTimeTextCtrl_Duration = safenew NumericTextCtrl(
S.GetParent(), ID_TIMETEXT_DURATION, NumericConverter::TIME,
{}, 0, 44100,
Options{}
.MenuEnabled(false)
.Format(strFormat1)
.Value(true, m_TimeSpan_Duration.GetSeconds().ToDouble()));
/* i18n-hint: This string is used to configure the controls which shows the recording
* duration. As such it is important that only the alphabetic parts of the string
* are translated, with the numbers left exactly as they are.
@ -907,13 +914,6 @@ void TimerRecordDialog::PopulateOrExchange(ShuttleGui& S)
* number displayed is minutes, and the 's' indicates that the fourth number displayed is
* seconds.
*/
m_pTimeTextCtrl_Duration = safenew NumericTextCtrl(
S.GetParent(), ID_TIMETEXT_DURATION, NumericConverter::TIME,
{}, 0, 44100,
Options{}
.MenuEnabled(false)
.Format(strFormat1)
.Value(true, m_TimeSpan_Duration.GetSeconds().ToDouble()));
S.Name(XO("Duration"))
.AddWindow(m_pTimeTextCtrl_Duration);
}

View File

@ -820,8 +820,8 @@ void VoiceKey::CalibrateNoise(const WaveTrack & t, sampleCount start, sampleCoun
mDirectionChangesSD =sqrt(sumdc2 / samples - mDirectionChangesMean * mDirectionChangesMean) ;
auto text = XO("Calibration Results\n");
/* i18n-hint: %1.4f is replaced by a number. sd stands for 'Standard Deviations'*/
text +=
/* i18n-hint: %1.4f is replaced by a number. sd stands for 'Standard Deviations'*/
XO("Energy -- mean: %1.4f sd: (%1.4f)\n")
.Format( mEnergyMean, mEnergySD );
text +=

View File

@ -342,7 +342,8 @@ void EffectChangeSpeed::PopulateOrExchange(ShuttleGui & S)
// Vinyl rpm controls.
S.StartMultiColumn(5, wxCENTER);
{
/* i18n-hint: "rpm" is an English abbreviation meaning "revolutions per minute". */
/* i18n-hint: "rpm" is an English abbreviation meaning "revolutions per minute".
"vinyl" refers to old-fashioned phonograph records */
S.AddUnits(XO("Standard Vinyl rpm:"));
mpChoice_FromVinyl = S.Id(ID_FromVinyl)
@ -355,6 +356,7 @@ void EffectChangeSpeed::PopulateOrExchange(ShuttleGui & S)
/* i18n-hint: changing a quantity "from" one value "to" another */
.Name(XO("To rpm"))
.MinSize( { 100, -1 } )
/* i18n-hint: changing a quantity "from" one value "to" another */
.AddChoice(XO("&to"), kVinylStrings);
}
S.EndMultiColumn();

View File

@ -210,8 +210,8 @@ bool EffectCompressor::Startup()
namespace {
/* i18n-hint: usually leave this as is as dB doesn't get translated*/
TranslatableString ThresholdFormat( int value )
/* i18n-hint: usually leave this as is as dB doesn't get translated*/
{ return XO("%3d dB").Format(value); }
TranslatableString AttackTimeFormat( double value )
@ -309,6 +309,9 @@ void EffectCompressor::PopulateOrExchange(ShuttleGui & S)
mAttackLabel = S.AddVariableText(XO("&Attack Time:"), true,
wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
mAttackSlider = S.Id(ID_Attack)
/* i18n-hint: Particularly in percussion, sounds can be regarded as having
* an 'attack' phase where the sound builds up and a 'decay' where the
* sound dies away. So this means 'onset duration'. */
.Name(XO("Attack Time"))
.Style(wxSL_HORIZONTAL)
.AddSlider( {},
@ -319,9 +322,15 @@ void EffectCompressor::PopulateOrExchange(ShuttleGui & S)
AttackTimeFormat(9.99),
true, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL);
/* i18n-hint: Particularly in percussion, sounds can be regarded as having
* an 'attack' phase where the sound builds up and a 'decay' or 'release' where the
* sound dies away. */
mDecayLabel = S.AddVariableText(XO("R&elease Time:"), true,
wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
mDecaySlider = S.Id(ID_Decay)
/* i18n-hint: Particularly in percussion, sounds can be regarded as having
* an 'attack' phase where the sound builds up and a 'decay' or 'release' where the
* sound dies away. */
.Name(XO("Release Time"))
.Style(wxSL_HORIZONTAL)
.AddSlider( {},
@ -342,6 +351,8 @@ void EffectCompressor::PopulateOrExchange(ShuttleGui & S)
/* i18n-hint: Make-up, i.e. correct for any reduction, rather than fabricate it.*/
mGainCheckBox = S.AddCheckBox(XO("Ma&ke-up gain for 0 dB after compressing"),
DEF_Normalize);
/* i18n-hint: "Compress" here means reduce variations of sound volume,
NOT related to file-size compression; Peaks means extremes in volume */
mPeakCheckBox = S.AddCheckBox(XO("C&ompress based on Peaks"),
DEF_UsePeak);
}

View File

@ -189,7 +189,6 @@ void ContrastDialog::OnChar(wxKeyEvent &event)
return;
}
/* i18n-hint: WCAG2 is the 'Web Content Accessibility Guidelines (WCAG) 2.0', see http://www.w3.org/TR/WCAG20/ */
ContrastDialog::ContrastDialog(wxWindow * parent, wxWindowID id,
const TranslatableString & title,
const wxPoint & pos):
@ -226,9 +225,9 @@ ContrastDialog::ContrastDialog(wxWindow * parent, wxWindowID id,
S.SetBorder(5);
S.StartHorizontalLay(wxCENTER, false);
{
/* i18n-hint: RMS abbreviates root mean square, a certain averaging method */
S.AddTitle(XO(
"Contrast Analyzer, for measuring RMS volume differences between two selections of audio."));
S.AddTitle(
/* i18n-hint: RMS abbreviates root mean square, a certain averaging method */
XO("Contrast Analyzer, for measuring RMS volume differences between two selections of audio."));
}
S.EndHorizontalLay();
S.StartStatic( XO("Parameters") );
@ -442,8 +441,8 @@ namespace {
return _("indeterminate");
else {
if( diffdB != std::numeric_limits<float>::infinity() )
/* i18n-hint: dB abbreviates decibels */
/* i18n-hint: RMS abbreviates root mean square, a certain averaging method */
/* i18n-hint: dB abbreviates decibels
* RMS abbreviates root mean square, a certain averaging method */
return wxString::Format(_("%.2f dB RMS"), diffdB);
else
/* i18n-hint: dB abbreviates decibels */
@ -457,12 +456,12 @@ namespace {
return XO("Difference is indeterminate.");
else
if( fabs(diffdB) != std::numeric_limits<float>::infinity() )
/* i18n-hint: dB abbreviates decibels */
/* i18n-hint: RMS abbreviates root mean square, a certain averaging method */
/* i18n-hint: dB abbreviates decibels
RMS abbreviates root mean square, a certain averaging method */
return XO("Difference = %.2f RMS dB.").Format( diffdB );
else
/* i18n-hint: dB abbreviates decibels */
/* i18n-hint: RMS abbreviates root mean square, a certain averaging method */
/* i18n-hint: dB abbreviates decibels
RMS abbreviates root mean square, a certain averaging method */
return XO("Difference = infinite RMS dB.");
}
}
@ -486,7 +485,7 @@ void ContrastDialog::results()
mPassFailText->ChangeValue(_("Background higher than foreground"));
}
else if(diffdB > WCAG2_PASS) {
/* i18n-hint: WCAG abbreviates Web Content Accessibility Guidelines */
/* i18n-hint: WCAG2 is the 'Web Content Accessibility Guidelines (WCAG) 2.0', see http://www.w3.org/TR/WCAG20/ */
mPassFailText->ChangeValue(_("WCAG2 Pass"));
}
else {
@ -504,7 +503,8 @@ void ContrastDialog::results()
if(std::isinf(- foregrounddB))
mForegroundRMSText->ChangeValue(_("zero"));
else
mForegroundRMSText->ChangeValue(wxString::Format(_("%.2f dB"), foregrounddB)); // i18n-hint: short form of 'decibels'
// i18n-hint: short form of 'decibels'
mForegroundRMSText->ChangeValue(wxString::Format(_("%.2f dB"), foregrounddB));
}
else {
mForegroundRMSText->SetName(_("No foreground measured")); // Read by screen-readers

View File

@ -1613,6 +1613,7 @@ void EffectEqualization::LoadCurves(const wxString &fileName, bool append)
// If requested file doesn't exist...
if( !fn.FileExists() && !GetDefaultFileName(fn) ) {
mCurves.clear();
/* i18n-hint: name of the 'unnamed' custom curve */
mCurves.push_back( _("unnamed") ); // we still need a default curve to use
return;
}
@ -1632,8 +1633,7 @@ void EffectEqualization::LoadCurves(const wxString &fileName, bool append)
if( !reader.Parse( this, fullPath ) )
{
/* i18n-hint: EQ stands for 'Equalization'.*/
auto msg = XO(
"Error Loading EQ Curves from file:\n%s\nError message says:\n%s")
auto msg = XO("Error Loading EQ Curves from file:\n%s\nError message says:\n%s")
.Format( fullPath, reader.GetErrorStr() );
// Inform user of load failure
Effect::MessageBox(
@ -1677,7 +1677,6 @@ void EffectEqualization::UpdateDefaultCurves(bool updateAll /* false */)
if (mCurves.size() == 0)
return;
/* i18n-hint: name of the 'unnamed' custom curve */
wxString unnamed = wxT("unnamed");
// Save the "unnamed" curve and remove it so we can add it back as the final curve.

View File

@ -1753,14 +1753,16 @@ void EffectNoiseReduction::Dialog::PopulateOrExchange(ShuttleGui & S)
{
S.AddPrompt(XO("Noise:"));
mKeepSignal = S.Id(ID_RADIOBUTTON_KEEPSIGNAL)
.AddRadioButton(XO("Re&duce")); /* i18n-hint: Translate differently from "Residue" ! */
/* i18n-hint: Translate differently from "Residue" ! */
.AddRadioButton(XO("Re&duce"));
#ifdef ISOLATE_CHOICE
mKeepNoise = S.Id(ID_RADIOBUTTON_KEEPNOISE)
.AddRadioButtonToGroup(XO("&Isolate"));
#endif
#ifdef RESIDUE_CHOICE
mResidue = S.Id(ID_RADIOBUTTON_RESIDUE)
.AddRadioButtonToGroup(XO("Resid&ue")); /* i18n-hint: Means the difference between effect and original sound. Translate differently from "Reduce" ! */
/* i18n-hint: Means the difference between effect and original sound. Translate differently from "Reduce" ! */
.AddRadioButtonToGroup(XO("Resid&ue"));
#endif
}
S.EndMultiColumn();

View File

@ -294,9 +294,9 @@ bool EffectPaulstretch::ProcessOne(WaveTrack *track,double t0,double t1,int coun
double defaultPreviewLen;
gPrefs->Read(wxT("/AudioIO/EffectsPreviewLen"), &defaultPreviewLen, 6.0);
/* i18n-hint: 'Time Resolution' is the name of a control in the Paulstretch effect.*/
if ((minDuration / mProjectRate) < defaultPreviewLen) {
::Effect::MessageBox(
/* i18n-hint: 'Time Resolution' is the name of a control in the Paulstretch effect.*/
XO("Audio selection too short to preview.\n\n"
"Try increasing the audio selection to at least %.1f seconds,\n"
"or reducing the 'Time Resolution' to less than %.1f seconds.")
@ -306,8 +306,8 @@ bool EffectPaulstretch::ProcessOne(WaveTrack *track,double t0,double t1,int coun
wxOK | wxICON_EXCLAMATION );
}
else {
/* i18n-hint: 'Time Resolution' is the name of a control in the Paulstretch effect.*/
::Effect::MessageBox(
/* i18n-hint: 'Time Resolution' is the name of a control in the Paulstretch effect.*/
XO("Unable to Preview.\n\n"
"For the current audio selection, the maximum\n"
"'Time Resolution' is %.1f seconds.")
@ -316,8 +316,8 @@ bool EffectPaulstretch::ProcessOne(WaveTrack *track,double t0,double t1,int coun
}
}
else {
/* i18n-hint: 'Time Resolution' is the name of a control in the Paulstretch effect.*/
::Effect::MessageBox(
/* i18n-hint: 'Time Resolution' is the name of a control in the Paulstretch effect.*/
XO("The 'Time Resolution' is too long for the selection.\n\n"
"Try increasing the audio selection to at least %.1f seconds,\n"
"or reducing the 'Time Resolution' to less than %.1f seconds.")

View File

@ -479,8 +479,8 @@ void EffectScienFilter::PopulateOrExchange(ShuttleGui & S)
mFilterOrderCtl = S.Id(ID_Order)
.Validator<wxGenericValidator>(&mOrderIndex)
/*i18n-hint: 'Order' means the complexity of the filter, and is a number between 1 and 10.*/
.MinSize( { -1, -1 } )
/*i18n-hint: 'Order' means the complexity of the filter, and is a number between 1 and 10.*/
.AddChoice(XO("O&rder:"),
[]{
TranslatableStrings orders;

View File

@ -141,13 +141,17 @@ ScoreAlignDialog::ScoreAlignDialog(ScoreAlignParams &params)
SA_DFT_SILENCE_THRESHOLD_TEXT,
true, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL);
mPresmoothLabel = S.AddVariableText(
/* i18n-hint: The English would be clearer if it had 'Duration' rather than 'Time'
This is a NEW experimental effect, and until we have it documented in the user
manual we don't have a clear description of what this parameter does.
It is OK to leave it in English. */
mPresmoothLabel = S.AddVariableText(
XO("Presmooth Time:"), true, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
mPresmoothSlider = S.Id(ID_PRESMOOTH)
/* i18n-hint: The English would be clearer if it had 'Duration' rather than 'Time'
This is a NEW experimental effect, and until we have it documented in the user
manual we don't have a clear description of what this parameter does.
It is OK to leave it in English. */
.Name(XO("Presmooth Time"))
.Style(wxSL_HORIZONTAL)
.AddSlider( {},
@ -162,6 +166,10 @@ ScoreAlignDialog::ScoreAlignDialog(ScoreAlignParams &params)
mLineTimeLabel = S.AddVariableText(XO("Line Time:"), true,
wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
mLineTimeSlider = S.Id(ID_LINETIME)
/* i18n-hint: The English would be clearer if it had 'Duration' rather than 'Time'
This is a NEW experimental effect, and until we have it documented in the user
manual we don't have a clear description of what this parameter does.
It is OK to leave it in English. */
.Name(XO("Line Time"))
.Style(wxSL_HORIZONTAL)
.AddSlider( {},
@ -176,6 +184,10 @@ ScoreAlignDialog::ScoreAlignDialog(ScoreAlignParams &params)
mSmoothTimeLabel = S.AddVariableText(
XO("Smooth Time:"), true, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
mSmoothTimeSlider = S.Id(ID_SMOOTHTIME)
/* i18n-hint: The English would be clearer if it had 'Duration' rather than 'Time'
This is a NEW experimental effect, and until we have it documented in the user
manual we don't have a clear description of what this parameter does.
It is OK to leave it in English. */
.Name(XO("Smooth Time"))
.Style(wxSL_HORIZONTAL)
.AddSlider( {},

View File

@ -29,8 +29,7 @@
#define AUDIOUNITEFFECTS_VERSION wxT("1.0.0.0")
/* i18n-hint: the name of an Apple audio software protocol */
#define AUDIOUNITEFFECTS_FAMILY \
EffectFamilySymbol{ wxT("AudioUnit"), XO("Audio Unit") }
#define AUDIOUNITEFFECTS_FAMILY EffectFamilySymbol{ wxT("AudioUnit"), XO("Audio Unit") }
class AudioUnitEffect;
using AudioUnitEffectArray = std::vector<std::unique_ptr<AudioUnitEffect>>;

View File

@ -1376,8 +1376,8 @@ bool NyquistEffect::ProcessOne()
if ((rval == nyx_audio) && (GetType() == EffectTypeTool)) {
// Catch this first so that we can also handle other errors.
/* i18n-hint: Don't translate ';type tool'. */
mDebugOutput =
/* i18n-hint: Don't translate ';type tool'. */
XO("';type tool' effects cannot return audio from Nyquist.\n")
+ mDebugOutput;
rval = nyx_error;
@ -1385,8 +1385,8 @@ bool NyquistEffect::ProcessOne()
if ((rval == nyx_labels) && (GetType() == EffectTypeTool)) {
// Catch this first so that we can also handle other errors.
/* i18n-hint: Don't translate ';type tool'. */
mDebugOutput =
/* i18n-hint: Don't translate ';type tool'. */
XO("';type tool' effects cannot return labels from Nyquist.\n")
+ mDebugOutput;
rval = nyx_error;
@ -2555,8 +2555,8 @@ bool NyquistEffect::TransferDataFromEffectWindow()
}
else
{
/* i18n-hint: Warning that there is one quotation mark rather than a pair.*/
const auto message =
/* i18n-hint: Warning that there is one quotation mark rather than a pair.*/
XO("Mismatched quotes in\n%s").Format( ctrl->valStr );
Effect::MessageBox(
message,

View File

@ -1972,17 +1972,19 @@ void ExportFFmpegOptions::PopulateOrExchange(ShuttleGui & S)
{
S.StartMultiColumn(4, wxALIGN_LEFT);
{
/* i18n-hint: 'mux' is short for multiplexor, a device that selects between several inputs
'Mux Rate' is a parameter that has some bearing on compression ratio for MPEG
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"))
/* i18n-hint: 'mux' is short for multiplexor, a device that selects between several inputs
'Mux Rate' is a parameter that has some bearing on compression ratio for MPEG
it has a hard to predict effect on the degree of compression */
.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)
/* 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. */
.ToolTip(XO("Packet size\nOptional\n0 - default"))
/* 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. */
.TieSpinCtrl(XO("Packet Size:"), {wxT("/FileFormats/FFmpegPacketSize"), 0}, 10000000, 0);
}
S.EndMultiColumn();

View File

@ -607,16 +607,16 @@ public:
S.SetStretchyCol(0);
{
if (mLibPath.GetFullPath().empty()) {
/* i18n-hint: There is a button to the right of the arrow.*/
mPathText = S.AddTextBox( {},
/* i18n-hint: There is a button to the right of the arrow.*/
wxString::Format(_("To find %s, click here -->"), mName), 0);
}
else {
mPathText = S.AddTextBox( {}, mLibPath.GetFullPath(), 0);
}
S.Id(ID_BROWSE).AddButton(XO("Browse..."), wxALIGN_RIGHT);
/* i18n-hint: There is a button to the right of the arrow.*/
S.AddVariableText(
/* i18n-hint: There is a button to the right of the arrow.*/
XO("To get a free copy of LAME, click here -->"), true);
/* i18n-hint: (verb)*/
S.Id(ID_DLOAD).AddButton(XO("Download"), wxALIGN_RIGHT);

View File

@ -1145,13 +1145,13 @@ wxString ExportMultipleDialog::MakeFileName(const wxString &input)
wxString excluded = ::wxJoin( Internat::GetExcludedCharacters(), wxChar(' ') );
// TODO: For Russian langauge we should have separate cases for 2 and more than 2 letters.
if( excluded.length() > 1 ){
// i18n-hint: The second %s gives some letters that can't be used.
msg = XO(
// i18n-hint: The second %s gives some letters that can't be used.
"Label or track \"%s\" is not a legal file name. You cannot use any of: %s\nUse...")
.Format( input, excluded );
} else {
// i18n-hint: The second %s gives a letter that can't be used.
msg = XO(
// i18n-hint: The second %s gives a letter that can't be used.
"Label or track \"%s\" is not a legal file name. You cannot use \"%s\".\nUse...")
.Format( input, excluded );
}

View File

@ -701,8 +701,8 @@ bool Importer::Import( AudacityProject &project,
{
// if someone has sent us a .cda file, send them away
if (extension.IsSameAs(wxT("cda"), false)) {
/* i18n-hint: %s will be the filename */
errorMessage = XO(
/* i18n-hint: %s will be the filename */
"\"%s\" is an audio CD track. \nAudacity cannot open audio CDs directly. \nExtract (rip) the CD tracks to an audio format that \nAudacity can import, such as WAV or AIFF.")
.Format( fName );
return false;
@ -711,6 +711,7 @@ bool Importer::Import( AudacityProject &project,
// playlist type files
if ((extension.IsSameAs(wxT("m3u"), false))||(extension.IsSameAs(wxT("ram"), false))||(extension.IsSameAs(wxT("pls"), false))) {
errorMessage = XO(
/* i18n-hint: %s will be the filename */
"\"%s\" is a playlist file. \nAudacity cannot open this file because it only contains links to other files. \nYou may be able to open it in a text editor and download the actual audio files.")
.Format( fName );
return false;
@ -718,6 +719,7 @@ bool Importer::Import( AudacityProject &project,
//WMA files of various forms
if ((extension.IsSameAs(wxT("wma"), false))||(extension.IsSameAs(wxT("asf"), false))) {
errorMessage = XO(
/* i18n-hint: %s will be the filename */
"\"%s\" is a Windows Media Audio file. \nAudacity cannot open this type of file due to patent restrictions. \nYou need to convert it to a supported audio format, such as WAV or AIFF.")
.Format( fName );
return false;
@ -725,6 +727,7 @@ bool Importer::Import( AudacityProject &project,
//AAC files of various forms (probably not encrypted)
if ((extension.IsSameAs(wxT("aac"), false))||(extension.IsSameAs(wxT("m4a"), false))||(extension.IsSameAs(wxT("m4r"), false))||(extension.IsSameAs(wxT("mp4"), false))) {
errorMessage = XO(
/* i18n-hint: %s will be the filename */
"\"%s\" is an Advanced Audio Coding file.\nWithout the optional FFmpeg library, Audacity cannot open this type of file.\nOtherwise, you need to convert it to a supported audio format, such as WAV or AIFF.")
.Format( fName );
return false;
@ -732,6 +735,7 @@ bool Importer::Import( AudacityProject &project,
// encrypted itunes files
if ((extension.IsSameAs(wxT("m4p"), false))) {
errorMessage = XO(
/* i18n-hint: %s will be the filename */
"\"%s\" is an encrypted audio file. \nThese typically are from an online music store. \nAudacity cannot open this type of file due to the encryption. \nTry recording the file into Audacity, or burn it to audio CD then \nextract the CD track to a supported audio format such as WAV or AIFF.")
.Format( fName );
return false;
@ -739,6 +743,7 @@ bool Importer::Import( AudacityProject &project,
// Real Inc. files of various sorts
if ((extension.IsSameAs(wxT("ra"), false))||(extension.IsSameAs(wxT("rm"), false))||(extension.IsSameAs(wxT("rpm"), false))) {
errorMessage = XO(
/* i18n-hint: %s will be the filename */
"\"%s\" is a RealPlayer media file. \nAudacity cannot open this proprietary format. \nYou need to convert it to a supported audio format, such as WAV or AIFF.")
.Format( fName );
return false;
@ -747,6 +752,7 @@ bool Importer::Import( AudacityProject &project,
// Other notes-based formats
if ((extension.IsSameAs(wxT("kar"), false))||(extension.IsSameAs(wxT("mod"), false))||(extension.IsSameAs(wxT("rmi"), false))) {
errorMessage = XO(
/* i18n-hint: %s will be the filename */
"\"%s\" is a notes-based file, not an audio file. \nAudacity cannot open this type of file. \nTry converting it to an audio file such as WAV or AIFF and \nthen import it, or record it into Audacity.")
.Format( fName );
return false;
@ -755,6 +761,7 @@ bool Importer::Import( AudacityProject &project,
// MusePack files
if ((extension.IsSameAs(wxT("mp+"), false))||(extension.IsSameAs(wxT("mpc"), false))||(extension.IsSameAs(wxT("mpp"), false))) {
errorMessage = XO(
/* i18n-hint: %s will be the filename */
"\"%s\" is a Musepack audio file. \nAudacity cannot open this type of file. \nIf you think it might be an mp3 file, rename it to end with \".mp3\" \nand try importing it again. Otherwise you need to convert it to a supported audio \nformat, such as WAV or AIFF.")
.Format( fName );
return false;
@ -763,6 +770,7 @@ bool Importer::Import( AudacityProject &project,
// WavPack files
if ((extension.IsSameAs(wxT("wv"), false))||(extension.IsSameAs(wxT("wvc"), false))) {
errorMessage = XO(
/* i18n-hint: %s will be the filename */
"\"%s\" is a Wavpack audio file. \nAudacity cannot open this type of file. \nYou need to convert it to a supported audio format, such as WAV or AIFF.")
.Format( fName );
return false;
@ -771,6 +779,7 @@ bool Importer::Import( AudacityProject &project,
// AC3 files
if ((extension.IsSameAs(wxT("ac3"), false))) {
errorMessage = XO(
/* i18n-hint: %s will be the filename */
"\"%s\" is a Dolby Digital audio file. \nAudacity cannot currently open this type of file. \nYou need to convert it to a supported audio format, such as WAV or AIFF.")
.Format( fName );
return false;
@ -779,6 +788,7 @@ bool Importer::Import( AudacityProject &project,
// Speex files
if ((extension.IsSameAs(wxT("spx"), false))) {
errorMessage = XO(
/* i18n-hint: %s will be the filename */
"\"%s\" is an Ogg Speex audio file. \nAudacity cannot currently open this type of file. \nYou need to convert it to a supported audio format, such as WAV or AIFF.")
.Format( fName );
return false;
@ -787,6 +797,7 @@ bool Importer::Import( AudacityProject &project,
// Video files of various forms
if ((extension.IsSameAs(wxT("mpg"), false))||(extension.IsSameAs(wxT("mpeg"), false))||(extension.IsSameAs(wxT("avi"), false))||(extension.IsSameAs(wxT("wmv"), false))||(extension.IsSameAs(wxT("rv"), false))) {
errorMessage = XO(
/* i18n-hint: %s will be the filename */
"\"%s\" is a video file. \nAudacity cannot currently open this type of file. \nYou need to extract the audio to a supported format, such as WAV or AIFF.")
.Format( fName );
return false;
@ -795,6 +806,7 @@ bool Importer::Import( AudacityProject &project,
// Audacity project
if (extension.IsSameAs(wxT("aup"), false)) {
errorMessage = XO(
/* i18n-hint: %s will be the filename */
"\"%s\" is an Audacity Project file. \nUse the 'File > Open' command to open Audacity Projects.")
.Format( fName );
return false;
@ -807,6 +819,7 @@ bool Importer::Import( AudacityProject &project,
// we were not able to recognize the file type
errorMessage = XO(
/* i18n-hint: %s will be the filename */
"Audacity did not recognize the type of the file '%s'.\nTry installing FFmpeg. For uncompressed files, also try File > Import > Raw Data.")
.Format( fName );
}
@ -825,6 +838,7 @@ bool Importer::Import( AudacityProject &project,
}
errorMessage = XO(
/* i18n-hint: %s will be the filename */
"Audacity recognized the type of the file '%s'.\nImporters supposedly supporting such files are:\n%s,\nbut none of them understood this file format.")
.Format( fName, pluglist );
}

View File

@ -341,8 +341,8 @@ void LOFImportFileHandle::lofOpenFiles(wxString* ln)
}
else
{
/* i18n-hint: You do not need to translate "LOF" */
AudacityMessageBox(
/* i18n-hint: You do not need to translate "LOF" */
XO("Invalid window offset in LOF file."),
/* i18n-hint: You do not need to translate "LOF" */
XO("LOF Error"),
@ -364,8 +364,8 @@ void LOFImportFileHandle::lofOpenFiles(wxString* ln)
}
else
{
/* i18n-hint: You do not need to translate "LOF" */
AudacityMessageBox(
/* i18n-hint: You do not need to translate "LOF" */
XO("Invalid duration in LOF file."),
/* i18n-hint: You do not need to translate "LOF" */
XO("LOF Error"),
@ -476,9 +476,10 @@ void LOFImportFileHandle::lofOpenFiles(wxString* ln)
} // end of converting "offset" argument
else
{
/* i18n-hint: You do not need to translate "LOF" */
AudacityMessageBox(
/* i18n-hint: You do not need to translate "LOF" */
XO("Invalid track offset in LOF file."),
/* i18n-hint: You do not need to translate "LOF" */
XO("LOF Error"),
wxOK | wxCENTRE);
}

View File

@ -976,6 +976,7 @@ BaseItemSharedPtr ExtraScriptablesIIMenu()
// Less useful to VI users.
static BaseItemSharedPtr menu{
( FinderScope{ findCommandHandler },
// i18n-hint: Scriptables are commands normally used from Python, Perl etc.
Menu( wxT("Scriptables2"), XO("Scripta&bles II"),
Command( wxT("Select"), XXO("Select..."), FN(OnAudacityCommand),
AudioIONotBusyFlag() ),

View File

@ -171,8 +171,8 @@ void DoPanTracks(AudacityProject &project, float PanValue)
left->SetPan( PanValue );
auto flags = UndoPush::AUTOSAVE;
/*i18n-hint: One or more audio tracks have been panned*/
ProjectHistory::Get( project )
/*i18n-hint: One or more audio tracks have been panned*/
.PushState(XO("Panned audio track(s)"), XO("Pan Track"), flags);
flags = flags | UndoPush::CONSOLIDATE;
}
@ -236,9 +236,9 @@ void DoAlign
an implied preposition "from"). */
? XO("Aligned/Moved start to zero")
: XO("Aligned start to zero");
shortAction = moveSel
/* i18n-hint: This and similar messages give shorter descriptions of
the aligning and moving editing actions */
shortAction = moveSel
? XO("Align/Move Start")
: XO("Align Start");
break;

View File

@ -291,6 +291,7 @@ void KeyConfigPrefs::PopulateOrExchange(ShuttleGui & S)
/* i18n-hint: (verb)*/
mSet = S.Id(SetButtonID).AddButton(XO("&Set"));
/* i18n-hint: (verb)*/
mClear = S.Id(ClearButtonID).AddButton(XO("Cl&ear"));
}
S.EndThreeColumn();

View File

@ -29,8 +29,8 @@ with names like mnod-script-pipe that add NEW features.
////////////////////////////////////////////////////////////////////////////////
/* i18n-hint: Modules are optional extensions to Audacity that add NEW features.*/
ModulePrefs::ModulePrefs(wxWindow * parent, wxWindowID winid)
/* i18n-hint: Modules are optional extensions to Audacity that add NEW features.*/
: PrefsPanel(parent, winid, XO("Modules"))
{
Populate();

View File

@ -161,6 +161,7 @@ void MousePrefs::CreateList()
AddItem(XO("Left-Drag"),
/* i18n-hint: The envelope is a curve that controls the audio loudness.*/
XO("Envelope"),
/* i18n-hint: The envelope is a curve that controls the audio loudness.*/
XO("Change Amplification Envelope"));
AddItem(XO("Left-Click"), XO("Pencil"), XO("Change Sample"));

View File

@ -93,8 +93,14 @@ BEGIN_EVENT_TABLE(ControlToolBar, ToolBar)
END_EVENT_TABLE()
static const TranslatableString
/* i18n-hint: These are strings for the status bar, and indicate whether Audacity
is playing or recording or stopped, and whether it is paused. */
sStatePlay = XO("Playing")
/* i18n-hint: These are strings for the status bar, and indicate whether Audacity
is playing or recording or stopped, and whether it is paused. */
, sStateStop = XO("Stopped")
/* i18n-hint: These are strings for the status bar, and indicate whether Audacity
is playing or recording or stopped, and whether it is paused. */
, sStateRecord = XO("Recording")
;
@ -110,9 +116,6 @@ ControlToolBar::ControlToolBar( AudacityProject &project )
mStrLocale = gPrefs->Read(wxT("/Locale/Language"), wxT(""));
mSizer = NULL;
/* i18n-hint: These are strings for the status bar, and indicate whether Audacity
is playing or recording or stopped, and whether it is paused. */
}
ControlToolBar::~ControlToolBar()
@ -691,6 +694,8 @@ registeredStatusWidthFunction{
{ &sStatePlay, &sStateStop, &sStateRecord } )
{
strings.push_back(
/* i18n-hint: These are strings for the status bar, and indicate whether Audacity
is playing or recording or stopped, and whether it is paused. */
XO("%s Paused.").Format(*pString) );
}

View File

@ -173,6 +173,10 @@ void ScrubbingToolBar::DoRegenerateTooltips( bool force )
"Seeking" is normal speed playback but with skips
*/
? XO("Stop Scrubbing")
/* i18n-hint: These commands assist the user in finding a sound by ear. ...
"Scrubbing" is variable-speed playback, ...
"Seeking" is normal speed playback but with skips
*/
: XO("Start Scrubbing")
);
fn(*scrubButton, label, wxT("Scrub"));
@ -188,6 +192,10 @@ void ScrubbingToolBar::DoRegenerateTooltips( bool force )
"Seeking" is normal speed playback but with skips
*/
? XO("Stop Seeking")
/* i18n-hint: These commands assist the user in finding a sound by ear. ...
"Scrubbing" is variable-speed playback, ...
"Seeking" is normal speed playback but with skips
*/
: XO("Start Seeking")
);
fn(*seekButton, label, wxT("Seek"));

View File

@ -257,8 +257,8 @@ void FormatMenuTable::OnFormatChange(wxCommandEvent & event)
for (auto channel : TrackList::Channels(pTrack))
channel->ConvertToSampleFormat(newFormat);
/* i18n-hint: The strings name a track and a format */
ProjectHistory::Get( *project )
/* i18n-hint: The strings name a track and a format */
.PushState(XO("Changed '%s' to %s")
.Format( pTrack->GetName(), GetSampleFormatStr(newFormat) ),
XO("Format Change"));
@ -359,8 +359,8 @@ void RateMenuTable::SetRate(WaveTrack * pTrack, double rate)
// Separate conversion of "rate" enables changing the decimals without affecting i18n
wxString rateString = wxString::Format(wxT("%.3f"), rate);
/* i18n-hint: The string names a track */
ProjectHistory::Get( *project )
/* i18n-hint: The string names a track */
.PushState(XO("Changed '%s' to %s Hz")
.Format( pTrack->GetName(), rateString),
XO("Rate Change"));
@ -777,9 +777,9 @@ void WaveTrackMenuTable::OnChannelChange(wxCommandEvent & event)
}
pTrack->SetChannel(channel);
AudacityProject *const project = &mpData->project;
/* i18n-hint: The strings name a track and a channel choice (mono, left, or right) */
ProjectHistory::Get( *project )
.PushState(
/* i18n-hint: The strings name a track and a channel choice (mono, left, or right) */
XO("Changed '%s' to %s").Format( pTrack->GetName(), channelmsg ),
XO("Channel"));
mpData->result = RefreshCode::RefreshAll;
@ -837,8 +837,8 @@ void WaveTrackMenuTable::OnMergeStereo(wxCommandEvent &)
//we will need to display this to the user.
}
/* i18n-hint: The string names a track */
ProjectHistory::Get( *project ).PushState(
/* i18n-hint: The string names a track */
XO("Made '%s' a stereo track").Format( pTrack->GetName() ),
XO("Make Stereo"));
@ -907,8 +907,8 @@ void WaveTrackMenuTable::OnSwapChannels(wxCommandEvent &)
if (hasFocus)
trackFocus.Set(partner);
/* i18n-hint: The string names a track */
ProjectHistory::Get( *project ).PushState(
/* i18n-hint: The string names a track */
XO("Swapped Channels in '%s'").Format( pTrack->GetName() ),
XO("Swap Channels"));
@ -921,8 +921,8 @@ void WaveTrackMenuTable::OnSplitStereo(wxCommandEvent &)
SplitStereo(true);
WaveTrack *const pTrack = static_cast<WaveTrack*>(mpData->pTrack);
AudacityProject *const project = &mpData->project;
/* i18n-hint: The string names a track */
ProjectHistory::Get( *project ).PushState(
/* i18n-hint: The string names a track */
XO("Split stereo track '%s'").Format( pTrack->GetName() ),
XO("Split"));
@ -936,8 +936,8 @@ void WaveTrackMenuTable::OnSplitStereoMono(wxCommandEvent &)
SplitStereo(false);
WaveTrack *const pTrack = static_cast<WaveTrack*>(mpData->pTrack);
AudacityProject *const project = &mpData->project;
/* i18n-hint: The string names a track */
ProjectHistory::Get( *project ).PushState(
/* i18n-hint: The string names a track */
XO("Split Stereo to Mono '%s'").Format( pTrack->GetName() ),
XO("Split to Mono"));

View File

@ -282,11 +282,19 @@ namespace {
&Scrubber::OnScrub, false, &Scrubber::Scrubs,
},
/* i18n-hint: These commands assist the user in finding a sound by ear. ...
"Scrubbing" is variable-speed playback, ...
"Seeking" is normal speed playback but with skips, ...
*/
{ wxT("Seek"), XO("See&k"), XO("Seeking"),
CaptureNotBusyFlag() | HasWaveDataFlag(),
&Scrubber::OnSeek, true, &Scrubber::Seeks,
},
/* i18n-hint: These commands assist the user in finding a sound by ear. ...
"Scrubbing" is variable-speed playback, ...
"Seeking" is normal speed playback but with skips, ...
*/
{ wxT("ToggleScrubRuler"), XO("Scrub &Ruler"), {},
AlwaysEnabledFlag,
&Scrubber::OnToggleScrubRuler, false, &Scrubber::ShowsBar,

View File

@ -37,8 +37,8 @@ Paul Licameli split from TrackPanel.cpp
namespace {
TranslatableString Message(unsigned trackCount) {
if (trackCount > 1)
// i18n-hint: %s is replaced by (translation of) 'Ctrl+Click' on windows, 'Command+Click' on Mac
return XO(
// i18n-hint: %s is replaced by (translation of) 'Ctrl+Click' on windows, 'Command+Click' on Mac
"%s to select or deselect track. Drag up or down to change track order.")
.Format( CTRL_CLICK );
else

View File

@ -67,7 +67,6 @@ Grabber::Grabber(wxWindow * parent, wxWindowID id)
It's used to drag a track around (when in multi-tool mode) rather
than requiring that you use the drag tool. It's shown as a series
of horizontal bumps */
SetLabel(_("Grabber"));
SetName(_("Grabber"));
}

View File

@ -557,8 +557,8 @@ static const BuiltinFormatString TimeConverterFormats_[] = {
* needed to create that format output. This is used for the pop-up
* list of formats to choose from in the control. */
static const BuiltinFormatString FrequencyConverterFormats_[] = {
/* i18n-hint: Name of display format that shows frequency in hertz */
{
/* i18n-hint: Name of display format that shows frequency in hertz */
{ XO("Hz") },
/* i18n-hint: Format string for displaying frequency in hertz. Change
* the decimal point for your locale. Don't change the numbers. */