12#include <QApplication>
21#include <QModelIndexList>
32 buf.open (QIODevice::ReadWrite);
33 const auto compression = 100;
34 pix.save (&buf,
"PNG", compression);
35 return QStringLiteral (
"data:image/png;base64,") + buf.buffer ().toBase64 ();
40 QString MakePrettySizeWith (qint64 sourceSize,
const QStringList& units,
const QString& space)
43 long double size = sourceSize;
45 for (; strNum < 3 && size >= 1024; ++strNum, size /= 1024)
48 return GetLocale ().toString (
static_cast<double> (size),
'f', 1) + space + units.value (strNum);
54 static QStringList units
56 QObject::tr (
"B",
"The unit for bytes."),
57 QObject::tr (
"KiB",
"The unit for kilobytes."),
58 QObject::tr (
"MiB",
"The unit for megabytes."),
59 QObject::tr (
"GiB",
"The unit for gigabytes.")
62 return MakePrettySizeWith (sourcesize, units,
" "_qs);
67 static const QStringList units
69 QObject::tr (
"B",
"Short one-character unit for bytes."),
70 QObject::tr (
"K",
"Short one-character unit for kilobytes."),
71 QObject::tr (
"M",
"Short one-character unit for megabytes."),
72 QObject::tr (
"G",
"Short one-character unit for gigabytes.")
75 return MakePrettySizeWith (sourcesize, units, {});
80 const auto secsPerDay = 86400;
81 int d = time / secsPerDay;
82 time -= d * secsPerDay;
85 result += QObject::tr (
"%n day(s), ",
"", d);
86 result += QTime (0, 0, 0).addSecs (time).toString ();
91 const QString& localeName,
92 const QString& prefix,
93 const QString& appName)
95 auto filename = prefix;
96 filename.append (
"_");
97 if (!baseName.isEmpty ())
98 filename.append (baseName).append (
"_");
99 filename.append (localeName);
101 auto transl =
new QTranslator;
104 if (transl->load (filename,
":/") ||
105 transl->load (filename,
106 QCoreApplication::applicationDirPath () +
"/translations"))
107 #elif defined (Q_OS_MAC) && !defined (USE_UNIX_LAYOUT)
109 if (transl->load (filename,
":/") ||
110 transl->load (filename,
111 QCoreApplication::applicationDirPath () +
"/../Resources/translations"))
112 #elif defined (INSTALL_PREFIX)
113 if (transl->load (filename,
":/") ||
114 transl->load (filename,
115 QString (INSTALL_PREFIX
"/share/%1/translations").arg (appName)))
117 if (transl->load (filename,
":/") ||
118 transl->load (filename,
119 QString (
"/usr/local/share/%1/translations").arg (appName)) ||
120 transl->load (filename,
121 QString (
"/usr/share/%1/translations").arg (appName)))
131 const QString& prefix,
132 const QString& appName)
135 if (
auto transl =
LoadTranslator (baseName, localeName, prefix, appName))
137 QCoreApplication::installTranslator (transl);
141 qWarning () << Q_FUNC_INFO
142 <<
"could not load translation file for locale"
152 const QSettings settings { QCoreApplication::organizationName (), QCoreApplication::applicationName () };
153 const auto& localeName = settings.value (
"Language"_qs,
"system"_qs).toString ();
154 if (localeName ==
"system"_ql)
157 QLocale locale { localeName };
158 if (locale.language () == QLocale::AnyLanguage)
160 qWarning () <<
"unable to parse" << localeName;
173 if (locale.language () == QLocale::AnyLanguage)
174 return QStringLiteral (
"*");
176 auto locStr = locale.name ();
177 locStr.replace (
'_',
'-');
188 const auto result =
new QAction (parent);
189 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.
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.
const QString LCLowercase
The "leechcraft" literal, with no run-time overhead.
QString MakePrettySize(qint64 sourcesize)
Makes a formatted size from number.
QTranslator * InstallTranslator(const QString &baseName, const QString &prefix, const QString &appName)
Loads and installs a translator.
QString GetInternetLocaleName(const QLocale &locale)