[X2Go-Commits] [x2goclient] 01/01: onmainwindow.cpp: follow-up to last translation fix.

git-admin at x2go.org git-admin at x2go.org
Mon May 11 06:21:27 CEST 2015


This is an automated email from the git hooks/post-receive script.

x2go pushed a commit to branch bugfix/translation
in repository x2goclient.

commit 36c2dd5c91a648f64a7219b8be66750be9e1fcbc
Author: Mihai Moldovan <ionic at ionic.de>
Date:   Mon May 11 06:21:13 2015 +0200

    onmainwindow.cpp: follow-up to last translation fix.
    
    Actually handle English locales correctly and don't duplicate code too much.
---
 debian/changelog     |    2 ++
 src/onmainwindow.cpp |   84 ++++++++++++++++++++++++++++++++++----------------
 src/onmainwindow.h   |   19 ++++++++++++
 3 files changed, 79 insertions(+), 26 deletions(-)

diff --git a/debian/changelog b/debian/changelog
index bd47e24..71c6316 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -382,6 +382,8 @@ x2goclient (4.0.4.0-0x2go1) UNRELEASED; urgency=low
     - config_win.bat: enable release by default, fetch command line parameter
       and compare against debug. Enable debug and console features in that
       case.
+    - onmainwindow.cpp: follow-up to last translation fix. Actually handle
+      English locales correctly and don't duplicate code too much.
 
   [ Fernando Pedemonte ]
   * New upstream release (4.0.4.0):
diff --git a/src/onmainwindow.cpp b/src/onmainwindow.cpp
index e5bea4b..c6d6a2e 100644
--- a/src/onmainwindow.cpp
+++ b/src/onmainwindow.cpp
@@ -546,56 +546,88 @@ void ONMainWindow::slotSyncX()
 }
 
 
