mirror of
https://github.com/cookiengineer/audacity
synced 2025-04-30 15:49:41 +02:00
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:
parent
31ec92b80a
commit
61abb87a77
@ -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
|
||||
|
@ -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 ) {
|
||||
|
@ -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 );
|
||||
|
||||
|
@ -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(),
|
||||
|
@ -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 |
|
||||
|
@ -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"
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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(
|
||||
|
@ -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() ) )
|
||||
};
|
||||
|
@ -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) {
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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 +=
|
||||
|
@ -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();
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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.
|
||||
|
@ -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();
|
||||
|
@ -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.")
|
||||
|
@ -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;
|
||||
|
@ -141,13 +141,17 @@ ScoreAlignDialog::ScoreAlignDialog(ScoreAlignParams ¶ms)
|
||||
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 ¶ms)
|
||||
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 ¶ms)
|
||||
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( {},
|
||||
|
@ -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>>;
|
||||
|
@ -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,
|
||||
|
@ -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();
|
||||
|
@ -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);
|
||||
|
@ -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 );
|
||||
}
|
||||
|
@ -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 );
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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() ),
|
||||
|
@ -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;
|
||||
|
@ -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();
|
||||
|
@ -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();
|
||||
|
@ -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"));
|
||||
|
@ -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) );
|
||||
}
|
||||
|
||||
|
@ -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"));
|
||||
|
@ -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"));
|
||||
|
||||
|
@ -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,
|
||||
|
@ -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
|
||||
|
@ -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"));
|
||||
}
|
||||
|
@ -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. */
|
||||
|
Loading…
x
Reference in New Issue
Block a user