X-Git-Url: http://sigrok.org/gitweb/?a=blobdiff_plain;f=pv%2Fapplication.cpp;h=a34a6ca758350671e37a3d8a92ddf195e1e52ede;hb=883041605ce8536ece950b1de191cfe71068dfba;hp=e933f96214d94c72620a088f7e766e8a675b574b;hpb=0466001be51e779b23aaebec1cc9361305c07be9;p=pulseview.git diff --git a/pv/application.cpp b/pv/application.cpp index e933f962..a34a6ca7 100644 --- a/pv/application.cpp +++ b/pv/application.cpp @@ -21,6 +21,10 @@ #include #include +#include +#include +#include +#include #include @@ -32,6 +36,8 @@ #include #endif +#include + #include "application.hpp" #include "config.h" #include "globalsettings.hpp" @@ -61,10 +67,35 @@ Application::Application(int &argc, char* argv[]) : setOrganizationDomain("sigrok.org"); } +const QStringList Application::get_languages() const +{ + const QStringList files = QDir(":/l10n/").entryList(QStringList("*.qm"), QDir::Files); + + QStringList result; + result << "en"; // Add default language to the set + + // Remove file extensions + for (const QString& file : files) + result << file.split(".").front(); + + result.sort(Qt::CaseInsensitive); + + return result; +} + +const QString Application::get_language_editors(const QString& language) const +{ + if (language == "de") return "Sören Apel, Uwe Hermann"; + if (language == "es_mx") return "Carlos Diaz"; + + return QString(); +} + void Application::switch_language(const QString& language) { removeTranslator(&app_translator_); removeTranslator(&qt_translator_); + removeTranslator(&qtbase_translator_); if ((language != "C") && (language != "en")) { // Application translations @@ -75,11 +106,34 @@ void Application::switch_language(const QString& language) qWarning() << "Translation resource" << resource << "not found"; // Qt translations - resource = ":/l10n/qtbase_" + language +".qm"; - if (qt_translator_.load(resource)) + QString tr_path(QLibraryInfo::location(QLibraryInfo::TranslationsPath)); + + if (qt_translator_.load("qt_" + language, tr_path)) installTranslator(&qt_translator_); else - qWarning() << "Translation resource" << resource << "not found"; + qWarning() << "QT translations for" << language << "not found at" << + tr_path << ", Qt translations package is probably missing"; + + // Qt base translations + if (qtbase_translator_.load("qtbase_" + language, tr_path)) + installTranslator(&qtbase_translator_); + else + qWarning() << "QT base translations for" << language << "not found at" << + tr_path << ", Qt translations package is probably missing"; + } + + if (!topLevelWidgets().empty()) { + // Force all windows to update + for (QWidget *widget : topLevelWidgets()) + widget->update(); + + QMessageBox msg(topLevelWidgets().front()); + msg.setText(tr("Some parts of the application may still " \ + "use the previous language. Re-opening the affected windows or " \ + "restarting the application will remedy this.")); + msg.setStandardButtons(QMessageBox::Ok); + msg.setIcon(QMessageBox::Information); + msg.exec(); } } @@ -96,6 +150,7 @@ void Application::collect_version_info(shared_ptr context) version_info_.emplace_back("Qt", qVersion()); version_info_.emplace_back("glibmm", PV_GLIBMM_VERSION); version_info_.emplace_back("Boost", BOOST_LIB_VERSION); + version_info_.emplace_back("exprtk", QString::fromUtf8(exprtk::information::date)); version_info_.emplace_back("libsigrok", QString("%1/%2 (rt: %3/%4)") .arg(SR_PACKAGE_VERSION_STRING, SR_LIB_VERSION_STRING,