12 #include <QApplication>
13 #include <QTranslator>
22 #include <QModelIndexList>
28 const QString
LCLowercase = QStringLiteral (
"leechcraft");
33 buf.open (QIODevice::ReadWrite);
34 const auto compression = 100;
35 pix.save (&buf,
"PNG", compression);
36 return QStringLiteral (
"data:image/png;base64,") + buf.buffer ().toBase64 ();
41 QString MakePrettySizeWith (qint64 sourceSize,
const QStringList& units)
44 long double size = sourceSize;
46 for (; strNum < 3 && size >= 1024; ++strNum, size /= 1024)
49 return QString::number (size,
'f', 1) + units.value (strNum);
55 static QStringList units
63 return MakePrettySizeWith (sourcesize, units);
68 static const QStringList units
70 QObject::tr (
"b",
"Short one-character unit for bytes."),
71 QObject::tr (
"K",
"Short one-character unit for kilobytes."),
72 QObject::tr (
"M",
"Short one-character unit for megabytes."),
73 QObject::tr (
"G",
"Short one-character unit for gigabytes.")
76 return MakePrettySizeWith (sourcesize, units);
81 const auto secsPerDay = 86400;
82 int d = time / secsPerDay;
83 time -= d * secsPerDay;
86 result += QObject::tr (
"%n day(s), ",
"", d);
87 result += QTime (0, 0, 0).addSecs (time).toString ();
92 const QString& localeName,
93 const QString& prefix,
94 const QString& appName)
96 auto filename = prefix;
97 filename.append (
"_");
98 if (!baseName.isEmpty ())
99 filename.append (baseName).append (
"_");
100 filename.append (localeName);
102 auto transl =
new QTranslator;
105 if (transl->load (filename,
":/") ||
106 transl->load (filename,
107 QCoreApplication::applicationDirPath () +
"/translations"))
108 #elif defined (Q_OS_MAC) && !defined (USE_UNIX_LAYOUT)
110 if (transl->load (filename,
":/") ||
111 transl->load (filename,
112 QCoreApplication::applicationDirPath () +
"/../Resources/translations"))
113 #elif defined (INSTALL_PREFIX)
114 if (transl->load (filename,
":/") ||
115 transl->load (filename,
116 QString (INSTALL_PREFIX
"/share/%1/translations").arg (appName)))
118 if (transl->load (filename,
":/") ||
119 transl->load (filename,
120 QString (
"/usr/local/share/%1/translations").arg (appName)) ||
121 transl->load (filename,
122 QString (
"/usr/share/%1/translations").arg (appName)))
132 const QString& prefix,
133 const QString& appName)
136 if (
auto transl =
LoadTranslator (baseName, localeName, prefix, appName))
138 QCoreApplication::installTranslator (transl);
142 qWarning () << Q_FUNC_INFO
143 <<
"could not load translation file for locale"
153 QSettings settings (QCoreApplication::organizationName (),
154 QCoreApplication::applicationName ());
155 QString localeName = settings.value (QStringLiteral (
"Language"), QStringLiteral (
"system")).toString ();
157 if (localeName ==
"system"_ql)
159 const auto localeLen = 5;
160 localeName = qEnvironmentVariable (
"LANG").left (localeLen);
162 if (localeName ==
"C"_ql || localeName.isEmpty ())
163 localeName = QStringLiteral (
"en_US");
165 if (localeName.isEmpty () || localeName.size () != localeLen)
166 localeName = QLocale::system ().name ().left (localeLen);
169 if (localeName.size () == 2)
171 auto lang = QLocale (localeName).language ();
172 const auto& cs = QLocale::countriesForLanguage (lang);
174 localeName +=
"_00"_ql;
176 localeName = QLocale (lang, cs.at (0)).name ();
184 if (locale.language () == QLocale::AnyLanguage)
185 return QStringLiteral (
"*");
187 auto locStr = locale.name ();
188 locStr.replace (
'_',
'-');
199 const auto senderAct = qobject_cast<QAction*> (sender);
204 QDebug d (&debugString);
205 d <<
"sender is not a QAction*"
208 throw std::runtime_error (qPrintable (debugString));
216 const auto result =
new QAction (parent);
217 result->setSeparator (
true);