Audacity 3.2.0
Static Public Member Functions | Static Private Attributes | List of all members
Internat Class Reference

Internationalisation support. More...

#include <Internat.h>

Static Public Member Functions

static void Init ()
 Initialize internationalisation support. Call this once at program start. More...
 
static wxChar GetDecimalSeparator ()
 Get the decimal separator for the current locale. More...
 
static void SetCeeNumberFormat ()
 
static bool CompatibleToDouble (const wxString &stringToConvert, double *result)
 Convert a string to a number. More...
 
static double CompatibleToDouble (const wxString &stringToConvert)
 
static wxString ToString (double numberToConvert, int digitsAfterDecimalPoint=-1)
 Convert a number to a string, always uses the dot as decimal separator. More...
 
static wxString ToDisplayString (double numberToConvert, int digitsAfterDecimalPoint=-1)
 Convert a number to a string, uses the user's locale's decimal separator. More...
 
static TranslatableString FormatSize (wxLongLong size)
 Convert a number to a string while formatting it in bytes, KB, MB, GB. More...
 
static TranslatableString FormatSize (double size)
 
static bool SanitiseFilename (wxString &name, const wxString &sub)
 Check a proposed file name string for illegal characters and remove them return true iff name is "visibly" changed (not necessarily equivalent to character-wise changed) More...
 
static const wxArrayString & GetExcludedCharacters ()
 

Static Private Attributes

static wxChar mDecimalSeparator = wxT('.')
 
static wxArrayString exclude
 

Detailed Description

Internationalisation support.

This class is used to help internationalisation and in general compatibility with different locales and character sets. It deals mostly with converting numbers, but also has important functions to convert to/from UTF-8, which is used in XML files and on Mac OS X for the filesystem.

Definition at line 103 of file Internat.h.

Member Function Documentation

◆ CompatibleToDouble() [1/2]

double Internat::CompatibleToDouble ( const wxString &  stringToConvert)
static

Definition at line 144 of file Internat.cpp.

145{
146 double result = 0;
147 Internat::CompatibleToDouble(stringToConvert, &result);
148 return result;
149}
static bool CompatibleToDouble(const wxString &stringToConvert, double *result)
Convert a string to a number.
Definition: Internat.cpp:134

References CompatibleToDouble().

Here is the call graph for this function:

◆ CompatibleToDouble() [2/2]

bool Internat::CompatibleToDouble ( const wxString &  stringToConvert,
double *  result 
)
static

Convert a string to a number.

This function will accept BOTH point and comma as a decimal separator, regardless of the current locale. Returns 'true' on success, and 'false' if an error occurs.

Definition at line 134 of file Internat.cpp.

135{
136 // Regardless of the locale, always respect comma _and_ point
137 wxString s = stringToConvert;
138 // Convert to C locale decimal point for stable parsing.
139 s.Replace(wxT(","), wxT("."));
140 s.Replace(wxString(GetDecimalSeparator()), wxT("."));
141 return s.ToCDouble(result);
142}
static wxChar GetDecimalSeparator()
Get the decimal separator for the current locale.
Definition: Internat.cpp:129

References GetDecimalSeparator().

Referenced by CompatibleToDouble(), NyquistEffect::GetCtrlValue(), LabelStruct::Import(), LOFImportFileHandle::lofOpenFiles(), LadspaEffect::Validator::OnTextCtrl(), WrappedType::ReadAsDouble(), and WrappedType::WriteToAsString().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ FormatSize() [1/2]

TranslatableString Internat::FormatSize ( double  size)
static

Definition at line 213 of file Internat.cpp.

214{
215 TranslatableString sizeStr;
216
217 if (size == -1)
218 sizeStr = XO("Unable to determine");
219 else {
220 /* make it look nice, by formatting into k, MB, etc */
221 if (size < 1024.0)
222 sizeStr = XO("%s bytes").Format( ToDisplayString(size) );
223 else if (size < 1024.0 * 1024.0) {
224 /* i18n-hint: Abbreviation for Kilo bytes */
225 sizeStr = XO("%s KB").Format( ToDisplayString(size / 1024.0, 1) );
226 }
227 else if (size < 1024.0 * 1024.0 * 1024.0) {
228 /* i18n-hint: Abbreviation for Mega bytes */
229 sizeStr = XO("%s MB").Format( ToDisplayString(size / (1024.0 * 1024.0), 1) );
230 }
231 else {
232 /* i18n-hint: Abbreviation for Giga bytes */
233 sizeStr = XO("%s GB").Format( ToDisplayString(size / (1024.0 * 1024.0 * 1024.0), 1) );
234 }
235 }
236
237 return sizeStr;
238}
#define XO(s)
Definition: Internat.h:31
static wxString ToDisplayString(double numberToConvert, int digitsAfterDecimalPoint=-1)
Convert a number to a string, uses the user's locale's decimal separator.
Definition: Internat.cpp:162
Holds a msgid for the translation catalog; may also bind format arguments.

