]> sigrok.org Git - pulseview.git/blobdiff - pv/application.cpp
Implement translations
[pulseview.git] / pv / application.cpp
index 5a6e28a1da996034aa24218df7ef2d66eb425543..e933f96214d94c72620a088f7e766e8a675b574b 100644 (file)
@@ -17,9 +17,6 @@
  * along with this program; if not, see <http://www.gnu.org/licenses/>.
  */
 
-#include "application.hpp"
-#include "config.h"
-
 #include <iostream>
 #include <typeinfo>
 
 #include <libsigrokdecode/libsigrokdecode.h>
 #endif
 
+#include "application.hpp"
+#include "config.h"
+#include "globalsettings.hpp"
+
 using std::cout;
 using std::endl;
 using std::exception;
@@ -60,6 +61,34 @@ Application::Application(int &argc, char* argv[]) :
        setOrganizationDomain("sigrok.org");
 }
 
+void Application::switch_language(const QString& language)
+{
+       removeTranslator(&app_translator_);
+       removeTranslator(&qt_translator_);
+
+       if ((language != "C") && (language != "en")) {
+               // Application translations
+               QString resource = ":/l10n/" + language +".qm";
+               if (app_translator_.load(resource))
+                       installTranslator(&app_translator_);
+               else
+                       qWarning() << "Translation resource" << resource << "not found";
+
+               // Qt translations
+               resource = ":/l10n/qtbase_" + language +".qm";
+               if (qt_translator_.load(resource))
+                       installTranslator(&qt_translator_);
+               else
+                       qWarning() << "Translation resource" << resource << "not found";
+       }
+}
+
+void Application::on_setting_changed(const QString &key, const QVariant &value)
+{
+       if (key == pv::GlobalSettings::Key_General_Language)
+               switch_language(value.toString());
+}
+
 void Application::collect_version_info(shared_ptr<sigrok::Context> context)
 {
        // Library versions and features