Fix all remaining misuses of macro _ in static initializers...

... I found them using a rewritten macro _ that dynamically checked
that translations have been initialized.  But I do not commit that changed
macro.
This commit is contained in:
Paul Licameli 2017-09-29 20:14:37 -04:00
parent c94222ff54
commit 6a8bba0a99
8 changed files with 188 additions and 109 deletions

View File

@ -1047,6 +1047,11 @@ wxString AudacityApp::InitLang( const wxString & lang )
ProcessEvent(evt);
}
// PRL: Moved this, do it only after language intialized
// Unused strings that we want to be translated, even though
// we're not using them yet...
wxString future1 = _("Master Gain Control");
return result;
}
@ -1256,10 +1261,6 @@ bool AudacityApp::OnInit()
wxTheApp->SetAppDisplayName(appName);
wxTheApp->SetVendorName(appName);
// Unused strings that we want to be translated, even though
// we're not using them yet...
wxString future1 = _("Master Gain Control");
::wxInitAllImageHandlers();
// AddHandler takes ownership

View File

@ -310,20 +310,26 @@ DependencyDialog::DependencyDialog(wxWindow *parent,
PopulateOrExchange(S);
}
const wxString kStdMsg =
static const wxString kStdMsg()
{
return
_("Copying these files into your project will remove this dependency.\
\nThis is safer, but needs more disk space.");
}
const wxString kExtraMsgForMissingFiles =
static const wxString kExtraMsgForMissingFiles()
{
return
_("\n\nFiles shown as MISSING have been moved or deleted and cannot be copied.\
\nRestore them to their original location to be able to copy into project.");
}
void DependencyDialog::PopulateOrExchange(ShuttleGui& S)
{
S.SetBorder(5);
S.StartVerticalLay();
{
mMessageStaticText = S.AddVariableText(kStdMsg, false);
mMessageStaticText = S.AddVariableText(kStdMsg(), false);
S.StartStatic(_("Project Dependencies"));
{
@ -422,9 +428,9 @@ void DependencyDialog::PopulateList()
++i;
}
wxString msg = kStdMsg;
wxString msg = kStdMsg();
if (mHasMissingFiles)
msg += kExtraMsgForMissingFiles;
msg += kExtraMsgForMissingFiles();
mMessageStaticText->SetLabel(msg);
if (mCopyAllFilesButton)

View File

@ -45,6 +45,7 @@
#include "Internat.h"
#include "Prefs.h"
#include "ShuttleGui.h"
#include "TranslatableStringArray.h"
#include "widgets/Grid.h"
#include "xml/XMLFileReader.h"
@ -675,24 +676,41 @@ public:
// Editor
//
#define LABEL_ARTIST _("Artist Name")
#define LABEL_TITLE _("Track Title")
#define LABEL_ALBUM _("Album Title")
#define LABEL_TRACK _("Track Number")
#define LABEL_YEAR _("Year")
#define LABEL_GENRE _("Genre")
#define LABEL_COMMENTS _("Comments")
#define LABEL_ARTIST XO("Artist Name")
#define LABEL_TITLE XO("Track Title")
#define LABEL_ALBUM XO("Album Title")
#define LABEL_TRACK XO("Track Number")
#define LABEL_YEAR XO("Year")
#define LABEL_GENRE XO("Genre")
#define LABEL_COMMENTS XO("Comments")
static wxString names[] =
static wxArrayString names()
{
LABEL_ARTIST,
LABEL_TITLE,
LABEL_ALBUM,
LABEL_TRACK,
LABEL_YEAR,
LABEL_GENRE,
LABEL_COMMENTS
};
static wxString theNames[] =
{
LABEL_ARTIST,
LABEL_TITLE,
LABEL_ALBUM,
LABEL_TRACK,
LABEL_YEAR,
LABEL_GENRE,
LABEL_COMMENTS
};
class NamesArray final : public TranslatableStringArray
{
void Populate() override
{
for (auto &name : theNames)
mContents.push_back( wxGetTranslation( name ) );
}
};
static NamesArray theArray;
// Yes, return array by value
return theArray.Get();
}
static struct
{
@ -751,14 +769,6 @@ TagsEditor::TagsEditor(wxWindow * parent,
{
SetName(GetTitle());
names[0] = LABEL_ARTIST;
names[1] = LABEL_TITLE;
names[2] = LABEL_ALBUM;
names[3] = LABEL_TRACK;
names[4] = LABEL_YEAR;
names[5] = LABEL_GENRE;
names[6] = LABEL_COMMENTS;
labelmap[0].label = LABEL_ARTIST;
labelmap[1].label = LABEL_TITLE;
labelmap[2].label = LABEL_ALBUM;
@ -858,7 +868,7 @@ void TagsEditor::PopulateOrExchange(ShuttleGui & S)
mGrid->SetColLabelSize(mGrid->GetDefaultRowSize());
wxArrayString cs(WXSIZEOF(names), names);
wxArrayString cs(names());
// Build the initial (empty) grid
mGrid->CreateGrid(0, 2);

View File

@ -97,9 +97,10 @@ enum DiscriminationMethod {
const struct DiscriminationMethodInfo {
const wxChar *name;
} discriminationMethodInfo[DM_N_METHODS] = {
{ _("Median") },
{ _("Second greatest") },
{ _("Old") },
// Experimental only, don't need translations
{ wxT("Median") },
{ wxT("Second greatest") },
{ wxT("Old") },
};
// magic number used only in the old statistics
@ -130,13 +131,14 @@ const struct WindowTypesInfo {
// is the product of the windows' two constant terms,
// plus one half the product of the first cosine coefficients.
{ _("none, Hann (2.0.6 behavior)"), 2, { 1, 0, 0 }, { 0.5, -0.5, 0 }, 0.5 },
{ _("Hann, none"), 2, { 0.5, -0.5, 0 }, { 1, 0, 0 }, 0.5 },
{ _("Hann, Hann (default)"), 4, { 0.5, -0.5, 0 }, { 0.5, -0.5, 0 }, 0.375 },
{ _("Blackman, Hann"), 4, { 0.42, -0.5, 0.08 }, { 0.5, -0.5, 0 }, 0.335 },
{ _("Hamming, none"), 2, { 0.54, -0.46, 0.0 }, { 1, 0, 0 }, 0.54 },
{ _("Hamming, Hann"), 4, { 0.54, -0.46, 0.0 }, { 0.5, -0.5, 0 }, 0.385 },
{ _("Hamming, Reciprocal Hamming"), 2, { 0.54, -0.46, 0.0 }, { 1, 0, 0 }, 1.0 }, // output window is special
// Experimental only, don't need translations
{ wxT("none, Hann (2.0.6 behavior)"), 2, { 1, 0, 0 }, { 0.5, -0.5, 0 }, 0.5 },
{ wxT("Hann, none"), 2, { 0.5, -0.5, 0 }, { 1, 0, 0 }, 0.5 },
{ wxT("Hann, Hann (default)"), 4, { 0.5, -0.5, 0 }, { 0.5, -0.5, 0 }, 0.375 },
{ wxT("Blackman, Hann"), 4, { 0.42, -0.5, 0.08 }, { 0.5, -0.5, 0 }, 0.335 },
{ wxT("Hamming, none"), 2, { 0.54, -0.46, 0.0 }, { 1, 0, 0 }, 0.54 },
{ wxT("Hamming, Hann"), 4, { 0.54, -0.46, 0.0 }, { 0.5, -0.5, 0 }, 0.385 },
{ wxT("Hamming, Reciprocal Hamming"), 2, { 0.54, -0.46, 0.0 }, { 1, 0, 0 }, 1.0 }, // output window is special
};
enum {

View File

@ -223,7 +223,7 @@ ExportFFmpeg::ExportFFmpeg()
}
SetMaxChannels(ExportFFmpegOptions::fmts[newfmt].maxchannels,fmtindex);
SetDescription(ExportFFmpegOptions::fmts[newfmt].description,fmtindex);
SetDescription(ExportFFmpegOptions::fmts[newfmt].Description(), fmtindex);
int canmeta = ExportFFmpegOptions::fmts[newfmt].canmetadata;
if (canmeta && (canmeta == AV_VERSION_INT(-1,-1,-1) || canmeta <= avfver))
@ -872,8 +872,8 @@ ProgressResult ExportFFmpeg::Export(AudacityProject *project,
{
ProgressDialog progress(wxFileName(fName).GetName(),
selectionOnly ?
wxString::Format(_("Exporting selected audio as %s"), ExportFFmpegOptions::fmts[mSubFormat].description) :
wxString::Format(_("Exporting entire file as %s"), ExportFFmpegOptions::fmts[mSubFormat].description));
wxString::Format(_("Exporting selected audio as %s"), ExportFFmpegOptions::fmts[mSubFormat].Description()) :
wxString::Format(_("Exporting entire file as %s"), ExportFFmpegOptions::fmts[mSubFormat].Description()));
while (updateResult == ProgressResult::Success) {
auto pcmNumSamples = mixer->Process(pcmBufferSize);

View File

@ -61,6 +61,7 @@
#include "../Prefs.h"
#include "../Project.h"
#include "../Tags.h"
#include "../TranslatableStringArray.h"
#include "Export.h"
@ -1191,23 +1192,44 @@ int ExportFFmpegOptions::iAACProfileValues[] = {
};
/// Names of AAC profiles to be displayed
const wxChar *ExportFFmpegOptions::iAACProfileNames[] = {
_("LC"),
_("Main"),
/*_("SSR"),*/ //SSR is not supported
_("LTP")
};
static wxString iAACProfileNames(int index)
{
static const wxString names[] = {
XO("LC"),
XO("Main"),
/*_("SSR"),*/ //SSR is not supported
XO("LTP")
};
class NamesArray final : public TranslatableStringArray
{
void Populate() override
{
for (auto &name : names)
mContents.push_back( wxGetTranslation( name ) );
}
};
static NamesArray theArray;
return theArray.Get()[ index ];
}
/// List of export types
ExposedFormat ExportFFmpegOptions::fmts[] =
{
{FMT_M4A, wxT("M4A"), wxT("m4a"), wxT("ipod"), 48, AV_VERSION_INT(-1,-1,-1), true, _("M4A (AAC) Files (FFmpeg)"), AV_CODEC_ID_AAC, true},
{FMT_AC3, wxT("AC3"), wxT("ac3"), wxT("ac3"), 7, AV_VERSION_INT(0,0,0), false, _("AC3 Files (FFmpeg)"), AV_CODEC_ID_AC3, true},
{FMT_AMRNB, wxT("AMRNB"), wxT("amr"), wxT("amr"), 1, AV_VERSION_INT(0,0,0), false, _("AMR (narrow band) Files (FFmpeg)"), AV_CODEC_ID_AMR_NB, true},
{FMT_WMA2, wxT("WMA"), wxT("wma"), wxT("asf"), 2, AV_VERSION_INT(52,53,0), false, _("WMA (version 2) Files (FFmpeg)"), AV_CODEC_ID_WMAV2, true},
{FMT_OTHER, wxT("FFMPEG"), wxT(""), wxT(""), 255, AV_VERSION_INT(-1,-1,-1), true, _("Custom FFmpeg Export"), AV_CODEC_ID_NONE, true}
{FMT_M4A, wxT("M4A"), wxT("m4a"), wxT("ipod"), 48, AV_VERSION_INT(-1,-1,-1), true, XO("M4A (AAC) Files (FFmpeg)"), AV_CODEC_ID_AAC, true},
{FMT_AC3, wxT("AC3"), wxT("ac3"), wxT("ac3"), 7, AV_VERSION_INT(0,0,0), false, XO("AC3 Files (FFmpeg)"), AV_CODEC_ID_AC3, true},
{FMT_AMRNB, wxT("AMRNB"), wxT("amr"), wxT("amr"), 1, AV_VERSION_INT(0,0,0), false, XO("AMR (narrow band) Files (FFmpeg)"), AV_CODEC_ID_AMR_NB, true},
{FMT_WMA2, wxT("WMA"), wxT("wma"), wxT("asf"), 2, AV_VERSION_INT(52,53,0), false, XO("WMA (version 2) Files (FFmpeg)"), AV_CODEC_ID_WMAV2, true},
{FMT_OTHER, wxT("FFMPEG"), wxT(""), wxT(""), 255, AV_VERSION_INT(-1,-1,-1), true, XO("Custom FFmpeg Export"), AV_CODEC_ID_NONE, true}
};
wxString ExposedFormat::Description() const
{
return wxGetTranslation(description_);
}
/// Sample rates supported by AAC encoder (must end with zero-element)
const int ExportFFmpegOptions::iAACSampleRates[] = { 7350, 8000, 11025, 12000, 16000, 22050, 24000, 32000, 44100, 48000, 64000, 88200, 0 };
@ -1297,7 +1319,31 @@ ApplicableFor ExportFFmpegOptions::apptable[] =
};
/// Prediction order method - names. Labels are indices of this array.
const wxChar *ExportFFmpegOptions::PredictionOrderMethodNames[] = { _("Estimate"), _("2-level"), _("4-level"), _("8-level"), _("Full search"), _("Log search")};
static wxString PredictionOrderMethodNames(int index)
{
static const wxString names[] = {
XO("Estimate"),
XO("2-level"),
XO("4-level"),
XO("8-level"),
XO("Full search"),
XO("Log search")
};
class NamesArray final : public TranslatableStringArray
{
void Populate() override
{
for (auto &name : names)
mContents.push_back( wxGetTranslation( name ) );
}
};
static NamesArray theArray;
return theArray.Get()[ index ];
}
ExportFFmpegOptions::~ExportFFmpegOptions()
@ -1325,12 +1371,12 @@ ExportFFmpegOptions::ExportFFmpegOptions(wxWindow *parent)
for (unsigned int i = 0; i < 6; i++)
{
mPredictionOrderMethodLabels.Add(i);
mPredictionOrderMethodNames.Add(wxString::Format(wxT("%s"),PredictionOrderMethodNames[i]));
mPredictionOrderMethodNames.Add(wxString::Format(wxT("%s"),PredictionOrderMethodNames(i)));
}
for (unsigned int i=0; i < (sizeof(iAACProfileValues)/sizeof(int)); i++)
{
mProfileNames.Add(wxString::Format(wxT("%s"),iAACProfileNames[i]));
mProfileNames.Add(wxString::Format(wxT("%s"),iAACProfileNames(i)));
mProfileLabels.Add(iAACProfileValues[i]);
}

View File

@ -44,9 +44,11 @@ struct ExposedFormat
unsigned maxchannels; //!< how many channels this format could handle
int canmetadata; //!< !=0 if format supports metadata, -1 any avformat version, otherwise version support added
bool canutf8; //!< true if format supports metadata in UTF-8, false otherwise
const wxChar *description; //!< format description (will be shown in export dialog)
const wxChar *description_; //!< format description (will be shown in export dialog) (untranslated!)
AVCodecID codecid; //!< codec ID (see libavcodec/avcodec.h)
bool compiledIn; //!< support for this codec/format is compiled in (checked at runtime)
wxString Description() const; // get translation
};
@ -199,11 +201,9 @@ public:
// Static tables
static CompatibilityEntry CompatibilityList[];
static int iAACProfileValues[];
static const wxChar *iAACProfileNames[];
static ExposedFormat fmts[];
static const int iAACSampleRates[];
static ApplicableFor apptable[];
static const wxChar *PredictionOrderMethodNames[];
private:

View File

@ -197,6 +197,20 @@ different formats.
* Used in an array to hold the built-in time formats that are always available
* to the user */
struct BuiltinFormatString
{
wxString name;
wxString formatStr;
};
//
// ----------------------------------------------------------------------------
// UntranslatedBuiltinFormatString Struct
// ----------------------------------------------------------------------------
//
/** \brief struct to hold a formatting control string and its untranslated name
* Used in an array to hold the built-in time formats that are always available
* to the user */
struct UntranslatedBuiltinFormatString
{
wxString name;
wxString formatStr;
@ -282,74 +296,74 @@ const std::vector<BuiltinFormatString> &TimeConverterFormats() {
* array of string pairs for name of the format and the format string
* 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 TimeConverterFormats_[] = {
static const UntranslatedBuiltinFormatString TimeConverterFormats_[] = {
{
/* i18n-hint: Name of time display format that shows time in seconds */
_("seconds"),
XO("seconds"),
/* i18n-hint: Format string for displaying time in seconds. Change the comma
* in the middle to the 1000s separator for your locale, and the 'seconds'
* on the end to the word for seconds. Don't change the numbers. */
_("01000,01000 seconds")
XO("01000,01000 seconds")
},
{
/* i18n-hint: Name of time display format that shows time in hours, minutes
* and seconds */
_("hh:mm:ss"),
XO("hh:mm:ss"),
/* i18n-hint: Format string for displaying time in hours, minutes and
* seconds. Change the 'h' to the abbreviation for hours, 'm' to the
* abbreviation for minutes and 's' to the abbreviation for seconds. Don't
* change the numbers unless there aren't 60 seconds in a minute in your
* locale */
_("0100 h 060 m 060 s")
XO("0100 h 060 m 060 s")
},
{
/* i18n-hint: Name of time display format that shows time in days, hours,
* minutes and seconds */
_("dd:hh:mm:ss"),
XO("dd:hh:mm:ss"),
/* i18n-hint: Format string for displaying time in days, hours, minutes and
* seconds. Change the 'days' to the word for days, 'h' to the abbreviation
* for hours, 'm' to the abbreviation for minutes and 's' to the
* abbreviation for seconds. Don't change the numbers unless there aren't
* 24 hours in a day in your locale */
_("0100 days 024 h 060 m 060 s")
XO("0100 days 024 h 060 m 060 s")
},
{
/* i18n-hint: Name of time display format that shows time in hours,
* minutes, seconds and hundredths of a second (1/100 second) */
_("hh:mm:ss + hundredths"),
XO("hh:mm:ss + hundredths"),
/* i18n-hint: Format string for displaying time in hours, minutes, seconds
* and hundredths of a second. Change the 'h' to the abbreviation for hours,
* 'm' to the abbreviation for minutes and 's' to the abbreviation for seconds
* (the hundredths are shown as decimal seconds) . Don't change the numbers
* unless there aren't 60 minutes in an hour in your locale */
_("0100 h 060 m 060.0100 s")
XO("0100 h 060 m 060.0100 s")
},
{
/* i18n-hint: Name of time display format that shows time in hours,
* minutes, seconds and milliseconds (1/1000 second) */
_("hh:mm:ss + milliseconds"),
XO("hh:mm:ss + milliseconds"),
/* i18n-hint: Format string for displaying time in hours, minutes, seconds
* and milliseconds. Change the 'h' to the abbreviation for hours, 'm' to the
* abbreviation for minutes and 's' to the abbreviation for seconds (the
* milliseconds are shown as decimal seconds) . Don't change the numbers
* unless there aren't 60 minutes in an hour in your locale */
_("0100 h 060 m 060.01000 s")
XO("0100 h 060 m 060.01000 s")
},
{
/* i18n-hint: Name of time display format that shows time in hours,
* minutes, seconds and samples (at the current project sample rate) */
_("hh:mm:ss + samples"),
XO("hh:mm:ss + samples"),
/* i18n-hint: Format string for displaying time in hours, minutes, seconds
* and samples. Change the 'h' to the abbreviation for hours, 'm' to the
* abbreviation for minutes, 's' to the abbreviation for seconds and
* translate samples . Don't change the numbers
* unless there aren't 60 seconds in a minute in your locale */
_("0100 h 060 m 060 s+.# samples")
XO("0100 h 060 m 060 s+.# samples")
},
{
@ -357,116 +371,116 @@ static const BuiltinFormatString TimeConverterFormats_[] = {
* current project sample rate). For example the number of a sample at 1
* second into a recording at 44.1KHz would be 44,100.
*/
_("samples"),
XO("samples"),
/* i18n-hint: Format string for displaying time in samples (lots of samples).
* Change the ',' to the 1000s separator for your locale, and translate
* samples. If 1000s aren't a base multiple for your number system, then you
* can change the numbers to an appropriate one, and put a 0 on the front */
_("01000,01000,01000 samples|#")
XO("01000,01000,01000 samples|#")
},
{
/* i18n-hint: Name of time display format that shows time in hours, minutes,
* seconds and frames at 24 frames per second (commonly used for films) */
_("hh:mm:ss + film frames (24 fps)"),
XO("hh:mm:ss + film frames (24 fps)"),
/* i18n-hint: Format string for displaying time in hours, minutes, seconds
* and frames at 24 frames per second. Change the 'h' to the abbreviation
* for hours, 'm' to the abbreviation for minutes, 's' to the abbreviation
* for seconds and translate 'frames' . Don't change the numbers
* unless there aren't 60 seconds in a minute in your locale */
_("0100 h 060 m 060 s+.24 frames")
XO("0100 h 060 m 060 s+.24 frames")
},
{
/* i18n-hint: Name of time display format that shows time in frames (lots of
* frames) at 24 frames per second (commonly used for films) */
_("film frames (24 fps)"),
XO("film frames (24 fps)"),
/* i18n-hint: Format string for displaying time in frames at 24 frames per
* second. Change the comma
* in the middle to the 1000s separator for your locale,
* translate 'frames' and leave the rest alone */
_("01000,01000 frames|24")
XO("01000,01000 frames|24")
},
{
/* i18n-hint: Name of time display format that shows time in hours, minutes,
* seconds and frames at NTSC TV drop-frame rate (used for American /
* Japanese TV, and very odd) */
_("hh:mm:ss + NTSC drop frames"),
XO("hh:mm:ss + NTSC drop frames"),
/* i18n-hint: Format string for displaying time in hours, minutes, seconds
* and frames with NTSC drop frames. Change the 'h' to the abbreviation
* for hours, 'm' to the abbreviation for minutes, 's' to the abbreviation
* for seconds and translate 'frames'. Leave the |N alone, it's important! */
_("0100 h 060 m 060 s+.30 frames|N")
XO("0100 h 060 m 060 s+.30 frames|N")
},
{
/* i18n-hint: Name of time display format that shows time in hours, minutes,
* seconds and frames at NTSC TV non-drop-frame rate (used for American /
* Japanese TV, and doesn't quite match wall time */
_("hh:mm:ss + NTSC non-drop frames"),
XO("hh:mm:ss + NTSC non-drop frames"),
/* i18n-hint: Format string for displaying time in hours, minutes, seconds
* and frames with NTSC drop frames. Change the 'h' to the abbreviation
* for hours, 'm' to the abbreviation for minutes, 's' to the abbreviation
* for seconds and translate 'frames'. Leave the | .999000999 alone,
* the whole things really is slightly off-speed! */
_("0100 h 060 m 060 s+.030 frames| .999000999")
XO("0100 h 060 m 060 s+.030 frames| .999000999")
},
{
/* i18n-hint: Name of time display format that shows time in frames at NTSC
* TV frame rate (used for American / Japanese TV */
_("NTSC frames"),
XO("NTSC frames"),
/* i18n-hint: Format string for displaying time in frames with NTSC frames.
* Change the comma
* in the middle to the 1000s separator for your locale,
* translate 'frames' and leave the rest alone. That really is the frame
* rate! */
_("01000,01000 frames|29.97002997")
XO("01000,01000 frames|29.97002997")
},
{
/* i18n-hint: Name of time display format that shows time in hours, minutes,
* seconds and frames at PAL TV frame rate (used for European TV) */
_("hh:mm:ss + PAL frames (25 fps)"),
XO("hh:mm:ss + PAL frames (25 fps)"),
/* i18n-hint: Format string for displaying time in hours, minutes, seconds
* and frames with PAL TV frames. Change the 'h' to the abbreviation
* for hours, 'm' to the abbreviation for minutes, 's' to the abbreviation
* for seconds and translate 'frames'. Nice simple time code! */
_("0100 h 060 m 060 s+.25 frames")
XO("0100 h 060 m 060 s+.25 frames")
},
{
/* i18n-hint: Name of time display format that shows time in frames at PAL
* TV frame rate (used for European TV) */
_("PAL frames (25 fps)"),
XO("PAL frames (25 fps)"),
/* i18n-hint: Format string for displaying time in frames with NTSC frames.
* Change the comma
* in the middle to the 1000s separator for your locale,
* translate 'frames' and leave the rest alone. */
_("01000,01000 frames|25")
XO("01000,01000 frames|25")
},
{
/* i18n-hint: Name of time display format that shows time in hours, minutes,
* seconds and frames at CD Audio frame rate (75 frames per second) */
_("hh:mm:ss + CDDA frames (75 fps)"),
XO("hh:mm:ss + CDDA frames (75 fps)"),
/* i18n-hint: Format string for displaying time in hours, minutes, seconds
* and frames with CD Audio frames. Change the 'h' to the abbreviation
* for hours, 'm' to the abbreviation for minutes, 's' to the abbreviation
* for seconds and translate 'frames'. */
_("0100 h 060 m 060 s+.75 frames")
XO("0100 h 060 m 060 s+.75 frames")
},
{
/* i18n-hint: Name of time display format that shows time in frames at CD
* Audio frame rate (75 frames per second) */
_("CDDA frames (75 fps)"),
XO("CDDA frames (75 fps)"),
/* i18n-hint: Format string for displaying time in frames with CD Audio
* frames. Change the comma
* in the middle to the 1000s separator for your locale,
* translate 'frames' and leave the rest alone */
_("01000,01000 frames|75")
XO("01000,01000 frames|75")
},
};
@ -491,20 +505,20 @@ const std::vector<BuiltinFormatString> &FrequencyConverterFormats() {
* array of string pairs for name of the format and the format string
* 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_[] = {
static const UntranslatedBuiltinFormatString FrequencyConverterFormats_[] = {
/* i18n-hint: Name of display format that shows frequency in hertz */
{
_("Hz"),
XO("Hz"),
/* i18n-hint: Format string for displaying frequency in hertz. Change
* the decimal point for your locale. Don't change the numbers. */
_("0100000.0100 Hz")
XO("0100000.0100 Hz")
},
{
_("kHz"),
XO("kHz"),
/* i18n-hint: Format string for displaying frequency in kilohertz. Change
* the decimal point for your locale. Don't change the numbers. */
_("01000.01000 kHz|0.001")
XO("01000.01000 kHz|0.001")
},
};
@ -529,36 +543,36 @@ const std::vector<BuiltinFormatString> &BandwidthConverterFormats() {
* array of string pairs for name of the format and the format string
* 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 BandwidthConverterFormats_[] = {
static const UntranslatedBuiltinFormatString BandwidthConverterFormats_[] = {
{
/* i18n-hint: Name of display format that shows log of frequency
* in octaves */
_("octaves"),
XO("octaves"),
/* i18n-hint: Format string for displaying log of frequency in octaves.
* Change the decimal points for your locale. Don't change the numbers. */
// Scale factor is 1 / ln (2)
_("100.01000 octaves|1.442695041")
XO("100.01000 octaves|1.442695041")
},
{
/* i18n-hint: Name of display format that shows log of frequency
* in semitones and cents */
_("semitones + cents"),
XO("semitones + cents"),
/* i18n-hint: Format string for displaying log of frequency in semitones
* and cents.
* Change the decimal points for your locale. Don't change the numbers. */
// Scale factor is 12 / ln (2)
_("1000 semitones .0100 cents|17.312340491")
XO("1000 semitones .0100 cents|17.312340491")
},
{
/* i18n-hint: Name of display format that shows log of frequency
* in decades */
_("decades"),
XO("decades"),
/* i18n-hint: Format string for displaying log of frequency in decades.
* Change the decimal points for your locale. Don't change the numbers. */
// Scale factor is 1 / ln (10)
_("10.01000 decades|0.434294482")
XO("10.01000 decades|0.434294482")
},
};