References size, ToDisplayString(), and XO.

Here is the call graph for this function:

◆ FormatSize() [2/2]

TranslatableString Internat::FormatSize ( wxLongLong  size)
static

Convert a number to a string while formatting it in bytes, KB, MB, GB.

Definition at line 204 of file Internat.cpp.

205{
206 /* wxLongLong contains no built-in conversion to double */
207 double dSize = size.GetHi() * pow(2.0, 32); // 2 ^ 32
208 dSize += size.GetLo();
209
210 return FormatSize(dSize);
211}
static TranslatableString FormatSize(wxLongLong size)
Convert a number to a string while formatting it in bytes, KB, MB, GB.
Definition: Internat.cpp:204

References FormatSize(), and size.

Referenced by ProjectFileManager::Compact(), HistoryDialog::DoUpdate(), FormatSize(), HistoryDialog::OnCompact(), DependencyDialog::OnCopyToClipboard(), DirectoriesPrefs::OnTempText(), and DependencyDialog::PopulateList().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetDecimalSeparator()

wxChar Internat::GetDecimalSeparator ( )
static

Get the decimal separator for the current locale.

Normally, this is a decimal point ('.'), but e.g. Germany uses a comma (',').

Definition at line 129 of file Internat.cpp.

130{
131 return mDecimalSeparator;
132}
static wxChar mDecimalSeparator
Definition: Internat.h:153

References mDecimalSeparator.

Referenced by CompatibleToDouble(), ToDisplayString(), and ToString().

Here is the caller graph for this function:

◆ GetExcludedCharacters()

static const wxArrayString & Internat::GetExcludedCharacters ( )
inlinestatic

Definition at line 149 of file Internat.h.

150 { return exclude; }
static wxArrayString exclude
Definition: Internat.h:155

Referenced by ExportMultipleDialog::MakeFileName().

Here is the caller graph for this function:

◆ Init()

void Internat::Init ( )
static

Initialize internationalisation support. Call this once at program start.

Definition at line 78 of file Internat.cpp.

79{
80 // Save decimal point character
81 struct lconv * localeInfo = localeconv();
82 if (localeInfo)
83 mDecimalSeparator = wxString(wxSafeConvertMB2WX(localeInfo->decimal_point)).GetChar(0);
84
85// wxLogDebug(wxT("Decimal separator set to '%c'"), mDecimalSeparator);
86
87 // Setup list of characters that aren't allowed in file names
88 // Hey! The default wxPATH_NATIVE does not do as it should.
89#if defined(__WXMAC__)
90 wxPathFormat format = wxPATH_MAC;
91#elif defined(__WXGTK__)
92 wxPathFormat format = wxPATH_UNIX;
93#elif defined(__WXMSW__)
94 wxPathFormat format = wxPATH_WIN;
95#endif
96
97 // This is supposed to return characters not permitted in paths to files
98 // or to directories
99 auto forbid = wxFileName::GetForbiddenChars(format);
100
101 for (auto cc: forbid) {
102#if defined(__WXGTK__)
103 if (cc == wxT('*') || cc == wxT('?')) {
104 continue;
105 }
106#endif
107 exclude.push_back(wxString{ cc });
108 }
109
110 // The path separators may not be forbidden, so add them
111 //auto separators = wxFileName::GetPathSeparators(format);
112
113 // Bug 1441 exclude all separators from filenames on all platforms.
114 auto separators = wxString("\\/");
115
116 for(auto cc: separators) {
117 if (forbid.Find(cc) == wxNOT_FOUND)
118 exclude.push_back(wxString{ cc });
119 }
120}
int format
Definition: ExportPCM.cpp:56

References exclude, format, and mDecimalSeparator.

Referenced by Languages::SetLang().

Here is the caller graph for this function:

◆ SanitiseFilename()

bool Internat::SanitiseFilename ( wxString &  name,
const wxString &  sub 
)
static

