[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