diff --git a/libretroshare/src/retroshare/rsplugin.h b/libretroshare/src/retroshare/rsplugin.h index fd78d3b5b..5beff72fd 100644 --- a/libretroshare/src/retroshare/rsplugin.h +++ b/libretroshare/src/retroshare/rsplugin.h @@ -130,7 +130,7 @@ class RsPlugin // virtual PopupChatDialog *qt_allocate_new_popup_chat_dialog() const { return NULL ; } - virtual QTranslator *qt_translator(QApplication * /* app */, const QString& /* languageCode */ ) const { return NULL ; } + virtual QTranslator *qt_translator(QApplication * /* app */, const QString& /* languageCode */, const QString& /* externalDir */ ) const { return NULL ; } // //========================== Plugin Description ==============================// diff --git a/plugins/LinksCloud/LinksCloudPlugin.cpp b/plugins/LinksCloud/LinksCloudPlugin.cpp index d2c844a48..131f52d16 100644 --- a/plugins/LinksCloud/LinksCloudPlugin.cpp +++ b/plugins/LinksCloud/LinksCloudPlugin.cpp @@ -98,7 +98,7 @@ std::string LinksCloudPlugin::getPluginName() const return QApplication::translate("LinksCloudPlugin", "LinksCloud").toUtf8().constData(); } -QTranslator* LinksCloudPlugin::qt_translator(QApplication */*app*/, const QString& languageCode) const +QTranslator* LinksCloudPlugin::qt_translator(QApplication */*app*/, const QString& languageCode, const QString& externalDir) const { if (languageCode == "en") { return NULL; @@ -106,7 +106,7 @@ QTranslator* LinksCloudPlugin::qt_translator(QApplication */*app*/, const QStrin QTranslator* translator = new QTranslator(); - if (translator->load(QCoreApplication::applicationDirPath() + "/translations/LinksCloud_" + languageCode + ".qm")) { + if (translator->load(externalDir + "/LinksCloud_" + languageCode + ".qm")) { return translator; } else if (translator->load(":/lang/LinksCloud_" + languageCode + ".qm")) { return translator; diff --git a/plugins/LinksCloud/LinksCloudPlugin.h b/plugins/LinksCloud/LinksCloudPlugin.h index ea972850f..e1c590ca5 100644 --- a/plugins/LinksCloud/LinksCloudPlugin.h +++ b/plugins/LinksCloud/LinksCloudPlugin.h @@ -14,7 +14,7 @@ class LinksCloudPlugin: public RsPlugin virtual MainPage *qt_page() const ; virtual QIcon *qt_icon() const ; virtual uint16_t rs_service_id() const { return RS_SERVICE_TYPE_RANK ; } - virtual QTranslator *qt_translator(QApplication *app, const QString& languageCode) const; + virtual QTranslator *qt_translator(QApplication *app, const QString& languageCode, const QString& externalDir) const; virtual void getPluginVersion(int& major,int& minor,int& svn_rev) const ; virtual void setPlugInHandler(RsPluginHandler *pgHandler); diff --git a/plugins/VOIP/VOIP.pro b/plugins/VOIP/VOIP.pro index ca89e005d..92bea5593 100644 --- a/plugins/VOIP/VOIP.pro +++ b/plugins/VOIP/VOIP.pro @@ -35,7 +35,7 @@ SOURCES = services/p3vors.cc \ gui/AudioPopupChatDialog.cpp \ gui/PluginGUIHandler.cpp \ gui/PluginNotifier.cpp \ - VOIPPlugin.cpp + VOIPPlugin.cpp HEADERS = services/p3vors.h \ services/rsvoipitems.h \ @@ -48,7 +48,8 @@ HEADERS = services/p3vors.h \ gui/AudioPopupChatDialog.h \ gui/PluginGUIHandler.h \ gui/PluginNotifier.h \ - interface/rsvoip.h + interface/rsvoip.h \ + VOIPPlugin.h FORMS = gui/AudioInputConfig.ui \ gui/AudioStats.ui \ diff --git a/plugins/VOIP/VOIPPlugin.cpp b/plugins/VOIP/VOIPPlugin.cpp index f92374686..4c9d77762 100644 --- a/plugins/VOIP/VOIPPlugin.cpp +++ b/plugins/VOIP/VOIPPlugin.cpp @@ -157,7 +157,7 @@ std::string VOIPPlugin::getPluginName() const return QApplication::translate("VOIPPlugin", "VOIP").toUtf8().constData(); } -QTranslator* VOIPPlugin::qt_translator(QApplication */*app*/, const QString& languageCode) const +QTranslator* VOIPPlugin::qt_translator(QApplication */*app*/, const QString& languageCode, const QString& externalDir) const { if (languageCode == "en") { return NULL; @@ -165,7 +165,7 @@ QTranslator* VOIPPlugin::qt_translator(QApplication */*app*/, const QString& lan QTranslator* translator = new QTranslator(); - if (translator->load(QCoreApplication::applicationDirPath() + "/translations/VOIP_" + languageCode + ".qm")) { + if (translator->load(externalDir + "/VOIP_" + languageCode + ".qm")) { return translator; } else if (translator->load(":/lang/VOIP_" + languageCode + ".qm")) { return translator; diff --git a/plugins/VOIP/VOIPPlugin.h b/plugins/VOIP/VOIPPlugin.h index d63d97e47..c237c23b6 100644 --- a/plugins/VOIP/VOIPPlugin.h +++ b/plugins/VOIP/VOIPPlugin.h @@ -21,7 +21,7 @@ class VOIPPlugin: public RsPlugin virtual PopupChatDialog *qt_allocate_new_popup_chat_dialog() const ; virtual QIcon *qt_icon() const; - virtual QTranslator *qt_translator(QApplication *app, const QString& languageCode) const; + virtual QTranslator *qt_translator(QApplication *app, const QString& languageCode, const QString& externalDir) const; virtual void getPluginVersion(int& major,int& minor,int& svn_rev) const ; virtual void setPlugInHandler(RsPluginHandler *pgHandler); diff --git a/retroshare-gui/src/lang/languagesupport.cpp b/retroshare-gui/src/lang/languagesupport.cpp index 476660806..c436b954a 100644 --- a/retroshare-gui/src/lang/languagesupport.cpp +++ b/retroshare-gui/src/lang/languagesupport.cpp @@ -25,11 +25,14 @@ #include #include #include +#include #include "languagesupport.h" static QMap translatorPlugins; +#define EXTERNAL_TRANSLATION_DIR QString::fromUtf8(RsInit::getRetroshareDataDirectory().c_str()) + /** Initializes the list of available languages. */ QMap LanguageSupport::languages() @@ -175,7 +178,7 @@ LanguageSupport::translate(const QString &languageCode) bool result = true; - if (retroshareTranslator->load(QCoreApplication::applicationDirPath() + "/translations/retroshare_" + languageCode + ".qm")) { + if (retroshareTranslator->load(EXTERNAL_TRANSLATION_DIR + "/translations/retroshare_" + languageCode + ".qm")) { QApplication::installTranslator(retroshareTranslator); } else if (retroshareTranslator->load(":/lang/retroshare_" + languageCode + ".qm")) { QApplication::installTranslator(retroshareTranslator); @@ -199,11 +202,13 @@ bool LanguageSupport::translatePlugins(const QString &languageCode) return true; } + QString externalDir = EXTERNAL_TRANSLATION_DIR + "/translations"; + int count = rsPlugins->nbPlugins(); for (int i = 0; i < count; ++i) { RsPlugin* plugin = rsPlugins->plugin(i); if (plugin) { - QTranslator* translator = plugin->qt_translator(rApp, languageCode); + QTranslator* translator = plugin->qt_translator(rApp, languageCode, externalDir); if (translator) { QApplication::installTranslator(translator); translatorPlugins[plugin] = translator;