Check a proposed file name string for illegal characters and remove them return true iff name is "visibly" changed (not necessarily equivalent to character-wise changed)

Definition at line 240 of file Internat.cpp.

241{
242 bool result = false;
243 for(const auto &item : exclude)
244 {
245 if(name.Contains(item))
246 {
247 name.Replace(item, sub);
248 result = true;
249 }
250 }
251
252#ifdef __WXMAC__
253 // Special Mac stuff
254 // '/' is permitted in file names as seen in dialogs, even though it is
255 // the path separator. The "real" filename as seen in the terminal has ':'.
256 // Do NOT return true if this is the only substitution.
257 name.Replace(wxT("/"), wxT(":"));
258#endif
259
260 return result;
261}
const TranslatableString name
Definition: Distortion.cpp:82

References exclude, and name.

Referenced by ExportMultipleDialog::MakeFileName().

Here is the caller graph for this function:

◆ SetCeeNumberFormat()

void Internat::SetCeeNumberFormat ( )
static

Definition at line 122 of file Internat.cpp.

123{
124 wxSetlocale( LC_NUMERIC, "C" );
125 mDecimalSeparator = '.';
126}

References mDecimalSeparator.

Referenced by GUISettings::SetLang().

Here is the caller graph for this function:

◆ ToDisplayString()

wxString Internat::ToDisplayString ( double  numberToConvert,
int  digitsAfterDecimalPoint = -1 
)
static

Convert a number to a string, uses the user's locale's decimal separator.

Definition at line 162 of file Internat.cpp.

164{
165 wxString decSep = wxString(GetDecimalSeparator());
166 wxString result;
167
168 if (digitsAfterDecimalPoint == -1)
169 {
170 result.Printf(wxT("%f"), numberToConvert);
171
172 // Not all libcs respect the decimal separator, so always convert
173 // any dots found to the decimal separator.
174 result.Replace(wxT("."), decSep);
175
176 if (result.Find(decSep) != -1)
177 {
178 // Strip trailing zeros, but leave one, and decimal separator.
179 int pos = result.length() - 1;
180 while ((pos > 1) &&
181 (result.GetChar(pos) == wxT('0')) &&
182 (result.GetChar(pos - 1) != decSep))
183 pos--;
184 // (Previous code removed all of them and decimal separator.)
185 // if (result.GetChar(pos) == decSep)
186 // pos--; // strip point before empty fractional part
187 result = result.Left(pos+1);
188 }
189 }
190 else
191 {
192 wxString format;
193 format.Printf(wxT("%%.%if"), digitsAfterDecimalPoint);
194 result.Printf(format, numberToConvert);
195
196 // Not all libcs respect the decimal separator, so always convert
197 // any dots found to the decimal separator
198 result.Replace(wxT("."), decSep);
199 }
200
201 return result;
202}

References format, and GetDecimalSeparator().

Referenced by LV2Effect::BuildPlain(), FormatSize(), EffectAutoDuck::Panel::OnPaint(), LadspaEffect::Validator::OnSlider(), VampEffect::PopulateOrExchange(), LadspaEffect::Validator::PopulateUI(), LadspaEffect::Validator::RefreshControls(), and ToString().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ToString()

wxString Internat::ToString ( double  numberToConvert,
int  digitsAfterDecimalPoint = -1 
)
static

Convert a number to a string, always uses the dot as decimal separator.

Definition at line 151 of file Internat.cpp.

153{
154 wxString result = ToDisplayString(
155 numberToConvert, digitsAfterDecimalPoint);
156
157 result.Replace(wxString(GetDecimalSeparator()), wxT("."));
158
159 return result;
160}

References GetDecimalSeparator(), and ToDisplayString().

Referenced by LabelStruct::Export(), Sequence::HandleXMLEndTag(), Sequence::Paste(), NyquistEffect::Process(), NyquistEffect::ProcessOne(), XMLWriter::WriteAttr(), and Sequence::WriteXML().

Here is the call graph for this function:
Here is the caller graph for this function:

Member Data Documentation

◆ exclude

wxArrayString Internat::exclude
staticprivate

Definition at line 155 of file Internat.h.

Referenced by Init(), and SanitiseFilename().

◆ mDecimalSeparator

wxChar Internat::mDecimalSeparator = wxT('.')
staticprivate

Definition at line 153 of file Internat.h.

Referenced by GetDecimalSeparator(), Init(), and SetCeeNumberFormat().


The documentation for this class was generated from the following files: