diff --git a/src/webui/webapplication.cpp b/src/webui/webapplication.cpp index 6d938004f..35e6d2fa9 100644 --- a/src/webui/webapplication.cpp +++ b/src/webui/webapplication.cpp @@ -95,33 +95,32 @@ namespace return ret; } - void translateDocument(QString &data) + void translateDocument(const QString &locale, QString &data) { const QRegExp regex("QBT_TR\\((([^\\)]|\\)(?!QBT_TR))+)\\)QBT_TR(\\[CONTEXT=([a-zA-Z_][a-zA-Z0-9_]*)\\])"); const QRegExp mnemonic("\\(?&([a-zA-Z]?\\))?"); + + const bool isTranslationNeeded = !locale.startsWith("en") + || locale.startsWith("en_AU") || locale.startsWith("en_GB"); + int i = 0; bool found = true; - - const QString locale = Preferences::instance()->getLocale(); - bool isTranslationNeeded = !locale.startsWith("en") || locale.startsWith("en_AU") || locale.startsWith("en_GB"); - while (i < data.size() && found) { i = regex.indexIn(data, i); if (i >= 0) { - //qDebug("Found translatable string: %s", regex.cap(1).toUtf8().data()); - QByteArray word = regex.cap(1).toUtf8(); + const QString word = regex.cap(1); + const QString context = regex.cap(4); + + QString translation = isTranslationNeeded + ? qApp->translate(context.toUtf8().constData(), word.toUtf8().constData(), nullptr, 1) + : word; - QString translation = word; - if (isTranslationNeeded) { - QString context = regex.cap(4); - translation = qApp->translate(context.toUtf8().constData(), word.constData(), nullptr, 1); - } // Remove keyboard shortcuts translation.replace(mnemonic, ""); // Use HTML code for quotes to prevent issues with JS - translation.replace("'", "'"); - translation.replace("\"", """); + translation.replace('\'', "'"); + translation.replace('\"', """); data.replace(i, regex.matchedLength(), translation); i += translation.length(); @@ -414,7 +413,7 @@ void WebApplication::configure() { const auto pref = Preferences::instance(); - m_domainList = Preferences::instance()->getServerDomains().split(';', QString::SkipEmptyParts); + m_domainList = pref->getServerDomains().split(';', QString::SkipEmptyParts); std::for_each(m_domainList.begin(), m_domainList.end(), [](QString &entry) { entry = entry.trimmed(); }); const QString rootFolder = Utils::Fs::expandPathAbs( @@ -423,6 +422,12 @@ void WebApplication::configure() m_translatedFiles.clear(); m_rootFolder = rootFolder; } + + const QString newLocale = pref->getLocale(); + if (m_currentLocale != newLocale) { + m_currentLocale = newLocale; + m_translatedFiles.clear(); + } } void WebApplication::registerAPIController(const QString &scope, APIController *controller) @@ -470,7 +475,7 @@ void WebApplication::sendFile(const QString &path) // Translate the file if (isTranslatable) { QString dataStr {data}; - translateDocument(dataStr); + translateDocument(m_currentLocale, dataStr); data = dataStr.toUtf8(); m_translatedFiles[path] = {data, lastModified}; // caching translated file diff --git a/src/webui/webapplication.h b/src/webui/webapplication.h index 1d613eccb..509927993 100644 --- a/src/webui/webapplication.h +++ b/src/webui/webapplication.h @@ -141,4 +141,5 @@ private: QDateTime lastModified; }; QMap m_translatedFiles; + QString m_currentLocale; };