/** \file LanguagesManager.cpp \brief Define the class to manage and load the languages \author alpha_one_x86 \licence GPL3, see the file COPYING */ #include #include #include "LanguagesManager.h" #include "FacilityEngine.h" /// \brief Create the manager and load the defaults variables LanguagesManager::LanguagesManager() { ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start")); //load the rest QStringList resourcesPaths=ResourcesManager::resourcesManager->getReadPath(); int index=0; while(indexlockPluginListEdition(); connect(this,&LanguagesManager::previouslyPluginAdded, this, &LanguagesManager::onePluginAdded,Qt::QueuedConnection); connect(PluginsManager::pluginsManager,&PluginsManager::onePluginAdded,this, &LanguagesManager::onePluginAdded,Qt::QueuedConnection); #ifndef ULTRACOPIER_PLUGIN_ALL_IN_ONE connect(PluginsManager::pluginsManager,&PluginsManager::onePluginWillBeRemoved, this, &LanguagesManager::onePluginWillBeRemoved,Qt::DirectConnection); #endif connect(PluginsManager::pluginsManager,&PluginsManager::pluginListingIsfinish, this, &LanguagesManager::allPluginIsLoaded,Qt::QueuedConnection); QList list=PluginsManager::pluginsManager->getPluginsByCategory(PluginType_Languages); foreach(PluginsAvailable currentPlugin,list) emit previouslyPluginAdded(currentPlugin); PluginsManager::pluginsManager->unlockPluginListEdition(); //load the GUI option QList > KeysList; KeysList.append(qMakePair(QStringLiteral("Language"),QVariant("en"))); KeysList.append(qMakePair(QStringLiteral("Language_force"),QVariant(false))); OptionEngine::optionEngine->addOptionGroup("Language",KeysList); // connect(this, &LanguagesManager::newLanguageLoaded, plugins,&PluginsManager::refreshPluginList); // connect(this, &LanguagesManager::newLanguageLoaded, this,&LanguagesManager::retranslateTheUI); connect(OptionEngine::optionEngine,&OptionEngine::newOptionValue, this, &LanguagesManager::newOptionValue,Qt::QueuedConnection); connect(this, &LanguagesManager::newLanguageLoaded, PluginsManager::pluginsManager,&PluginsManager::newLanguageLoaded,Qt::QueuedConnection); } /// \brief Destroy the language manager LanguagesManager::~LanguagesManager() { } /// \brief load the language selected, return the main short code like en, fr, .. QString LanguagesManager::getTheRightLanguage() const { ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start")); if(LanguagesAvailableList.size()==0) { ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"empty combobox list, failing back to english"); return "en"; } else { if(!OptionEngine::optionEngine->getOptionValue(QStringLiteral("Language"),QStringLiteral("Language_force")).toBool()) { ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("language auto-detection, QLocale::system().name(): ")+QLocale::system().name()+QStringLiteral(", QLocale::languageToString(QLocale::system().language()): ")+QLocale::languageToString(QLocale::system().language())); QString tempLanguage=getMainShortName(QLocale::languageToString(QLocale::system().language())); if(tempLanguage!=QStringLiteral("")) return tempLanguage; else { tempLanguage=getMainShortName(QLocale::system().name()); if(tempLanguage!=QStringLiteral("")) return tempLanguage; else { ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("Autodetection of the language failed, QLocale::languageToString(QLocale::system().language()): ")+QLocale::languageToString(QLocale::system().language())+QStringLiteral(", QLocale::system().name(): ")+QLocale::system().name()+", failing back to english"); return OptionEngine::optionEngine->getOptionValue(QStringLiteral("Language"),QStringLiteral("Language")).toString(); } } } else return OptionEngine::optionEngine->getOptionValue(QStringLiteral("Language"),QStringLiteral("Language")).toString(); } } /* \brief To set the current language \param newLanguage Should be short name code found into informations.xml of language file */ void LanguagesManager::setCurrentLanguage(const QString &newLanguage) { ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start: ")+newLanguage); //protection for re-set the same language if(currentLanguage==newLanguage) return; //store the language PluginsManager::pluginsManager->setLanguage(newLanguage); //unload the old language if(currentLanguage!=QStringLiteral("en")) { int indexTranslator=0; while(indexTranslator listLoadedPlugins=PluginsManager::pluginsManager->getPlugins(); int indexPluginIndex=0; while(indexPluginIndexload(fileToLoad.at(indexTranslationFile)) || temp->isEmpty()) { delete temp; ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("Unable to load the translation file: ")+fileToLoad.at(indexTranslationFile)); } else { QCoreApplication::installTranslator(temp); installedTranslator<load(QString("qt_")+newLanguage, QLibraryInfo::location(QLibraryInfo::TranslationsPath)) && !temp->isEmpty()) { QCoreApplication::installTranslator(temp); installedTranslator<load(LanguagesAvailableList.at(index).path+QStringLiteral("qt.qm")) || temp->isEmpty()) { ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Unable to load the translation file: qt.qm, into: "+LanguagesAvailableList.at(index).path); delete temp; } else { QCoreApplication::installTranslator(temp); installedTranslator<allPluginHaveBeenLoaded()) setCurrentLanguage(getTheRightLanguage()); } #ifndef ULTRACOPIER_PLUGIN_ALL_IN_ONE void LanguagesManager::onePluginWillBeRemoved(const PluginsAvailable &plugin) { ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start")); int index=0; while(index