-void ONMainWindow::installTranslator () {
-    QTranslator *x2goclientTranslator = new QTranslator ();
+bool get_translator (QString file_name_start, QTranslator **translator) {
+    QTranslator *tmp_translator = new QTranslator ();
 
     /* Qt 4.8.0 introduced a new overload for QTranslator::load(), taking a QLocale
      * object and loading up the UI language.
      * Additionally, a lower-cased version is automatically added to the search
      * list on case-sensitive file systems.
-     * We still need the original "compat" version for Qt < 4.8.0, though.
+     * We still need to iterate over the UI languages list in case an English
+     * locale is in there. As we do not ship a nop-English translation, loading
+     * an English translation will always fail and the next language in the list
+     * be preferred.
+     * We also still need the original "compat" version for Qt < 4.8.0.
      */
 
-    QString filename = QString (":/i18n/x2goclient");
+    QString filename = file_name_start;
+    QStringList ui_languages;
 #if QT_VERSION < 0x040800
     filename = QString (filename + "_%1" ).arg (QLocale::system ().name ());
     filename = filename.toLower ();
-#endif
+#else /* QT_VERSION < 0x040800 */
+    ui_languages = QLocale::uiLanguages ();
+#endif /* QT_VERSION < 0x040800 */
 
 #if QT_VERSION < 0x040800
-    if (!x2goclientTranslator->load (filename)) {
-#else
-    if (!x2goclientTranslator->load (QLocale::system (), filename, "_")) {
-#endif
-        x2goWarningf (1) << tr ("Can't load translator: ") + filename.toAscii ();
+    if (tmp_translator->load (filename)) {
+        *translator = tmp_translator;
+        x2goInfof (4) << tr ("Translator: ") + filename.toAscii () + tr (" found.");
+        return (true);
     }
     else {
-        QCoreApplication::installTranslator (x2goclientTranslator);
-        x2goInfof (4) << tr ("Translator: ") + filename.toAscii () + tr (" installed.");
+        x2goWarningf (1) << tr ("Can't load translator: ") + filename.toAscii ();
+        return (false);
     }
+#else /* QT_VERSION < 0x040800 */
+    QString load_filename = "";
+    bool translator_found = false;
+    for (QStringList::const_iterator it = ui_languages.constBegin (); it != ui_languages.constEnd (); ++it) {
+        /* Respect English locales. Don't try to load any translation, because we do not ship nop-English translations. */
+        if (*it.startsWith ("en") {
+            x2goWarningf (1) << tr ("English language requested, not loading translator");
+            break;
+        }
+        else {
+            load_filename = filename.append ("_").append (*it);
 
+            if (tmp_ranslator->load (load_filename) {
+                /* Some translation successfully loaded. That's good enough. */
+                x2goInfof (4) << tr ("Translator: ") + load_filename.toAscii () + tr (" found.");
+                translator_found = true;
+                *translator = tmp_translator;
+                break;
+            }
+            else {
+                x2goWarningf (1) << tr ("Non-fatal: can't load translator: ") + load_filename.toAscii ();
+                x2goWarningf (1) << tr ("Trying to load language with lower preference, if existent.");
+            }
+        }
+    }
 
-    QTranslator *qtTranslator = new QTranslator ();
+    return (translator_found);
+#endif /* QT_VERSION < 0x040800 */
+}
 
-    filename = QString (":/i18n/qt");
-#if QT_VERSION < 0x040800
-    filename = QString (filename + "_%1" ).arg (QLocale::system ().name ());
-    filename = filename.toLower ();
-#endif
+void ONMainWindow::installTranslator () {
+    QTranslator *x2goclientTranslator = new QTranslator ();
 
-#if QT_VERSION < 0x040800
-    if (!qtTranslator->load (filename)) {
-#else
-    if (!qtTranslator->load (QLocale::system (), filename, "_")) {
-#endif
-        x2goWarningf (2) << tr ("Can't load translator: ") + filename.toAscii ();
+    bool translator_found = get_translator (QString (":/i18n/x2goclient"), &x2goclientTranslator);
+
+    if (translator_found) {
+        QCoreApplication::installTranslator (x2goclientTranslator);
     }
-    else {
+
+    QTranslator *qtTranslator = new QTranslator ();
+
+    translator_found = get_translator (QString (":/i18n/qt"), &qtTranslator);
+
+    if (translator_found) {
         QCoreApplication::installTranslator (qtTranslator);
-        x2goInfof (5) << tr ("Translator: ") + filename.toAscii () + tr (" installed.");
     }
 }
 
+
 void ONMainWindow::initWidgetsEmbed()
 {
 #ifdef	CFGPLUGIN
diff --git a/src/onmainwindow.h b/src/onmainwindow.h
index c54d549..10fb353 100644
--- a/src/onmainwindow.h
+++ b/src/onmainwindow.h
@@ -964,6 +964,25 @@ private:
     QMenu* initTrayAppMenu(QString text, QPixmap icon);
     void setTrayIconToSessionIcon(QString info);
 
+    /*
+     * Tries to get the most suitable translator for the running system.
+     *
+     * The first parameter file_name_start denotes the start of a potential
+     * translation file name. Locale values will be appended to this.
+     *
+     * On Qt 4.7 and lower, only tries to fetch a translator for the
+     * main language as returned by QLocale::system().
+     * On Qt 4.8 and higher, tries to fetch the first available translator
+     * for the list returned by QLocale::uiLanguages().
+     *
+     * If no translator is available OR the best available translator
+     * is for an English locale, returns false and doesn't touch
+     * the passed translator object.
+     * Otherwise returns true and sets the translator object to loaded
+     * translation.
+     */
+    bool get_translator (QString file_name_start, QTranslator **translator);
+
 
 protected:
     virtual void closeEvent ( QCloseEvent* event );

--
Alioth's /srv/git/code.x2go.org/x2goclient.git//..//_hooks_/post-receive-email on /srv/git/code.x2go.org/x2goclient.git


More information about the x2go-commits mailing list