From a9752aaf002f1a6b4acf1a933bfd725b6e16041d Mon Sep 17 00:00:00 2001 From: Claudio Valerio Date: Fri, 22 Jun 2012 11:12:59 +0200 Subject: [PATCH] added -lang parameter to application to be able to choose the language. Available on linux --- src/core/UBApplication.cpp | 65 +++++++++++++++++------- src/core/UBApplication.h | 1 + src/frameworks/UBPlatformUtils.h | 5 +- src/frameworks/UBPlatformUtils_linux.cpp | 17 +++++-- src/frameworks/UBPlatformUtils_win.cpp | 16 ++++-- 5 files changed, 77 insertions(+), 27 deletions(-) diff --git a/src/core/UBApplication.cpp b/src/core/UBApplication.cpp index faab24bf..cd477981 100644 --- a/src/core/UBApplication.cpp +++ b/src/core/UBApplication.cpp @@ -135,27 +135,13 @@ UBApplication::UBApplication(const QString &id, int &argc, char **argv) : QtSing UBResources::resources(); if (!undoStack) - { undoStack = new QUndoStack(staticMemoryCleaner); - } - - mApplicationTranslator = new QTranslator(this); - mApplicationTranslator->load(UBPlatformUtils::preferredTranslation(QString("sankore_"))); - installTranslator(mApplicationTranslator); - - QString localString; - if (!mApplicationTranslator->isEmpty()) - localString = UBPlatformUtils::preferredLanguage(); - else - localString = "en_US"; - mQtGuiTranslator = new QTranslator(this); - mQtGuiTranslator->load(UBPlatformUtils::preferredTranslation(QString("qt_"))); - installTranslator(mQtGuiTranslator); + QString forcedLanguage(""); + if(args.contains("-lang")) + forcedLanguage=args.at(args.indexOf("-lang") + 1); - - QLocale::setDefault(QLocale(localString)); - qDebug() << "Running application in:" << localString; + setupTranslator(forcedLanguage); UBSettings *settings = UBSettings::settings(); @@ -217,6 +203,49 @@ UBApplication::~UBApplication() staticMemoryCleaner = 0; } + +void UBApplication::setupTranslator(QString forcedLanguage) +{ + QStringList availablesTranslations = UBPlatformUtils::availableTranslations(); + QString language(""); + if(!forcedLanguage.isEmpty()){ + if(availablesTranslations.contains(forcedLanguage,Qt::CaseInsensitive)) + language = forcedLanguage; + else + qDebug() << "forced language " << forcedLanguage << " not available"; + } + else{ + QString systemLanguage = UBPlatformUtils::systemLanguage(); + if(availablesTranslations.contains(systemLanguage,Qt::CaseInsensitive)) + language = systemLanguage; + else + qDebug() << "translation for system language " << systemLanguage << " not found"; + } + + if(language.isEmpty()){ + language = "en_US"; + //fallback if no translation are available + } + else{ + mApplicationTranslator = new QTranslator(this); + mQtGuiTranslator = new QTranslator(this); + + mApplicationTranslator->load(UBPlatformUtils::translationPath(QString("sankore_"),language)); + installTranslator(mApplicationTranslator); + + + mQtGuiTranslator->load(UBPlatformUtils::translationPath(QString("qt_"),language)); + if(mQtGuiTranslator){ + // checked because this translation could be not available + installTranslator(mQtGuiTranslator); + } + } + + + QLocale::setDefault(QLocale(language)); + qDebug() << "Running application in:" << language; +} + int UBApplication::exec(const QString& pFileToImport) { QPixmapCache::setCacheLimit(1024 * 100); diff --git a/src/core/UBApplication.h b/src/core/UBApplication.h index 2950005f..efe2c0ec 100644 --- a/src/core/UBApplication.h +++ b/src/core/UBApplication.h @@ -121,6 +121,7 @@ class UBApplication : public QtSingleApplication private: void updateProtoActionsState(); + void setupTranslator(QString forcedLanguage); QList mProtoMenus; bool mIsVerbose; diff --git a/src/frameworks/UBPlatformUtils.h b/src/frameworks/UBPlatformUtils.h index a4d6d886..0b99b370 100644 --- a/src/frameworks/UBPlatformUtils.h +++ b/src/frameworks/UBPlatformUtils.h @@ -103,8 +103,8 @@ class UBPlatformUtils static void setFileType(const QString &filePath, unsigned long fileType); static void fadeDisplayOut(); static void fadeDisplayIn(); - static QString preferredTranslation(QString pFilePrefix); - static QString preferredLanguage(); + static QString translationPath(QString pFilePrefix, QString pLanguage); + static QString systemLanguage(); static bool hasVirtualKeyboard(); //static void showVirtualKeyboard(); static void runInstaller(const QString &installerFilePath); @@ -115,6 +115,7 @@ class UBPlatformUtils static QString computerName(); static UBKeyboardLocale** getKeyboardLayouts(int& nCount); static QString urlFromClipboard(); + static QStringList availableTranslations(); }; diff --git a/src/frameworks/UBPlatformUtils_linux.cpp b/src/frameworks/UBPlatformUtils_linux.cpp index 174e3694..6be93d3f 100644 --- a/src/frameworks/UBPlatformUtils_linux.cpp +++ b/src/frameworks/UBPlatformUtils_linux.cpp @@ -20,6 +20,8 @@ #include #include +#include "frameworks/UBFileSystemUtils.h" + void UBPlatformUtils::init() { @@ -55,13 +57,22 @@ void UBPlatformUtils::fadeDisplayIn() // NOOP } -QString UBPlatformUtils::preferredTranslation(QString pFilePrefix) +QStringList UBPlatformUtils::availableTranslations() +{ + QString translationsPath = applicationResourcesDirectory() + "/" + "i18n" + "/"; + QStringList translationsList = UBFileSystemUtils::allFiles(translationsPath); + QRegExp sankoreTranslationFiles(".*sankore_.*.qm"); + translationsList=translationsList.filter(sankoreTranslationFiles); + return translationsList.replaceInStrings(QRegExp("(.*)sankore_(.*).qm"),"\\2"); +} + +QString UBPlatformUtils::translationPath(QString pFilePrefix,QString pLanguage) { - QString qmPath = applicationResourcesDirectory() + "/" + "i18n" + "/" + pFilePrefix + preferredLanguage() + ".qm"; + QString qmPath = applicationResourcesDirectory() + "/" + "i18n" + "/" + pFilePrefix + pLanguage + ".qm"; return qmPath; } -QString UBPlatformUtils::preferredLanguage() +QString UBPlatformUtils::systemLanguage() { return QLocale::system().name(); } diff --git a/src/frameworks/UBPlatformUtils_win.cpp b/src/frameworks/UBPlatformUtils_win.cpp index 04f09420..dff427c5 100644 --- a/src/frameworks/UBPlatformUtils_win.cpp +++ b/src/frameworks/UBPlatformUtils_win.cpp @@ -59,14 +59,22 @@ void UBPlatformUtils::fadeDisplayIn() // NOOP } -QString UBPlatformUtils::preferredTranslation(QString pFilePrefix) +QStringList UBPlatformUtils::availableTranslations() { - QString localPreferredLanguage = preferredLanguage(); - QString qmPath = applicationResourcesDirectory() + "/" + "i18n" + "/" + pFilePrefix + localPreferredLanguage + ".qm"; + QString translationsPath = applicationResourcesDirectory() + "/" + "i18n" + "/"; + QStringList translationsList = UBFileSystemUtils::allFiles(translationsPath); + QRegExp sankoreTranslationFiles(".*sankore_.*.qm"); + translationsList=translationsList.filter(sankoreTranslationFiles); + return translationsList.replaceInStrings(QRegExp("(.*)sankore_(.*).qm"),"\\2"); +} + +QString UBPlatformUtils::translationPath(QString pFilePrefix,QString pLanguage) +{ + QString qmPath = applicationResourcesDirectory() + "/" + "i18n" + "/" + pFilePrefix + pLanguage + ".qm"; return qmPath; } -QString UBPlatformUtils::preferredLanguage() +QString UBPlatformUtils::systemLanguage() { return QLocale::system().name(); }