diff --git a/qad/utils/qad_locations.cpp b/qad/utils/qad_locations.cpp index 266fab5..8a9407f 100644 --- a/qad/utils/qad_locations.cpp +++ b/qad/utils/qad_locations.cpp @@ -14,6 +14,15 @@ #endif +class __QADTranslators__ { +public: + static QMap translators; +private: +}; + +QMap __QADTranslators__::translators = QMap(); + + QString QAD::userPath(QAD::LocationType loc, QString name) { QString dir, ext; switch (loc) { @@ -58,6 +67,13 @@ QStringList QAD::resourcePaths(QString type) { void QAD::loadTranslations(QString lang) { + QMapIterator i(__QADTranslators__::translators); + while (i.hasNext()) { + i.next(); + qApp->removeTranslator(i.value()); + delete i.value(); + } + __QADTranslators__::translators.clear(); if (lang.isEmpty()) lang = QLocale().bcp47Name(); QString short_lang = lang.left(2); @@ -72,6 +88,7 @@ void QAD::loadTranslations(QString lang) { QTranslator * tr = new QTranslator(); if (tr->load(dit.filePath())) { qApp->installTranslator(tr); + __QADTranslators__::translators[dit.filePath()] = tr; qDebug() << "Add tr" << dit.fileName(); } else { qDebug() << "Can`t load translation" << dit.fileName(); @@ -107,10 +124,10 @@ QStringList QAD::availableTranslations() { if (loc.language() != QLocale::C) ret << lang[i]; } - //qDebug() << "Can`t load translation" << dit.fileName(); - delete tr; } + delete tr; } } return ret.values(); } +