aboutsummaryrefslogtreecommitdiff
path: root/launcher/translations
diff options
context:
space:
mode:
authorTrial97 <alexandru.tripon97@gmail.com>2023-08-15 12:16:00 +0300
committerTrial97 <alexandru.tripon97@gmail.com>2023-08-15 12:16:00 +0300
commitc94ee67077076fdfb3ad04e93a0de2ae32b6a4e5 (patch)
tree437dec3be224cae5e229eeaa4ac9ebeedffd03e3 /launcher/translations
parent019e5ca3e819f5daf9933bc0fb091784b0ca561f (diff)
parent8f5bb982cd27dd9158b63d826769c168455a139b (diff)
downloadPrismLauncher-c94ee67077076fdfb3ad04e93a0de2ae32b6a4e5.tar.gz
PrismLauncher-c94ee67077076fdfb3ad04e93a0de2ae32b6a4e5.tar.bz2
PrismLauncher-c94ee67077076fdfb3ad04e93a0de2ae32b6a4e5.zip
Merge branch 'develop' of https://github.com/PrismLauncher/PrismLauncher into curseforge-url-handle3
Signed-off-by: Trial97 <alexandru.tripon97@gmail.com>
Diffstat (limited to 'launcher/translations')
-rw-r--r--launcher/translations/POTranslator.cpp188
-rw-r--r--launcher/translations/POTranslator.h14
-rw-r--r--launcher/translations/TranslationsModel.cpp403
3 files changed, 202 insertions, 403 deletions
diff --git a/launcher/translations/POTranslator.cpp b/launcher/translations/POTranslator.cpp
index c77ae45d..51ef4852 100644
--- a/launcher/translations/POTranslator.cpp
+++ b/launcher/translations/POTranslator.cpp
@@ -3,14 +3,12 @@
#include <QDebug>
#include "FileSystem.h"
-struct POEntry
-{
+struct POEntry {
QString text;
bool fuzzy;
};
-struct POTranslatorPrivate
-{
+struct POTranslatorPrivate {
QString filename;
QHash<QByteArray, POEntry> mapping;
QHash<QByteArray, POEntry> mapping_disambiguatrion;
@@ -19,47 +17,37 @@ struct POTranslatorPrivate
void reload();
};
-class ParserArray : public QByteArray
-{
-public:
- ParserArray(const QByteArray &in) : QByteArray(in)
- {
- }
- bool chomp(const char * data, int length)
+class ParserArray : public QByteArray {
+ public:
+ ParserArray(const QByteArray& in) : QByteArray(in) {}
+ bool chomp(const char* data, int length)
{
- if(startsWith(data))
- {
+ if (startsWith(data)) {
remove(0, length);
return true;
}
return false;
}
- bool chompString(QByteArray & appendHere)
+ bool chompString(QByteArray& appendHere)
{
QByteArray msg;
bool escape = false;
- if(size() < 2)
- {
+ if (size() < 2) {
qDebug() << "String fragment is too short";
return false;
}
- if(!startsWith('"'))
- {
+ if (!startsWith('"')) {
qDebug() << "String fragment does not start with \"";
return false;
}
- if(!endsWith('"'))
- {
+ if (!endsWith('"')) {
qDebug() << "String fragment does not end with \", instead, there is" << at(size() - 1);
return false;
}
- for(int i = 1; i < size() - 1; i++)
- {
+ for (int i = 1; i < size() - 1; i++) {
char c = operator[](i);
- if(escape)
- {
- switch(c)
- {
+ if (escape) {
+ switch (c) {
case 'r':
msg += '\r';
break;
@@ -94,14 +82,11 @@ public:
case '4':
case '5':
case '6':
- case '7':
- {
+ case '7': {
int octal_start = i;
- while ((c = operator[](i)) >= '0' && c <= '7')
- {
+ while ((c = operator[](i)) >= '0' && c <= '7') {
i++;
- if (i == length() - 1)
- {
+ if (i == length() - 1) {
qDebug() << "Something went bad while parsing an octal escape string...";
return false;
}
@@ -109,16 +94,13 @@ public:
msg += mid(octal_start, i - octal_start).toUInt(0, 8);
break;
}
- case 'x':
- {
+ case 'x': {
// chomp the 'x'
i++;
int hex_start = i;
- while (isxdigit(operator[](i)))
- {
+ while (isxdigit(operator[](i))) {
i++;
- if (i == length() - 1)
- {
+ if (i == length() - 1) {
qDebug() << "Something went bad while parsing a hex escape string...";
return false;
}
@@ -126,25 +108,19 @@ public:
msg += mid(hex_start, i - hex_start).toUInt(0, 16);
break;
}
- default:
- {
+ default: {
qDebug() << "Invalid escape sequence character:" << c;
return false;
}
}
escape = false;
- }
- else if(c == '\\')
- {
+ } else if (c == '\\') {
escape = true;
- }
- else
- {
+ } else {
msg += c;
}
}
- if(escape)
- {
+ if (escape) {
qDebug() << "Unterminated escape sequence...";
return false;
}
@@ -156,8 +132,7 @@ public:
void POTranslatorPrivate::reload()
{
QFile file(filename);
- if(!file.open(QFile::OpenMode::enum_type::ReadOnly | QFile::OpenMode::enum_type::Text))
- {
+ if (!file.open(QFile::OpenMode::enum_type::ReadOnly | QFile::OpenMode::enum_type::Text)) {
qDebug() << "Failed to open PO file:" << filename;
return;
}
@@ -169,13 +144,7 @@ void POTranslatorPrivate::reload()
bool fuzzy = false;
bool nextFuzzy = false;
- enum class Mode
- {
- First,
- MessageContext,
- MessageId,
- MessageString
- } mode = Mode::First;
+ enum class Mode { First, MessageContext, MessageId, MessageString } mode = Mode::First;
int lineNumber = 0;
QHash<QByteArray, POEntry> newMapping;
@@ -183,14 +152,12 @@ void POTranslatorPrivate::reload()
auto endEntry = [&]() {
auto strStr = QString::fromUtf8(str);
// NOTE: PO header has empty id. We skip it.
- if(!id.isEmpty())
- {
+ if (!id.isEmpty()) {
auto normalKey = context + "|" + id;
- newMapping.insert(normalKey, {strStr, fuzzy});
- if(!disambiguation.isEmpty())
- {
+ newMapping.insert(normalKey, { strStr, fuzzy });
+ if (!disambiguation.isEmpty()) {
auto disambiguationKey = context + "|" + id + "@" + disambiguation;
- newMapping_disambiguation.insert(disambiguationKey, {strStr, fuzzy});
+ newMapping_disambiguation.insert(disambiguationKey, { strStr, fuzzy });
}
}
context.clear();
@@ -200,36 +167,26 @@ void POTranslatorPrivate::reload()
fuzzy = nextFuzzy;
nextFuzzy = false;
};
- while (!file.atEnd())
- {
+ while (!file.atEnd()) {
ParserArray line = file.readLine();
- if(line.endsWith('\n'))
- {
+ if (line.endsWith('\n')) {
line.resize(line.size() - 1);
}
- if(line.endsWith('\r'))
- {
+ if (line.endsWith('\r')) {
line.resize(line.size() - 1);
}
- if(!line.size())
- {
+ if (!line.size()) {
// NIL
- }
- else if(line[0] == '#')
- {
- if(line.contains(", fuzzy"))
- {
+ } else if (line[0] == '#') {
+ if (line.contains(", fuzzy")) {
nextFuzzy = true;
}
- }
- else if(line.startsWith('"'))
- {
+ } else if (line.startsWith('"')) {
QByteArray temp;
- QByteArray *out = &temp;
+ QByteArray* out = &temp;
- switch(mode)
- {
+ switch (mode) {
case Mode::First:
qDebug() << "Unexpected escaped string during initial state... line:" << lineNumber;
return;
@@ -243,16 +200,12 @@ void POTranslatorPrivate::reload()
out = &id;
break;
}
- if(!line.chompString(*out))
- {
+ if (!line.chompString(*out)) {
qDebug() << "Badly formatted string on line:" << lineNumber;
return;
}
- }
- else if(line.chomp("msgctxt ", 8))
- {
- switch(mode)
- {
+ } else if (line.chomp("msgctxt ", 8)) {
+ switch (mode) {
case Mode::First:
break;
case Mode::MessageString:
@@ -263,21 +216,16 @@ void POTranslatorPrivate::reload()
qDebug() << "Unexpected msgctxt line:" << lineNumber;
return;
}
- if(line.chompString(context))
- {
+ if (line.chompString(context)) {
auto parts = context.split('|');
context = parts[0];
- if(parts.size() > 1 && !parts[1].isEmpty())
- {
+ if (parts.size() > 1 && !parts[1].isEmpty()) {
disambiguation = parts[1];
}
mode = Mode::MessageContext;
}
- }
- else if (line.chomp("msgid ", 6))
- {
- switch(mode)
- {
+ } else if (line.chomp("msgid ", 6)) {
+ switch (mode) {
case Mode::MessageContext:
case Mode::First:
break;
@@ -288,15 +236,11 @@ void POTranslatorPrivate::reload()
qDebug() << "Unexpected msgid line:" << lineNumber;
return;
}
- if(line.chompString(id))
- {
+ if (line.chompString(id)) {
mode = Mode::MessageId;
}
- }
- else if (line.chomp("msgstr ", 7))
- {
- switch(mode)
- {
+ } else if (line.chomp("msgstr ", 7)) {
+ switch (mode) {
case Mode::First:
case Mode::MessageString:
case Mode::MessageContext:
@@ -305,13 +249,10 @@ void POTranslatorPrivate::reload()
case Mode::MessageId:
break;
}
- if(line.chompString(str))
- {
+ if (line.chompString(str)) {
mode = Mode::MessageString;
}
- }
- else
- {
+ } else {
qDebug() << "I did not understand line: " << lineNumber << ":" << QString::fromUtf8(line);
}
lineNumber++;
@@ -334,21 +275,17 @@ POTranslator::~POTranslator()
delete d;
}
-QString POTranslator::translate(const char* context, const char* sourceText, const char* disambiguation, int n) const
+QString POTranslator::translate(const char* context, const char* sourceText, const char* disambiguation, [[maybe_unused]] int n) const
{
- if(disambiguation)
- {
+ if (disambiguation) {
auto disambiguationKey = QByteArray(context) + "|" + QByteArray(sourceText) + "@" + QByteArray(disambiguation);
auto iter = d->mapping_disambiguatrion.find(disambiguationKey);
- if(iter != d->mapping_disambiguatrion.end())
- {
- auto & entry = *iter;
- if(entry.text.isEmpty())
- {
+ if (iter != d->mapping_disambiguatrion.end()) {
+ auto& entry = *iter;
+ if (entry.text.isEmpty()) {
qDebug() << "Translation entry has no content:" << disambiguationKey;
}
- if(entry.fuzzy)
- {
+ if (entry.fuzzy) {
qDebug() << "Translation entry is fuzzy:" << disambiguationKey << "->" << entry.text;
}
return entry.text;
@@ -356,15 +293,12 @@ QString POTranslator::translate(const char* context, const char* sourceText, con
}
auto key = QByteArray(context) + "|" + QByteArray(sourceText);
auto iter = d->mapping.find(key);
- if(iter != d->mapping.end())
- {
- auto & entry = *iter;
- if(entry.text.isEmpty())
- {
+ if (iter != d->mapping.end()) {
+ auto& entry = *iter;
+ if (entry.text.isEmpty()) {
qDebug() << "Translation entry has no content:" << key;
}
- if(entry.fuzzy)
- {
+ if (entry.fuzzy) {
qDebug() << "Translation entry is fuzzy:" << key << "->" << entry.text;
}
return entry.text;
diff --git a/launcher/translations/POTranslator.h b/launcher/translations/POTranslator.h
index 1634018c..58451e45 100644
--- a/launcher/translations/POTranslator.h
+++ b/launcher/translations/POTranslator.h
@@ -4,14 +4,14 @@
struct POTranslatorPrivate;
-class POTranslator : public QTranslator
-{
+class POTranslator : public QTranslator {
Q_OBJECT
-public:
- explicit POTranslator(const QString& filename, QObject * parent = nullptr);
+ public:
+ explicit POTranslator(const QString& filename, QObject* parent = nullptr);
virtual ~POTranslator();
- QString translate(const char * context, const char * sourceText, const char * disambiguation, int n) const override;
+ QString translate(const char* context, const char* sourceText, const char* disambiguation, int n) const override;
bool isEmpty() const override;
-private:
- POTranslatorPrivate * d;
+
+ private:
+ POTranslatorPrivate* d;
};
diff --git a/launcher/translations/TranslationsModel.cpp b/launcher/translations/TranslationsModel.cpp
index 2763cca2..933fe2d3 100644
--- a/launcher/translations/TranslationsModel.cpp
+++ b/launcher/translations/TranslationsModel.cpp
@@ -1,6 +1,6 @@
// SPDX-License-Identifier: GPL-3.0-only
/*
- * PolyMC - Minecraft Launcher
+ * Prism Launcher - Minecraft Launcher
* Copyright (c) 2022 flowln <flowlnlnln@gmail.com>
* Copyright (C) 2022 Sefa Eyeoglu <contact@scrumplex.net>
*
@@ -37,18 +37,18 @@
#include "TranslationsModel.h"
#include <QCoreApplication>
-#include <QTranslator>
-#include <QLocale>
+#include <QDebug>
#include <QDir>
#include <QLibraryInfo>
-#include <QDebug>
+#include <QLocale>
+#include <QTranslator>
#include <locale>
-#include "FileSystem.h"
-#include "net/NetJob.h"
-#include "net/ChecksumValidator.h"
#include "BuildConfig.h"
+#include "FileSystem.h"
#include "Json.h"
+#include "net/ChecksumValidator.h"
+#include "net/NetJob.h"
#include "POTranslator.h"
@@ -56,50 +56,35 @@
const static QLatin1String defaultLangCode("en_US");
-enum class FileType
-{
- NONE,
- QM,
- PO
-};
+enum class FileType { NONE, QM, PO };
-struct Language
-{
- Language()
- {
- updated = true;
- }
- Language(const QString & _key)
+struct Language {
+ Language() { updated = true; }
+ Language(const QString& _key)
{
key = _key;
locale = QLocale(key);
updated = (key == defaultLangCode);
}
- QString languageName() const {
+ QString languageName() const
+ {
QString result;
- if(key == "ja_KANJI") {
+ if (key == "ja_KANJI") {
result = locale.nativeLanguageName() + u8" (漢字)";
- }
- else if(key == "es_UY") {
+ } else if (key == "es_UY") {
result = u8"español de Latinoamérica";
- }
- else if(key == "en_NZ") {
- result = u8"New Zealand English"; // No idea why qt translates this to just english and not to New Zealand English
- }
- else if(key == "en@pirate") {
+ } else if (key == "en_NZ") {
+ result = u8"New Zealand English"; // No idea why qt translates this to just english and not to New Zealand English
+ } else if (key == "en@pirate") {
result = u8"Tongue of the High Seas";
- }
- else if(key == "en@uwu") {
+ } else if (key == "en@uwu") {
result = u8"Cute Engwish";
- }
- else if(key == "tok") {
+ } else if (key == "tok") {
result = u8"toki pona";
- }
- else if(key == "nan") {
+ } else if (key == "nan") {
result = u8"閩南語"; // Using traditional Chinese script. Not sure if we should use simplified instead?
- }
- else {
+ } else {
result = locale.nativeLanguageName();
}
@@ -111,8 +96,7 @@ struct Language
float percentTranslated() const
{
- if (total == 0)
- {
+ if (total == 0) {
return 100.0f;
}
return 100.0f * float(translated) / float(total);
@@ -126,30 +110,17 @@ struct Language
total = translated + untranslated + fuzzy;
}
- bool isOfSameNameAs(const Language& other) const
- {
- return key == other.key;
- }
+ bool isOfSameNameAs(const Language& other) const { return key == other.key; }
bool isIdenticalTo(const Language& other) const
{
- return
- (
- key == other.key &&
- file_name == other.file_name &&
- file_size == other.file_size &&
- file_sha1 == other.file_sha1 &&
- translated == other.translated &&
- fuzzy == other.fuzzy &&
- total == other.fuzzy &&
- localFileType == other.localFileType
- );
- }
-
- Language & apply(Language & other)
+ return (key == other.key && file_name == other.file_name && file_size == other.file_size && file_sha1 == other.file_sha1 &&
+ translated == other.translated && fuzzy == other.fuzzy && total == other.fuzzy && localFileType == other.localFileType);
+ }
+
+ Language& apply(Language& other)
{
- if(!isOfSameNameAs(other))
- {
+ if (!isOfSameNameAs(other)) {
return *this;
}
file_name = other.file_name;
@@ -178,14 +149,11 @@ struct Language
FileType localFileType = FileType::NONE;
};
-
-
-struct TranslationsModel::Private
-{
+struct TranslationsModel::Private {
QDir m_dir;
// initial state is just english
- QVector<Language> m_languages = {Language (defaultLangCode)};
+ QVector<Language> m_languages = { Language(defaultLangCode) };
QString m_selectedLanguage = defaultLangCode;
std::unique_ptr<QTranslator> m_qt_translator;
@@ -198,7 +166,7 @@ struct TranslationsModel::Private
QString m_nextDownload;
std::unique_ptr<POTranslator> m_po_translator;
- QFileSystemWatcher *watcher;
+ QFileSystemWatcher* watcher;
const QString m_system_locale = QLocale::system().name();
const QString m_system_language = m_system_locale.split('_').front();
@@ -206,7 +174,7 @@ struct TranslationsModel::Private
bool no_language_set = false;
};
-TranslationsModel::TranslationsModel(QString path, QObject* parent): QAbstractListModel(parent)
+TranslationsModel::TranslationsModel(QString path, QObject* parent) : QAbstractListModel(parent)
{
d.reset(new Private);
d->m_dir.setPath(path);
@@ -218,15 +186,12 @@ TranslationsModel::TranslationsModel(QString path, QObject* parent): QAbstractLi
d->watcher->addPath(d->m_dir.canonicalPath());
}
-TranslationsModel::~TranslationsModel()
-{
-}
+TranslationsModel::~TranslationsModel() {}
void TranslationsModel::translationDirChanged(const QString& path)
{
qDebug() << "Dir changed:" << path;
- if (!d->no_language_set)
- {
+ if (!d->no_language_set) {
reloadLocalFiles();
}
selectLanguage(selectedLanguage());
@@ -237,126 +202,97 @@ void TranslationsModel::indexReceived()
qDebug() << "Got translations index!";
d->m_index_job.reset();
- if (d->no_language_set)
- {
+ if (d->no_language_set) {
reloadLocalFiles();
auto language = d->m_system_locale;
- if (!findLanguage(language))
- {
+ if (!findLanguage(language)) {
language = d->m_system_language;
}
selectLanguage(language);
- if (selectedLanguage() != defaultLangCode)
- {
+ if (selectedLanguage() != defaultLangCode) {
updateLanguage(selectedLanguage());
}
APPLICATION->settings()->set("Language", selectedLanguage());
d->no_language_set = false;
}
- else if(d->m_selectedLanguage != defaultLangCode)
- {
+ else if (d->m_selectedLanguage != defaultLangCode) {
downloadTranslation(d->m_selectedLanguage);
}
}
namespace {
-void readIndex(const QString & path, QMap<QString, Language>& languages)
+void readIndex(const QString& path, QMap<QString, Language>& languages)
{
QByteArray data;
- try
- {
+ try {
data = FS::read(path);
- }
- catch (const Exception &e)
- {
+ } catch ([[maybe_unused]] const Exception& e) {
qCritical() << "Translations Download Failed: index file not readable";
return;
}
- int index = 1;
- try
- {
+ try {
auto toplevel_doc = Json::requireDocument(data);
auto doc = Json::requireObject(toplevel_doc);
auto file_type = Json::requireString(doc, "file_type");
- if(file_type != "MMC-TRANSLATION-INDEX")
- {
+ if (file_type != "MMC-TRANSLATION-INDEX") {
qCritical() << "Translations Download Failed: index file is of unknown file type" << file_type;
return;
}
auto version = Json::requireInteger(doc, "version");
- if(version > 2)
- {
+ if (version > 2) {
qCritical() << "Translations Download Failed: index file is of unknown format version" << file_type;
return;
}
auto langObjs = Json::requireObject(doc, "languages");
- for(auto iter = langObjs.begin(); iter != langObjs.end(); iter++)
- {
+ for (auto iter = langObjs.begin(); iter != langObjs.end(); iter++) {
Language lang(iter.key());
- auto langObj = Json::requireObject(iter.value());
- lang.setTranslationStats(
- Json::ensureInteger(langObj, "translated", 0),
- Json::ensureInteger(langObj, "untranslated", 0),
- Json::ensureInteger(langObj, "fuzzy", 0)
- );
+ auto langObj = Json::requireObject(iter.value());
+ lang.setTranslationStats(Json::ensureInteger(langObj, "translated", 0), Json::ensureInteger(langObj, "untranslated", 0),
+ Json::ensureInteger(langObj, "fuzzy", 0));
lang.file_name = Json::requireString(langObj, "file");
lang.file_sha1 = Json::requireString(langObj, "sha1");
lang.file_size = Json::requireInteger(langObj, "size");
languages.insert(lang.key, lang);
- index++;
}
- }
- catch (Json::JsonException & e)
- {
+ } catch ([[maybe_unused]] Json::JsonException& e) {
qCritical() << "Translations Download Failed: index file could not be parsed as json";
}
}
-}
+} // namespace
void TranslationsModel::reloadLocalFiles()
{
- QMap<QString, Language> languages = {{defaultLangCode, Language(defaultLangCode)}};
+ QMap<QString, Language> languages = { { defaultLangCode, Language(defaultLangCode) } };
readIndex(d->m_dir.absoluteFilePath("index_v2.json"), languages);
- auto entries = d->m_dir.entryInfoList({"mmc_*.qm", "*.po"}, QDir::Files | QDir::NoDotAndDotDot);
- for(auto & entry: entries)
- {
+ auto entries = d->m_dir.entryInfoList({ "mmc_*.qm", "*.po" }, QDir::Files | QDir::NoDotAndDotDot);
+ for (auto& entry : entries) {
auto completeSuffix = entry.completeSuffix();
QString langCode;
FileType fileType = FileType::NONE;
- if(completeSuffix == "qm")
- {
- langCode = entry.baseName().remove(0,4);
+ if (completeSuffix == "qm") {
+ langCode = entry.baseName().remove(0, 4);
fileType = FileType::QM;
- }
- else if(completeSuffix == "po")
- {
+ } else if (completeSuffix == "po") {
langCode = entry.baseName();
fileType = FileType::PO;
- }
- else
- {
+ } else {
continue;
}
auto langIter = languages.find(langCode);
- if(langIter != languages.end())
- {
- auto & language = *langIter;
- if(int(fileType) > int(language.localFileType))
- {
+ if (langIter != languages.end()) {
+ auto& language = *langIter;
+ if (int(fileType) > int(language.localFileType)) {
language.localFileType = fileType;
}
- }
- else
- {
- if(fileType == FileType::PO)
- {
+ } else {
+ if (fileType == FileType::PO) {
Language localFound(langCode);
localFound.localFileType = FileType::PO;
languages.insert(langCode, localFound);
@@ -365,52 +301,40 @@ void TranslationsModel::reloadLocalFiles()
}
// changed and removed languages
- for(auto iter = d->m_languages.begin(); iter != d->m_languages.end();)
- {
- auto &language = *iter;
+ for (auto iter = d->m_languages.begin(); iter != d->m_languages.end();) {
+ auto& language = *iter;
auto row = iter - d->m_languages.begin();
auto updatedLanguageIter = languages.find(language.key);
- if(updatedLanguageIter != languages.end())
- {
- if(language.isIdenticalTo(*updatedLanguageIter))
- {
+ if (updatedLanguageIter != languages.end()) {
+ if (language.isIdenticalTo(*updatedLanguageIter)) {
languages.remove(language.key);
- }
- else
- {
+ } else {
language.apply(*updatedLanguageIter);
emit dataChanged(index(row), index(row));
languages.remove(language.key);
}
iter++;
- }
- else
- {
+ } else {
beginRemoveRows(QModelIndex(), row, row);
iter = d->m_languages.erase(iter);
endRemoveRows();
}
}
// added languages
- if(languages.isEmpty())
- {
+ if (languages.isEmpty()) {
return;
}
beginInsertRows(QModelIndex(), 0, d->m_languages.size() + languages.size() - 1);
- for(auto & language: languages)
- {
+ for (auto& language : languages) {
d->m_languages.append(language);
}
std::sort(d->m_languages.begin(), d->m_languages.end(), [this](const Language& a, const Language& b) {
- if (a.key != b.key)
- {
- if (a.key == d->m_system_locale || a.key == d->m_system_language)
- {
+ if (a.key != b.key) {
+ if (a.key == d->m_system_locale || a.key == d->m_system_language) {
return true;
}
- if (b.key == d->m_system_locale || b.key == d->m_system_language)
- {
+ if (b.key == d->m_system_locale || b.key == d->m_system_language) {
return false;
}
}
@@ -420,14 +344,9 @@ void TranslationsModel::reloadLocalFiles()
}
namespace {
-enum class Column
-{
- Language,
- Completeness
-};
+enum class Column { Language, Completeness };
}
-
QVariant TranslationsModel::data(const QModelIndex& index, int role) const
{
if (!index.isValid())
@@ -439,62 +358,48 @@ QVariant TranslationsModel::data(const QModelIndex& index, int role) const
if (row < 0 || row >= d->m_languages.size())
return QVariant();
- auto & lang = d->m_languages[row];
- switch (role)
- {
- case Qt::DisplayRole:
- {
- switch(column)
- {
- case Column::Language:
- {
- return lang.languageName();
- }
- case Column::Completeness:
- {
- return QString("%1%").arg(lang.percentTranslated(), 3, 'f', 1);
+ auto& lang = d->m_languages[row];
+ switch (role) {
+ case Qt::DisplayRole: {
+ switch (column) {
+ case Column::Language: {
+ return lang.languageName();
+ }
+ case Column::Completeness: {
+ return QString("%1%").arg(lang.percentTranslated(), 3, 'f', 1);
+ }
}
+ qWarning("TranslationModel::data not implemented when role is DisplayRole");
}
- qWarning("TranslationModel::data not implemented when role is DisplayRole");
- }
- case Qt::ToolTipRole:
- {
- return tr("%1:\n%2 translated\n%3 fuzzy\n%4 total").arg(lang.key, QString::number(lang.translated), QString::number(lang.fuzzy), QString::number(lang.total));
- }
- case Qt::UserRole:
- return lang.key;
- default:
- return QVariant();
+ case Qt::ToolTipRole: {
+ return tr("%1:\n%2 translated\n%3 fuzzy\n%4 total")
+ .arg(lang.key, QString::number(lang.translated), QString::number(lang.fuzzy), QString::number(lang.total));
+ }
+ case Qt::UserRole:
+ return lang.key;
+ default:
+ return QVariant();
}
}
QVariant TranslationsModel::headerData(int section, Qt::Orientation orientation, int role) const
{
auto column = static_cast<Column>(section);
- if(role == Qt::DisplayRole)
- {
- switch(column)
- {
- case Column::Language:
- {
+ if (role == Qt::DisplayRole) {
+ switch (column) {
+ case Column::Language: {
return tr("Language");
}
- case Column::Completeness:
- {
+ case Column::Completeness: {
return tr("Completeness");
}
}
- }
- else if(role == Qt::ToolTipRole)
- {
- switch(column)
- {
- case Column::Language:
- {
+ } else if (role == Qt::ToolTipRole) {
+ switch (column) {
+ case Column::Language: {
return tr("The native language name.");
}
- case Column::Completeness:
- {
+ case Column::Completeness: {
return tr("Completeness is the percentage of fully translated strings, not counting automatically guessed ones.");
}
}
@@ -502,28 +407,22 @@ QVariant TranslationsModel::headerData(int section, Qt::Orientation orientation,
return QAbstractListModel::headerData(section, orientation, role);
}
-int TranslationsModel::rowCount(const QModelIndex& parent) const
+int TranslationsModel::rowCount([[maybe_unused]] const QModelIndex& parent) const
{
return d->m_languages.size();
}
-int TranslationsModel::columnCount(const QModelIndex& parent) const
+int TranslationsModel::columnCount([[maybe_unused]] const QModelIndex& parent) const
{
return 2;
}
-Language * TranslationsModel::findLanguage(const QString& key)
+Language* TranslationsModel::findLanguage(const QString& key)
{
- auto found = std::find_if(d->m_languages.begin(), d->m_languages.end(), [&](Language & lang)
- {
- return lang.key == key;
- });
- if(found == d->m_languages.end())
- {
+ auto found = std::find_if(d->m_languages.begin(), d->m_languages.end(), [&](Language& lang) { return lang.key == key; });
+ if (found == d->m_languages.end()) {
return nullptr;
- }
- else
- {
+ } else {
return found;
}
}
@@ -568,10 +467,8 @@ bool TranslationsModel::selectLanguage(QString key)
QLocale::setDefault(
QLocale(APPLICATION->settings()->get("UseSystemLocale").toBool() ? QString::fromStdString(std::locale().name()) : langCode));
-
// if it's the default UI language, finish
- if(langCode == defaultLangCode)
- {
+ if (langCode == defaultLangCode) {
d->m_selectedLanguage = langCode;
return true;
}
@@ -580,70 +477,47 @@ bool TranslationsModel::selectLanguage(QString key)
bool successful = false;
// FIXME: this is likely never present. FIX IT.
d->m_qt_translator.reset(new QTranslator());
- if (d->m_qt_translator->load("qt_" + langCode, QLibraryInfo::location(QLibraryInfo::TranslationsPath)))
- {
+ if (d->m_qt_translator->load("qt_" + langCode, QLibraryInfo::location(QLibraryInfo::TranslationsPath))) {
qDebug() << "Loading Qt Language File for" << langCode.toLocal8Bit().constData() << "...";
- if (!QCoreApplication::installTranslator(d->m_qt_translator.get()))
- {
+ if (!QCoreApplication::installTranslator(d->m_qt_translator.get())) {
qCritical() << "Loading Qt Language File failed.";
d->m_qt_translator.reset();
- }
- else
- {
+ } else {
successful = true;
}
- }
- else
- {
+ } else {
d->m_qt_translator.reset();
}
- if(langPtr->localFileType == FileType::PO)
- {
+ if (langPtr->localFileType == FileType::PO) {
qDebug() << "Loading Application Language File for" << langCode.toLocal8Bit().constData() << "...";
auto poTranslator = new POTranslator(FS::PathCombine(d->m_dir.path(), langCode + ".po"));
- if(!poTranslator->isEmpty())
- {
- if (!QCoreApplication::installTranslator(poTranslator))
- {
+ if (!poTranslator->isEmpty()) {
+ if (!QCoreApplication::installTranslator(poTranslator)) {
delete poTranslator;
qCritical() << "Installing Application Language File failed.";
- }
- else
- {
+ } else {
d->m_app_translator.reset(poTranslator);
successful = true;
}
- }
- else
- {
+ } else {
qCritical() << "Loading Application Language File failed.";
d->m_app_translator.reset();
}
- }
- else if(langPtr->localFileType == FileType::QM)
- {
+ } else if (langPtr->localFileType == FileType::QM) {
d->m_app_translator.reset(new QTranslator());
- if (d->m_app_translator->load("mmc_" + langCode, d->m_dir.path()))
- {
+ if (d->m_app_translator->load("mmc_" + langCode, d->m_dir.path())) {
qDebug() << "Loading Application Language File for" << langCode.toLocal8Bit().constData() << "...";
- if (!QCoreApplication::installTranslator(d->m_app_translator.get()))
- {
+ if (!QCoreApplication::installTranslator(d->m_app_translator.get())) {
qCritical() << "Installing Application Language File failed.";
d->m_app_translator.reset();
- }
- else
- {
+ } else {
successful = true;
}
- }
- else
- {
+ } else {
d->m_app_translator.reset();
}
- }
- else
- {
+ } else {
d->m_app_translator.reset();
}
d->m_selectedLanguage = langCode;
@@ -653,8 +527,7 @@ bool TranslationsModel::selectLanguage(QString key)
QModelIndex TranslationsModel::selectedIndex()
{
auto found = findLanguage(d->m_selectedLanguage);
- if(found)
- {
+ if (found) {
// QVector iterator freely converts to pointer to contained type
return index(found - d->m_languages.begin(), 0, QModelIndex());
}
@@ -668,8 +541,7 @@ QString TranslationsModel::selectedLanguage()
void TranslationsModel::downloadIndex()
{
- if(d->m_index_job || d->m_dl_job)
- {
+ if (d->m_index_job || d->m_dl_job) {
return;
}
qDebug() << "Downloading Translations Index...";
@@ -686,33 +558,28 @@ void TranslationsModel::downloadIndex()
void TranslationsModel::updateLanguage(QString key)
{
- if(key == defaultLangCode)
- {
+ if (key == defaultLangCode) {
qWarning() << "Cannot update builtin language" << key;
return;
}
auto found = findLanguage(key);
- if(!found)
- {
+ if (!found) {
qWarning() << "Cannot update invalid language" << key;
return;
}
- if(!found->updated)
- {
+ if (!found->updated) {
downloadTranslation(key);
}
}
void TranslationsModel::downloadTranslation(QString key)
{
- if(d->m_dl_job)
- {
+ if (d->m_dl_job) {
d->m_nextDownload = key;
return;
}
auto lang = findLanguage(key);
- if(!lang)
- {
+ if (!lang) {
qWarning() << "Will not download an unknown translation" << key;
return;
}
@@ -737,8 +604,7 @@ void TranslationsModel::downloadTranslation(QString key)
void TranslationsModel::downloadNext()
{
- if(!d->m_nextDownload.isEmpty())
- {
+ if (!d->m_nextDownload.isEmpty()) {
downloadTranslation(d->m_nextDownload);
d->m_nextDownload.clear();
}
@@ -755,8 +621,7 @@ void TranslationsModel::dlGood()
{
qDebug() << "Got translation:" << d->m_downloadingTranslation;
- if(d->m_downloadingTranslation == d->m_selectedLanguage)
- {
+ if (d->m_downloadingTranslation == d->m_selectedLanguage) {
selectLanguage(d->m_selectedLanguage);
}
d->m_dl_job.reset();