diff --git a/src/AboutDialog.cpp b/src/AboutDialog.cpp index 448dafea7..2e1d1dfe0 100644 --- a/src/AboutDialog.cpp +++ b/src/AboutDialog.cpp @@ -173,7 +173,7 @@ AboutDialog::AboutDialog(wxWindow * parent) PopulateLicensePage( S ); } S.EndNotebook(); - /*i18n-hint: "OK... Audacious" appears on a button at the + /* i18n-hint: "OK... Audacious" appears on a button at the * foot of the 'About Audacity' dialog box, after some text to read. * In English it is slightly humorous alternative to an 'OK' button. * If the humour doesn't work in your language, then just use whatever @@ -239,11 +239,13 @@ void AboutDialog::PopulateAudacityPage( ShuttleGui & S ) + translatorCredits + wxT("

") + + /* i18n-hint: %s will be replaced by the version number.*/ wxString::Format(_("Audacity %s Development Team"), versionStr.c_str()) + wxT("
") + GetCreditsByRole(roleTeamDeveloper) + wxT("


") + + /* i18n-hint: %s will be replaced by the version number.*/ wxString::Format(_("Audacity %s Support Team"), versionStr.c_str()) + wxT("
") + GetCreditsByRole(roleTeamSupport) + diff --git a/src/AutoRecovery.cpp b/src/AutoRecovery.cpp index 9dd519d76..90d14f6db 100644 --- a/src/AutoRecovery.cpp +++ b/src/AutoRecovery.cpp @@ -77,6 +77,7 @@ void AutoRecoveryDialog::PopulateOrExchange(ShuttleGui& S) S.StartStatic(_("Recoverable projects")); { mFileList = S.Id(ID_FILE_LIST).AddListControlReportMode(); + /*i18n-hint: (noun). It's the name of the project to recover.*/ mFileList->InsertColumn(0, _("Name")); mFileList->SetColumnWidth(0, 220); PopulateList(); diff --git a/src/BatchProcessDialog.cpp b/src/BatchProcessDialog.cpp index c3576b28a..80df9bcd3 100644 --- a/src/BatchProcessDialog.cpp +++ b/src/BatchProcessDialog.cpp @@ -66,6 +66,9 @@ BatchProcessDialog::BatchProcessDialog(wxWindow * parent): AudacityProject * p = GetActiveProject(); if (p->GetCleanSpeechMode()) { + /*i18n-hint: CleanSpeech is the name of a mode Audacity can operate + * in that was invented to process lots of sermons, remove long + * pauses and background noise.*/ SetTitle(_("CleanSpeech Batch Processing")); } @@ -93,6 +96,8 @@ void BatchProcessDialog::PopulateOrExchange(ShuttleGui &S) { S.StartVerticalLay(true); { + /*i18n-hint: A chain is a sequence of commands that can be applied + * to one or more audio files.*/ S.StartStatic(_("&Select chain"), true); { S.SetStyle(wxSUNKEN_BORDER | wxLC_REPORT | wxLC_HRULES | wxLC_VRULES | @@ -544,7 +549,7 @@ void EditChainsDialog::PopulateList() AddItem(mBatchCommands.GetCommand(i), mBatchCommands.GetParams(i)); } - + /*i18n-hint: This is the last item in a list.*/ AddItem(_("- END -"), wxT("")); // Select the name in the list...this will fire an event. @@ -681,6 +686,7 @@ void EditChainsDialog::OnAdd(wxCommandEvent &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 ‘\’.*/ wxMessageBox(wxString::Format(_("Names may not contain '%c' and '%c'"), wxFILE_SEP_PATH, wxFILE_SEP_PATH_UNIX), GetTitle(), @@ -711,6 +717,7 @@ void EditChainsDialog::OnRemove(wxCommandEvent &event) wxString name = mChains->GetItemText(item); wxMessageDialog m(this, + /*i18n-hint: %s will be replaced by the name of a file.*/ wxString::Format(_("Are you sure you want to delete %s?"), name.c_str()), GetTitle(), wxYES_NO | wxICON_QUESTION); diff --git a/src/Dependencies.cpp b/src/Dependencies.cpp index 9f6fc6867..6d32f7fe0 100644 --- a/src/Dependencies.cpp +++ b/src/Dependencies.cpp @@ -378,6 +378,8 @@ void DependencyDialog::PopulateOrExchange(ShuttleGui& S) S.StartHorizontalLay(wxALIGN_LEFT); { wxArrayString choices; + /*i18n-hint: One of the choices of what you want Audacity to do when + * Audacity finds a project depends on another file.*/ choices.Add(_("Ask me")); choices.Add(_("Always copy all files (safest)")); choices.Add(_("Never copy any files")); diff --git a/src/DirManager.cpp b/src/DirManager.cpp index 0af107c6c..0587e7e4b 100644 --- a/src/DirManager.cpp +++ b/src/DirManager.cpp @@ -442,6 +442,7 @@ bool DirManager::SetProject(wxString& newProjPath, wxString& newProjName, const saved version of the old project must not be moved, otherwise the old project would not be safe.) */ + /*i18n-hint: This title appears on a dialog that indicates the progress in doing something.*/ ProgressDialog *progress = new ProgressDialog(_("Progress"), _("Saving project data files")); @@ -1200,8 +1201,8 @@ bool DirManager::EnsureSafeFilename(wxFileName fName) do { 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. */ + * when a file needs to be backed up to a different name. For + * example, mysong would become mysong-old1, mysong-old2, etc. */ renamedFileName.SetName(wxString::Format(_("%s-old%d"), fName.GetName().c_str(), i)); } while (renamedFileName.FileExists()); @@ -1219,6 +1220,7 @@ bool DirManager::EnsureSafeFilename(wxFileName fName) testFile.Close(); if (!wxRemoveFile(renamedFileName.GetFullPath())) { + /* i18n-hint: %s is the name of a file.*/ wxLogSysError(_("Unable to remove '%s'."), renamedFileName.GetFullPath().c_str()); return false; diff --git a/src/FFmpeg.h b/src/FFmpeg.h index 16b82150c..bd0ddf0f2 100644 --- a/src/FFmpeg.h +++ b/src/FFmpeg.h @@ -207,6 +207,7 @@ public: wxString GetLibraryTypeString() { + /* i18n-hint: do not translate avformat. Preserve the computer gibberish.*/ return _("Only avformat.dll|*avformat*.dll|Dynamically Linked Libraries (*.dll)|*.dll|All Files (*.*)|*"); } diff --git a/src/FreqWindow.cpp b/src/FreqWindow.cpp index 0f3b4ca2b..53f3ee1a7 100644 --- a/src/FreqWindow.cpp +++ b/src/FreqWindow.cpp @@ -148,8 +148,8 @@ FreqWindow::FreqWindow(wxWindow * parent, wxWindowID id, _("Cuberoot Autocorrelation"), _("Enhanced Autocorrelation"), /* i18n-hint: This is a technical term, derived from the word - "spectrum". Do not translate it unless you are sure you - know the correct technical word in your language. */ + * "spectrum". Do not translate it unless you are sure you + * know the correct technical word in your language. */ _("Cepstrum") }; @@ -186,8 +186,8 @@ FreqWindow::FreqWindow(wxWindow * parent, wxWindowID id, wxString *funcChoiceStrings = new wxString[f]; for (int i = 0; i < f; i++) { /* i18n-hint: This refers to a "window function", used in the - Frequency analyze dialog box. */ - funcChoiceStrings[i] = WindowFuncName(i) + wxString(_(" window")); + * Frequency analyze dialog box. */ + funcChoiceStrings[i] = wxString( WindowFuncName(i)) + wxT(" ") + wxString(_("window")); } wxStaticText *funcLabel = new wxStaticText(this, wxID_ANY, @@ -223,6 +223,7 @@ FreqWindow::FreqWindow(wxWindow * parent, wxWindowID id, _("&Replot")); mReplotButton->SetName(_("Replot")); + /* i18n-hint: (verb)*/ mCloseButton = new wxButton(this, wxID_CANCEL, _("Close")); mCloseButton->SetName(_("Close")); @@ -866,7 +867,7 @@ void FreqWindow::PlotPaint(wxPaintEvent & evt) peakpitch = PitchName_Absolute(FreqToMIDInoteNumber(bestpeak)); xp = xpitch.c_str(); pp = peakpitch.c_str(); - + /* i18n-hint: The %d’s are replaced by numbers, the %s by musical notes, e.g. A#*/ info.Printf(_("Cursor: %d Hz (%s) = %d dB Peak: %d Hz (%s) = %.1f dB"), int (xPos + 0.5), xp, int (value + 0.5), int (bestpeak + 0.5), @@ -876,6 +877,8 @@ void FreqWindow::PlotPaint(wxPaintEvent & evt) peakpitch = PitchName_Absolute(FreqToMIDInoteNumber(1.0 / bestpeak)); xp = xpitch.c_str(); pp = peakpitch.c_str(); + /* i18n-hint: The %d’s are replaced by numbers, the %s by musical notes, e.g. A# + * the %.4f are numbers, and 'sec' should be an abbreviation for seconds */ info.Printf(_("Cursor: %.4f sec (%d Hz) (%s) = %f, Peak: %.4f sec (%d Hz) (%s) = %.3f"), xPos, int (1.0 / xPos + 0.5), diff --git a/src/HelpText.cpp b/src/HelpText.cpp index d00aba8ae..4ddabea02 100644 --- a/src/HelpText.cpp +++ b/src/HelpText.cpp @@ -122,42 +122,52 @@ wxString TitleText( const wxString & Key ) if(Key ==wxT("play") ) { + /* i18n-hint: Title for a topic.*/ return _("Playing Audio"); } if((Key ==wxT("record") ) || (Key ==wxT("norecord") )) { + /* i18n-hint: Title for a topic.*/ return _("Recording Audio"); } if(Key ==wxT("inputdevice") ) { + /* i18n-hint: Title for a topic.*/ return _("Recording - Choosing the Input Device"); } if(Key ==wxT("inputsource") ) { + /* i18n-hint: Title for a topic.*/ return _("Recording - Choosing the Input Source"); } if(Key ==wxT("inputlevel") ) { + /* i18n-hint: Title for a topic.*/ return _("Recording - Setting the Input Level"); } if((Key ==wxT("edit") ) || (Key==wxT("grey"))) { + /* i18n-hint: Title for a topic.*/ return _("Editing and greyed out Menus"); } if(Key ==wxT("export") ) { + /* i18n-hint: Title for a topic.*/ return _("Exporting an Audio File"); } if(Key ==wxT("save") ) { + /* i18n-hint: Title for a topic.*/ return _("Saving an Audacity Project"); } if(Key ==wxT("wma-proprietary") ) { + /* i18n-hint: Title for a topic.*/ return _("Support for Other Formats"); } if(Key ==wxT("burncd") ) { + /* i18n-hint: Title for a topic.*/ return _("Burn to CD" ); } if(Key == wxT("remotehelp") ) @@ -171,6 +181,7 @@ wxString HelpTextBuiltIn( const wxString & Key ) { if(Key==wxT("welcome")) { + /* i18n-hint: Preserve [[file:quick_help.html as it’s the name of a file.*/ return WrapText( wxString(wxT("")) + _("

How to Get Help

") + diff --git a/src/HistoryWindow.cpp b/src/HistoryWindow.cpp index 3fd988de0..b93f50db1 100644 --- a/src/HistoryWindow.cpp +++ b/src/HistoryWindow.cpp @@ -99,6 +99,7 @@ HistoryWindow::HistoryWindow(AudacityProject *parent, UndoManager *manager): mManager->GetCurrentState() - 1, 0); S.AddWindow(mLevels); + /* i18n-hint: (verb)*/ mDiscard = S.Id(ID_DISCARD).AddButton(_("&Discard")); } S.EndMultiColumn(); diff --git a/src/Internat.cpp b/src/Internat.cpp index 911e106f1..f34038093 100644 --- a/src/Internat.cpp +++ b/src/Internat.cpp @@ -150,12 +150,15 @@ wxString Internat::FormatSize(double size) if (size < 1024.0) sizeStr = ToDisplayString(size) + wxT(" ") + _("bytes"); else if (size < 1024.0 * 1024.0) { + /* i18n-hint: Abbreviation for Kilo bytes */ sizeStr = ToDisplayString(size / 1024.0, 1) + wxT(" ") + _("KB"); } else if (size < 1024.0 * 1024.0 * 1024.0) { + /* i18n-hint: Abbreviation for Mega bytes */ sizeStr = ToDisplayString(size / (1024.0 * 1024.0), 1) + wxT(" ") + _("MB"); } else { + /* i18n-hint: Abbreviation for Giga bytes */ sizeStr = ToDisplayString(size / (1024.0 * 1024.0 * 1024.0), 1) + wxT(" ") + _("GB"); } } diff --git a/src/LabelDialog.cpp b/src/LabelDialog.cpp index 44479a147..f2137003d 100644 --- a/src/LabelDialog.cpp +++ b/src/LabelDialog.cpp @@ -51,9 +51,13 @@ enum Column static const wxChar *headers[Col_Max] = { + /* i18n-hint: (noun). A track contains waves, audio etc.*/ _("Track"), + /* i18n-hint: (noun)*/ _("Label"), + /* i18n-hint: (noun) of a label*/ _("Start Time"), + /* i18n-hint: (noun) of a label*/ _("End Time") }; @@ -704,6 +708,7 @@ void LabelDialog::OnChangeTrack(wxGridEvent &event, int row, RowData *rd) wxTextEntryDialog d(this, _("New Label Track"), _("Enter track name"), + /* i18n-hint: (noun) it's the name of a kind of track.*/ _("Label Track")); // User canceled so repopulating the grid will set the track diff --git a/src/LangChoice.cpp b/src/LangChoice.cpp index 64f914903..f30f46b2c 100644 --- a/src/LangChoice.cpp +++ b/src/LangChoice.cpp @@ -55,6 +55,8 @@ wxString ChooseLanguage(wxWindow *parent) { wxString returnVal; + /* i18n-hint: Title on a dialog indicating that this is the first + * time Audacity has been run. */ LangChoiceDialog dlog(parent, -1, _("Audacity First Run")); dlog.CentreOnParent(); dlog.ShowModal(); @@ -122,6 +124,8 @@ void LangChoiceDialog::OnOk(wxCommandEvent & event) if (mLang.Left(2) != slang.Left(2)) { wxString msg; + /* i18n-hint; The %s’s are replaced by translated and untranslated + * versions of language names. */ msg.Printf(_("The language you have chosen, %s (%s), is not the same as the system language, %s (%s)."), mLangNames[ndx].c_str(), mLang.c_str(), diff --git a/src/Menus.cpp b/src/Menus.cpp index 658bc094d..6e81fd0e2 100644 --- a/src/Menus.cpp +++ b/src/Menus.cpp @@ -299,6 +299,7 @@ void AudacityProject::CreateMenusAndCommands() c->AddItem(wxT("PageSetup"), _("Pa&ge Setup..."), FN(OnPageSetup), AudioIONotBusyFlag | TracksExistFlag, AudioIONotBusyFlag | TracksExistFlag); + /* i18n-hint: (verb) It's item on a menu. */ c->AddItem(wxT("Print"), _("&Print..."), FN(OnPrint), AudioIONotBusyFlag | TracksExistFlag, AudioIONotBusyFlag | TracksExistFlag); @@ -308,6 +309,7 @@ void AudacityProject::CreateMenusAndCommands() // On the Mac, the Exit item doesn't actually go here...wxMac will pull it out // and put it in the Audacity menu for us based on its ID. + /* i18n-hint: (verb) It's item on a menu. */ c->AddItem(wxT("Exit"), _("E&xit"), FN(OnExit), wxT("Ctrl+Q"), AlwaysEnabledFlag, AlwaysEnabledFlag); @@ -344,19 +346,25 @@ void AudacityProject::CreateMenusAndCommands() c->AddSeparator(); c->BeginSubMenu(_("R&emove Audio")); + /* i18n-hint: (verb)*/ c->AddItem(wxT("Cut"), _("Cu&t"), FN(OnCut), wxT("Ctrl+X"), AudioIONotBusyFlag | CutCopyAvailableFlag, AudioIONotBusyFlag | CutCopyAvailableFlag); c->AddItem(wxT("Delete"), _("&Delete"), FN(OnDelete), wxT("Ctrl+K")); c->AddSeparator(); + /* i18n-hint: (verb) Do a special kind of cut*/ c->AddItem(wxT("SplitCut"), _("Spl&it Cut"), FN(OnSplitCut), wxT("Ctrl+Alt+X")); + /* i18n-hint: (verb) Do a special kind of delete*/ c->AddItem(wxT("SplitDelete"), _("Split D&elete"), FN(OnSplitDelete), wxT("Ctrl+Alt+K")); c->AddSeparator(); + /* i18n-hint: (verb)*/ c->AddItem(wxT("Silence"), _("Silence Audi&o"), FN(OnSilence), wxT("Ctrl+L")); + /* i18n-hint: (verb)*/ c->AddItem(wxT("Trim"), _("Tri&m"), FN(OnTrim), wxT("Ctrl+T")); c->EndSubMenu(); c->BeginSubMenu(_("Clip Boun&daries")); + /* i18n-hint: (verb) It's an item on a menu. */ c->AddItem(wxT("Split"), _("Sp&lit"), FN(OnSplit), wxT("Ctrl+I"), AudioIONotBusyFlag | WaveTracksSelectedFlag, AudioIONotBusyFlag | WaveTracksSelectedFlag); @@ -364,15 +372,18 @@ void AudacityProject::CreateMenusAndCommands() AudioIONotBusyFlag | TimeSelectedFlag | WaveTracksSelectedFlag, AudioIONotBusyFlag | TimeSelectedFlag | WaveTracksSelectedFlag); c->AddSeparator(); + /* i18n-hint: (verb)*/ c->AddItem(wxT("Join"), _("&Join"), FN(OnJoin), wxT("Ctrl+J")); c->AddItem(wxT("Disjoin"), _("Detac&h at Silences"), FN(OnDisjoin), wxT("Ctrl+Alt+J")); c->EndSubMenu(); c->AddSeparator(); + /* i18n-hint: (verb)*/ c->AddItem(wxT("Copy"), _("&Copy"), FN(OnCopy), wxT("Ctrl+C"), AudioIONotBusyFlag | CutCopyAvailableFlag, AudioIONotBusyFlag | CutCopyAvailableFlag); + /* i18n-hint: (verb)*/ c->AddItem(wxT("Paste"), _("&Paste"), FN(OnPaste), wxT("Ctrl+V"), AudioIONotBusyFlag | ClipboardFlag, AudioIONotBusyFlag | ClipboardFlag); @@ -381,6 +392,7 @@ void AudacityProject::CreateMenusAndCommands() c->AddSeparator(); + /* i18n-hint: (verb)*/ c->AddItem(wxT("Duplicate"), _("Duplic&ate"), FN(OnDuplicate), wxT("Ctrl+D")); // An anomaly... StereoToMono is added here for CleanSpeech, @@ -399,6 +411,7 @@ void AudacityProject::CreateMenusAndCommands() c->SetDefaultFlags(AudioIONotBusyFlag | LabelsSelectedFlag | TimeSelectedFlag, AudioIONotBusyFlag | LabelsSelectedFlag | TimeSelectedFlag); + /* i18n-hint: (verb)*/ c->AddItem(wxT("CutLabels"), _("&Cut"), FN(OnCutLabels), wxT("Alt+X"), AudioIONotBusyFlag | LabelsSelectedFlag | TimeSelectedFlag | IsNotSyncLockedFlag, AudioIONotBusyFlag | LabelsSelectedFlag | TimeSelectedFlag | IsNotSyncLockedFlag); @@ -408,6 +421,7 @@ void AudacityProject::CreateMenusAndCommands() c->AddSeparator(); + /* i18n-hint: (verb) A special way to cut out a piece of audio*/ c->AddItem(wxT("SplitCutLabels"), _("&Split Cut"), FN(OnSplitCutLabels), wxT("Alt+Shift+X")); c->AddItem(wxT("SplitDeleteLabels"), _("Sp&lit Delete"), FN(OnSplitDeleteLabels), wxT("Alt+Shift+K")); @@ -415,13 +429,16 @@ void AudacityProject::CreateMenusAndCommands() c->AddItem(wxT("SilenceLabels"), _("Silence &Audio"), FN(OnSilenceLabels), wxT("Alt+L")); + /* i18n-hint: (verb)*/ c->AddItem(wxT("CopyLabels"), _("Co&py"), FN(OnCopyLabels), wxT("Alt+Shift+C")); c->AddSeparator(); + /* i18n-hint: (verb)*/ c->AddItem(wxT("SplitLabels"), _("Spli&t"), FN(OnSplitLabels), wxT("Alt+I"), AudioIONotBusyFlag | LabelsSelectedFlag, AudioIONotBusyFlag | LabelsSelectedFlag); + /* i18n-hint: (verb)*/ c->AddItem(wxT("JoinLabels"), _("&Join"), FN(OnJoinLabels), wxT("Alt+J")); c->AddItem(wxT("DisjoinLabels"), _("Detac&h at Silences"), FN(OnDisjoinLabels), wxT("Alt+Shift+J")); @@ -429,6 +446,7 @@ void AudacityProject::CreateMenusAndCommands() ///////////////////////////////////////////////////////////////////////////// + /* i18n-hint: (verb) It's an item on a menu. */ c->BeginSubMenu(_("&Select")); c->SetDefaultFlags(TracksExistFlag, TracksExistFlag); @@ -572,6 +590,8 @@ void AudacityProject::CreateMenusAndCommands() // mCommandManager.Enable(wxT("UndoHistory"), true); // So for now, enable the command regardless of stack. It will just show empty sometimes. // FOR REDESIGN, clearly there are some limitations with the flags/mask bitmaps. + + /* i18n-hint: Clicking this menu item shows the various editing steps that have been taken.*/ c->AddItem(wxT("UndoHistory"), _("&History..."), FN(OnHistory), AudioIONotBusyFlag, AudioIONotBusyFlag); @@ -585,23 +605,37 @@ void AudacityProject::CreateMenusAndCommands() c->BeginSubMenu(_("&Toolbars")); + /* i18n-hint: Clicking this menu item shows the toolbar that manages devices*/ c->AddCheck(wxT("ShowDeviceTB"), _("&Device Toolbar"), FN(OnShowDeviceToolBar), 0, AlwaysEnabledFlag, AlwaysEnabledFlag); + /* i18n-hint: Clicking this menu item shows the toolbar for editing*/ c->AddCheck(wxT("ShowEditTB"), _("&Edit Toolbar"), FN(OnShowEditToolBar), 0, AlwaysEnabledFlag, AlwaysEnabledFlag); + /* i18n-hint: Clicking this menu item shows the toolbar which has sound level meters*/ c->AddCheck(wxT("ShowMeterTB"), _("&Meter Toolbar"), FN(OnShowMeterToolBar), 0, AlwaysEnabledFlag, AlwaysEnabledFlag); + /* i18n-hint: Clicking this menu item shows the toolbar with the mixer*/ c->AddCheck(wxT("ShowMixerTB"), _("Mi&xer Toolbar"), FN(OnShowMixerToolBar), 0, AlwaysEnabledFlag, AlwaysEnabledFlag); + /* i18n-hint: Clicking this menu item shows the toolbar for selecting audio*/ c->AddCheck(wxT("ShowSelectionTB"), _("&Selection Toolbar"), FN(OnShowSelectionToolBar), 0, AlwaysEnabledFlag, AlwaysEnabledFlag); + /* i18n-hint: Clicking this menu item shows a toolbar that has some tools in it*/ c->AddCheck(wxT("ShowToolsTB"), _("T&ools Toolbar"), FN(OnShowToolsToolBar), 0, AlwaysEnabledFlag, AlwaysEnabledFlag); + /* i18n-hint: Clicking this menu item shows the toolbar for transcription (currently just vary play speed)*/ c->AddCheck(wxT("ShowTranscriptionTB"), _("Transcri&ption Toolbar"), FN(OnShowTranscriptionToolBar), 0, AlwaysEnabledFlag, AlwaysEnabledFlag); + /* i18n-hint: Clicking this menu item shows the toolbar with the big buttons on it (play record etc)*/ c->AddCheck(wxT("ShowTransportTB"), _("&Transport Toolbar"), FN(OnShowTransportToolBar), 0, AlwaysEnabledFlag, AlwaysEnabledFlag); c->AddSeparator(); + /* i18n-hint: (verb)*/ c->AddItem(wxT("ResetToolbars"), _("&Reset Toolbars"), FN(OnResetToolBars), 0, AlwaysEnabledFlag, AlwaysEnabledFlag); c->EndSubMenu(); ///////////////////////////////////////////////////////////////////////////// + /* i18n-hint: Usually keep the ! at the start. It means this option is hidden. + * Simplified View toggles the showing and hiding of 'hidden' menu items that start + * with !. If your translation file is for a special use, that is if it is for a + * simplified view with hidden menu items, then leave the ! out here, so that the + * user can show/hide some of the menu items. */ c->AddCheck(wxT("SimplifiedView"), _("!Simplified View"), FN(OnSimplifiedView), mCommandManager.mbHideFlaggedItems ? 1 : 0); @@ -616,11 +650,13 @@ void AudacityProject::CreateMenusAndCommands() c->BeginMenu(_("T&ransport")); c->SetDefaultFlags(AudioIONotBusyFlag, AudioIONotBusyFlag); + /* i18n-hint: (verb) Start playing audio*/ c->AddItem(wxT("Play"), _("Play"), FN(OnPlayStop)); c->AddItem(wxT("PlayLooped"), _("&Loop Play"), FN(OnPlayLooped), wxT("Shift+Space")); c->AddItem(wxT("Pause"), _("&Pause"), FN(OnPause), wxT("P"), AudioIOBusyFlag, AudioIOBusyFlag); + /* i18n-hint: (verb) Stop playing audio*/ c->AddItem(wxT("Stop"), _("&Stop"), FN(OnStop), AudioIOBusyFlag, AudioIOBusyFlag); @@ -629,6 +665,7 @@ void AudacityProject::CreateMenusAndCommands() c->AddSeparator(); + /* i18n-hint: (verb)*/ c->AddItem(wxT("Record"), _("&Record"), FN(OnRecord), wxT("R")); c->AddItem(wxT("TimerRecord"), _("&Timer Record..."), FN(OnTimerRecord), wxT("Shift+T")); c->AddItem(wxT("RecordAppend"), _("Append Record"), FN(OnRecordAppend), wxT("Shift+R")); @@ -3899,7 +3936,11 @@ void AudacityProject::OnCutLabels() mViewInfo.sel1 = mViewInfo.sel0; - PushState( _( "Cut labeled regions to the clipboard" ), _( "Cut Labels" ) ); + PushState( + /* i18n-hint: (verb) past tense. Audacity has just cut the labeled regions.*/ + _( "Cut labeled regions to the clipboard" ), + /* i18n-hint: (verb)*/ + _( "Cut Labels" ) ); RedrawProject(); } @@ -3913,7 +3954,10 @@ void AudacityProject::OnSplitCutLabels() msClipProject = this; - PushState( _( "SplitCut labeled regions to the clipboard" ), + PushState( + /* i18n-hint: (verb) Audacity has just splitcut the labeled regions*/ + _( "SplitCut labeled regions to the clipboard" ), + /* i18n-hint: (verb) Do a special kind of cut on the labels*/ _( "Split Cut Labels" ) ); RedrawProject(); @@ -3928,7 +3972,9 @@ void AudacityProject::OnCopyLabels() msClipProject = this; - PushState( _( "Copied labeled regions to the clipboard" ), _( "Copy Labels" ) ); + PushState( _( "Copied labeled regions to the clipboard" ), + /* i18n-hint: (verb)*/ + _( "Copy Labels" ) ); mTrackPanel->Refresh( false ); } @@ -3942,7 +3988,11 @@ void AudacityProject::OnDeleteLabels() mViewInfo.sel1 = mViewInfo.sel0; - PushState( _( "Deleted labeled regions" ), _( "Delete Labels" ) ); + PushState( + /* i18n-hint: (verb) Audacity has just deleted the labeled regions*/ + _( "Deleted labeled regions" ), + /* i18n-hint: (verb)*/ + _( "Delete Labels" ) ); RedrawProject(); } @@ -3954,7 +4004,11 @@ void AudacityProject::OnSplitDeleteLabels() EditByLabel( &WaveTrack::SplitDelete, false ); - PushState( _( "Split Deleted labeled regions" ), _( "Split Delete Labels" ) ); + PushState( + /* i18n-hint: (verb) Audacity has just done a special kind of delete on the labeled regions */ + _( "Split Deleted labeled regions" ), + /* i18n-hint: (verb) Do a special kind of delete on labels*/ + _( "Split Delete Labels" ) ); RedrawProject(); } @@ -3966,7 +4020,11 @@ void AudacityProject::OnSilenceLabels() EditByLabel( &WaveTrack::Silence, false ); - PushState( _( "Silenced labeled regions" ), _( "Silence Labels" ) ); + PushState( + /* i18n-hint: (verb)*/ + _( "Silenced labeled regions" ), + /* i18n-hint: (verb)*/ + _( "Silence Labels" ) ); mTrackPanel->Refresh( false ); } @@ -3975,7 +4033,11 @@ void AudacityProject::OnSplitLabels() { EditByLabel( &WaveTrack::Split, false ); - PushState( _( "Split labeled regions" ), _( "Split Labels" ) ); + PushState( + /* i18n-hint: (verb) past tense. Audacity has just split the labeled regions*/ + _( "Split labeled regions" ), + /* i18n-hint: (verb)*/ + _( "Split Labels" ) ); RedrawProject(); } @@ -3987,7 +4049,11 @@ void AudacityProject::OnJoinLabels() EditByLabel( &WaveTrack::Join, false ); - PushState( _( "Joined labeled regions" ), _( "Join Labels" ) ); + PushState( + /* i18n-hint: (verb) Audacity has just joined the labeled regions*/ + _( "Joined labeled regions" ), + /* i18n-hint: (verb)*/ + _( "Join Labels" ) ); RedrawProject(); } @@ -3999,7 +4065,11 @@ void AudacityProject::OnDisjoinLabels() EditByLabel( &WaveTrack::Disjoin, false ); - PushState( _( "Detached labeled regions" ), _( "Detach Labels" ) ); + PushState( + /* i18n-hint: (verb) Audacity has just detached the labeled regions*/ + _( "Detached labeled regions" ), + /* i18n-hint: (verb)*/ + _( "Detach Labels" ) ); RedrawProject(); } @@ -4808,6 +4878,8 @@ void AudacityProject::HandleMixAndRender(bool toNewTrack) if (selectedCount==1) { wxString msg; msg.Printf(_("Rendered all audio in track '%s'"), firstName.c_str()); + /* i18n-hint: Convert the audio into a more usable form, so apply + * panning and amplification and write to some external file.*/ PushState(msg, _("Render")); } else { diff --git a/src/Project.cpp b/src/Project.cpp index c838ff3e8..36386e506 100644 --- a/src/Project.cpp +++ b/src/Project.cpp @@ -1164,6 +1164,7 @@ void AudacityProject::SetProjectTitle() if (mIsRecovered) { name += wxT(" "); + /* i18n-hint: E.g this is recovered audio that had been lost.*/ name += _("(Recovered)"); } @@ -2125,6 +2126,7 @@ wxArrayString AudacityProject::ShowOpenDialog(wxString extraformat, wxString ext all; #endif + /* i18n-hint: The vertical bars and * are essential here.*/ wxString mask = _("All files|*|All supported files|") + all + wxT("|"); // "all" and "all supported" entries if (extraformat != wxEmptyString) @@ -2807,6 +2809,7 @@ bool AudacityProject::HandleXMLTag(const wxChar *tag, const wxChar **attrs) (fileVersion > wxT(AUDACITY_FILE_FORMAT_VERSION))) { wxString msg; + /* i18n-hint: %s will be replaced by the version number.*/ msg.Printf(_("This file was saved using Audacity %s.\nYou are using Audacity %s. You may need to upgrade to a newer version to open this file."), audacityVersion.c_str(), AUDACITY_VERSION_STRING); @@ -3509,6 +3512,7 @@ bool AudacityProject::SaveAs(bool bWantSaveCompressed /*= false*/) { fName = FileSelector(_("Save Speech As:"), path, fName, wxT(""), + /* i18n-hint: Do not translate PCM.*/ _("Windows PCM Audio file (*.wav)|*.wav"), //lda wxFD_SAVE | wxFD_OVERWRITE_PROMPT | wxRESIZE_BORDER, this); } diff --git a/src/Screenshot.cpp b/src/Screenshot.cpp index edde20770..3de679294 100644 --- a/src/Screenshot.cpp +++ b/src/Screenshot.cpp @@ -329,10 +329,14 @@ void ScreenFrame::PopulateOrExchange(ShuttleGui & S) { S.Id(IdMainWindowSmall).AddButton(_("Resize Small")); S.Id(IdMainWindowLarge).AddButton(_("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 = new wxToggleButton(p, IdToggleBackgroundBlue, _("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 = new wxToggleButton(p, IdToggleBackgroundWhite, _("White Bkgnd")); diff --git a/src/Theme.cpp b/src/Theme.cpp index e3ea3886e..46f89bea7 100644 --- a/src/Theme.cpp +++ b/src/Theme.cpp @@ -801,6 +801,7 @@ bool ThemeBase::ReadImageCache( bool bBinaryRead, bool bOkIfNotFound) } if( !ImageCache.LoadFile( FileName, wxBITMAP_TYPE_PNG )) { + /* i18n-hint: Do not translate png. It is the name of a file format.*/ wxMessageBox( wxString::Format( _("Audacity could not load file:\n %s.\nBad png format perhaps?"), @@ -890,6 +891,7 @@ 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.*/ wxMessageBox( wxString::Format( _("Audacity could not load file:\n %s.\nBad png format perhaps?"), diff --git a/src/TrackPanel.cpp b/src/TrackPanel.cpp index dce68d0e1..ed0f869ed 100644 --- a/src/TrackPanel.cpp +++ b/src/TrackPanel.cpp @@ -2420,7 +2420,9 @@ void TrackPanel::HandleEnvelope(wxMouseEvent & event) if (event.LeftUp()) { mCapturedTrack = NULL; MakeParentPushState( + /* i18n-hint: (verb) Audacity has just adjusted the envelope .*/ _("Adjusted envelope."), + /* i18n-hint: The envelope is a curve that controls the audio loudness.*/ _("Envelope") ); } @@ -2585,7 +2587,11 @@ void TrackPanel::HandleSlide(wxMouseEvent & event) consolidate = false; } else { - wxString direction = mHSlideAmount>0 ? _("right") : _("left"); + wxString direction = mHSlideAmount>0 ? + /* i18n-hint: a direction as in left or right.*/ + _("right") : + /* i18n-hint: a direction as in left or right.*/ + _("left"); /* i18n-hint: %s is a direction like left or right */ msg.Printf(_("Time shifted tracks/clips %s %.02f seconds"), direction.c_str(), fabs(mHSlideAmount)); @@ -4291,6 +4297,7 @@ void TrackPanel::HandleRearrange(wxMouseEvent & event) } else if (event.m_y > mMoveDownThreshold || event.m_y > GetRect().GetHeight()) { mTracks->MoveDown(mCapturedTrack); + /* i18n-hint: a direction as in up or down.*/ dir = _("down"); #ifdef EXPERIMENTAL_MIDI_OUT if (pMixerBoard && (mCapturedTrack->GetKind() == Track::Wave || @@ -7317,11 +7324,18 @@ void TrackPanel::OnMoveTrack(wxCommandEvent & event) if (pMixerBoard && (mPopupMenuTarget->GetKind() == Track::Wave)) pMixerBoard->MoveTrackCluster((WaveTrack*)mPopupMenuTarget, bUp); - MakeParentPushState(wxString::Format(_("Moved '%s' %s"), + MakeParentPushState(wxString::Format( + /* i18n-hint: the first %s is the name of a track, the second a direction as in up or down. + * If the word order is different in your language ask on the translators list about what + * to do.*/ + _("Moved '%s' %s"), mPopupMenuTarget->GetName(). c_str(), event.GetId() == - OnMoveUpID ? _("up") : + OnMoveUpID ? + /* i18n-hint: a direction as in up or down.*/ + _("up") : + /* i18n-hint: a direction as in up or down.*/ _("down")), _("Move Track")); Refresh(false); @@ -8030,7 +8044,11 @@ void TrackInfo::DrawMuteSolo(wxDC * dc, const wxRect r, Track * t, dc->DrawRectangle(bev); long textWidth, textHeight; - wxString str = (solo) ? _("Solo") : _("Mute"); + wxString str = (solo) ? + /* i18n-hint: This is on a button that will silence this track.*/ + _("Solo") : + /* i18n-hint: This is on a button that will silence all the other tracks.*/ + _("Mute"); SetTrackInfoFont(dc); dc->GetTextExtent(str, &textWidth, &textHeight); diff --git a/src/effects/AutoDuck.cpp b/src/effects/AutoDuck.cpp index d7b970f72..b3bc5f6b6 100644 --- a/src/effects/AutoDuck.cpp +++ b/src/effects/AutoDuck.cpp @@ -813,9 +813,11 @@ void EffectAutoDuckPanel::OnPaint(wxPaintEvent& evt) valueStr += wxT(" "); if (cp == duckAmount) - valueStr += _("dB"); // i18n-hint: short form of 'decibels' + /* i18n-hint: short form of 'decibels'.*/ + valueStr += _("dB"); else - valueStr += _("s"); // i18n-hint: short form of 'seconds' + /* i18n-hint: short form of 'seconds'.*/ + valueStr += _("s"); int textWidth = 0, textHeight = 0; GetTextExtent(valueStr, &textWidth, &textHeight); diff --git a/src/export/ExportMP3.cpp b/src/export/ExportMP3.cpp index c2ba1b515..1427cc774 100644 --- a/src/export/ExportMP3.cpp +++ b/src/export/ExportMP3.cpp @@ -597,6 +597,7 @@ public: S.SetStretchyCol(0); { if (mLibPath.GetFullPath().IsEmpty()) { + /* i18n-hint: There is a button to the right of the arrow.*/ text.Printf(_("To find %s, click here -->"), mName.c_str()); mPathText = S.AddTextBox(wxT(""), text, 0); } @@ -604,7 +605,9 @@ public: mPathText = S.AddTextBox(wxT(""), mLibPath.GetFullPath(), 0); } S.Id(ID_BROWSE).AddButton(_("Browse..."), wxALIGN_RIGHT); + /* i18n-hint: There is a button to the right of the arrow.*/ S.AddVariableText(_("To get a free copy of Lame, click here -->"), true); + /* i18n-hint: (verb)*/ S.Id(ID_DLOAD).AddButton(_("Download"), wxALIGN_RIGHT); } S.EndMultiColumn(); @@ -625,8 +628,8 @@ public: { wxString question; /* i18n-hint: It's asking for the location of a file, for - example, "Where is lame_enc.dll?" - you could translate - "Where would I find the file %s" instead if you want. */ + * example, "Where is lame_enc.dll?" - you could translate + * "Where would I find the file %s" instead if you want. */ question.Printf(_("Where is %s?"), mName.c_str()); wxString path = FileSelector(question, diff --git a/src/prefs/MousePrefs.cpp b/src/prefs/MousePrefs.cpp index 00af13a85..4683f878b 100644 --- a/src/prefs/MousePrefs.cpp +++ b/src/prefs/MousePrefs.cpp @@ -116,7 +116,10 @@ void MousePrefs::CreateList() AddItem(_("Shift-Left-Drag"), _("Time-Shift"),_("Time shift all clips in track")); AddItem(_("Ctrl-Left-Drag"), _("Time-Shift"),_("Move clip up/down between tracks")); - AddItem(_("Left-Drag"), _("Envelope"), _("Change Amplification Envelope")); + AddItem(_("Left-Drag"), + /* i18n-hint: The envelope is a curve that controls the audio loudness.*/ + _("Envelope"), + _("Change Amplification Envelope")); AddItem(_("Left-Click"), _("Pencil"), _("Change Sample")); AddItem(_("Alt-Left-Click"), _("Pencil"), _("Smooth at Sample")); diff --git a/src/toolbars/ToolBar.cpp b/src/toolbars/ToolBar.cpp index 9aeec847a..f6c028277 100644 --- a/src/toolbars/ToolBar.cpp +++ b/src/toolbars/ToolBar.cpp @@ -117,6 +117,7 @@ ToolBar::~ToolBar() // wxString ToolBar::GetTitle() { + /* i18n-hint: %s will be replaced by the version number.*/ return wxString::Format( _("Audacity %s ToolBar"), GetLabel().c_str() ); }