1
0
mirror of https://github.com/d47081/qBittorrent.git synced 2025-01-11 15:27:54 +00:00

Unify translation files loading action

Since it is possible alternative WebUI could be coded in languages other than English,
WebUI must be able to load user-provided webui_en.qm.
At least one translated string must exist in order to generate an usable .qm file.
This commit is contained in:
Chocobo1 2018-12-08 12:03:43 +08:00
parent 9491d40f22
commit e98d4e874f
No known key found for this signature in database
GPG Key ID: 210D9C873253A68C
3 changed files with 14 additions and 16 deletions

View File

@ -199,10 +199,6 @@ void WebApplication::translateDocument(QString &data)
{ {
const QRegularExpression regex("QBT_TR\\((([^\\)]|\\)(?!QBT_TR))+)\\)QBT_TR\\[CONTEXT=([a-zA-Z_][a-zA-Z0-9_]*)\\]"); const QRegularExpression regex("QBT_TR\\((([^\\)]|\\)(?!QBT_TR))+)\\)QBT_TR\\[CONTEXT=([a-zA-Z_][a-zA-Z0-9_]*)\\]");
const bool isTranslationNeeded = !m_currentLocale.startsWith("en")
|| m_currentLocale.startsWith("en_AU") || m_currentLocale.startsWith("en_GB")
|| !m_translator.isEmpty();
int i = 0; int i = 0;
bool found = true; bool found = true;
while (i < data.size() && found) { while (i < data.size() && found) {
@ -212,12 +208,12 @@ void WebApplication::translateDocument(QString &data)
const QString sourceText = regexMatch.captured(1); const QString sourceText = regexMatch.captured(1);
const QString context = regexMatch.captured(3); const QString context = regexMatch.captured(3);
QString translation = sourceText; const QString loadedText = m_translationFileLoaded
if (isTranslationNeeded) { ? m_translator.translate(context.toUtf8().constData(), sourceText.toUtf8().constData())
const QString loadedText = m_translator.translate(context.toUtf8().constData(), sourceText.toUtf8().constData(), nullptr, 1); : QString();
if (!loadedText.isEmpty()) // `loadedText` is empty when translation is not provided
translation = loadedText; // it should fallback to `sourceText`
} QString translation = loadedText.isEmpty() ? sourceText : loadedText;
// Use HTML code for quotes to prevent issues with JS // Use HTML code for quotes to prevent issues with JS
translation.replace('\'', "&#39;"); translation.replace('\'', "&#39;");
@ -436,13 +432,14 @@ void WebApplication::configure()
if (m_currentLocale != newLocale) { if (m_currentLocale != newLocale) {
m_currentLocale = newLocale; m_currentLocale = newLocale;
m_translatedFiles.clear(); m_translatedFiles.clear();
if (m_translator.load(m_rootFolder + QLatin1String("/translations/webui_") + m_currentLocale)) {
LogMsg(tr("Web UI translation for selected locale (%1) is successfully loaded.") m_translationFileLoaded = m_translator.load(m_rootFolder + QLatin1String("/translations/webui_") + newLocale);
.arg(m_currentLocale)); if (m_translationFileLoaded) {
LogMsg(tr("Web UI translation for selected locale (%1) has been successfully loaded.")
.arg(newLocale));
} }
else { else {
LogMsg(tr("Couldn't load Web UI translation for selected locale (%1). Falling back to default (en).") LogMsg(tr("Couldn't load Web UI translation for selected locale (%1).").arg(newLocale), Log::WARNING);
.arg(m_currentLocale), Log::WARNING);
} }
} }

View File

@ -146,6 +146,7 @@ private:
QMap<QString, TranslatedFile> m_translatedFiles; QMap<QString, TranslatedFile> m_translatedFiles;
QString m_currentLocale; QString m_currentLocale;
QTranslator m_translator; QTranslator m_translator;
bool m_translationFileLoaded = false;
bool m_isLocalAuthEnabled; bool m_isLocalAuthEnabled;
bool m_isAuthSubnetWhitelistEnabled; bool m_isAuthSubnetWhitelistEnabled;

View File

@ -5,7 +5,7 @@
<name>AboutDlg</name> <name>AboutDlg</name>
<message> <message>
<source>About</source> <source>About</source>
<translation type="unfinished" /> <translation>About</translation>
</message> </message>
</context> </context>
<context> <context>