12#include <QApplication>
22#include <QModelIndexList>
31 buf.open (QIODevice::ReadWrite);
32 const auto compression = 100;
33 pix.save (&buf,
"PNG", compression);
34 return QStringLiteral (
"data:image/png;base64,") + buf.buffer ().toBase64 ();
39 QString MakePrettySizeWith (qint64 sourceSize,
const QStringList& units)
42 long double size = sourceSize;
44 for (; strNum < 3 && size >= 1024; ++strNum, size /= 1024)
47 return QString::number (size,
'f', 1) + units.value (strNum);
53 static QStringList units
61 return MakePrettySizeWith (sourcesize, units);
66 static const QStringList units
68 QObject::tr (
"b",
"Short one-character unit for bytes."),
69 QObject::tr (
"K",
"Short one-character unit for kilobytes."),
70 QObject::tr (
"M",
"Short one-character unit for megabytes."),
71 QObject::tr (
"G",
"Short one-character unit for gigabytes.")
74 return MakePrettySizeWith (sourcesize, units);
79 const auto secsPerDay = 86400;
80 int d = time / secsPerDay;
81 time -= d * secsPerDay;
84 result += QObject::tr (
"%n day(s), ",
"", d);
85 result += QTime (0, 0, 0).addSecs (time).toString ();
90 const QString& localeName,
91 const QString& prefix,
92 const QString& appName)
94 auto filename = prefix;
95 filename.append (
"_");
96 if (!baseName.isEmpty ())
97 filename.append (baseName).append (
"_");
98 filename.append (localeName);
100 auto transl =
new QTranslator;
103 if (transl->load (filename,
":/") ||
104 transl->load (filename,
105 QCoreApplication::applicationDirPath () +
"/translations"))
106 #elif defined (Q_OS_MAC) && !defined (USE_UNIX_LAYOUT)
108 if (transl->load (filename,
":/") ||
109 transl->load (filename,
110 QCoreApplication::applicationDirPath () +
"/../Resources/translations"))
111 #elif defined (INSTALL_PREFIX)
112 if (transl->load (filename,
":/") ||
113 transl->load (filename,
114 QString (INSTALL_PREFIX
"/share/%1/translations").arg (appName)))
116 if (transl->load (filename,
":/") ||
117 transl->load (filename,
118 QString (
"/usr/local/share/%1/translations").arg (appName)) ||
119 transl->load (filename,
120 QString (
"/usr/share/%1/translations").arg (appName)))
130 const QString& prefix,
131 const QString& appName)
134 if (
auto transl =
LoadTranslator (baseName, localeName, prefix, appName))
136 QCoreApplication::installTranslator (transl);
140 qWarning () << Q_FUNC_INFO
141 <<
"could not load translation file for locale"
151 QSettings settings (QCoreApplication::organizationName (),
152 QCoreApplication::applicationName ());
153 QString localeName = settings.value (QStringLiteral (
"Language"), QStringLiteral (
"system")).toString ();
155 if (localeName ==
"system"_ql)
157 const auto localeLen = 5;
158 localeName = qEnvironmentVariable (
"LANG").left (localeLen);
160 if (localeName ==
"C"_ql || localeName.isEmpty ())
161 localeName = QStringLiteral (
"en_US");
163 if (localeName.isEmpty () || localeName.size () != localeLen)
164 localeName = QLocale::system ().name ().left (localeLen);
167 if (localeName.size () == 2)
169 auto lang = QLocale (localeName).language ();
170 const auto& cs = QLocale::countriesForLanguage (lang);
172 localeName +=
"_00"_ql;
174 localeName = QLocale (lang, cs.at (0)).name ();
182 if (locale.language () == QLocale::AnyLanguage)
183 return QStringLiteral (
"*");
185 auto locStr = locale.name ();
186 locStr.replace (
'_',
'-');
197 const auto senderAct = qobject_cast<QAction*> (sender);
202 QDebug d (&debugString);
203 d <<
"sender is not a QAction*"
206 throw std::runtime_error (qPrintable (debugString));
214 const auto result =
new QAction (parent);
215 result->setSeparator (
true);
QString MakePrettySizeShort(qint64 sourcesize)
Converts a bytes count to a string representation with appropriately chosen units.
QString GetLocaleName()
Returns the current locale name, like en_US.
QTranslator * LoadTranslator(const QString &baseName, const QString &localeName, const QString &prefix, const QString &appName)
QString MakeTimeFromLong(ulong time)
Makes a formatted time from number.
QModelIndexList GetSummarySelectedRows(QObject *sender)
QTranslator * InstallTranslator(const QString &baseName, const QString &prefix, const QString &appName)
Loads and installs a translator.
QString GetAsBase64Src(const QImage &pix)
Returns the given image in a Base64-encoded form.
QString GetLanguage()
Returns the current language name.
QAction * CreateSeparator(QObject *parent)
Returns the action that is set to act as a separator.
QString MakePrettySize(qint64 sourcesize)
Makes a formatted size from number.
QString GetInternetLocaleName(const QLocale &locale)