new translation logick

This commit is contained in:
Andrei Yankovich 2020-05-15 01:43:32 +03:00
parent 60f961375a
commit ec0622fa12
2 changed files with 41 additions and 11 deletions

View File

@ -11,22 +11,39 @@
#include <QCoreApplication>
#include <QTranslator>
#include <QLocale>
#include "params.h"
using namespace QuasarAppUtils;
bool Locales::initLocale(const QString& prefix, const QString &locale, QCoreApplication *app, QTranslator *translator){
bool Locales::initLocale(QTranslator* translator) {
return QCoreApplication::installTranslator(translator);
}
bool Locales::setLocale(const QString &prefix, const QString &locale) {
auto translator = getTranslator();
if (translator->isEmpty() && !initLocale(translator)) {
Params::log("init translations fail! ", VerboseLvl::Error);
}
QString defaultLocale = QLocale::system().name();
defaultLocale.truncate(defaultLocale.lastIndexOf('_'));
if(!locale.isEmpty() && translator->load(QString("%0/%1").arg(prefix, locale))) {
return app->installTranslator(translator);
if(translator->load(QString("%0/%1").arg(prefix, locale))) {
return true;
}
if(!translator->load(QString("%0/%1").arg(prefix, defaultLocale))) {
return false;
if(translator->load(QString("%0/%1").arg(prefix, defaultLocale))) {
return true;
}
return app->installTranslator(translator);
Params::log("set translations fail!", VerboseLvl::Warning);
return false;
}
QTranslator *Locales::getTranslator() {
static QTranslator *translator = new QTranslator();
return translator;
}

View File

@ -11,6 +11,8 @@
#include "quasarapp_global.h"
#include <QString>
class QCoreApplication;
class QTranslator;
@ -27,12 +29,23 @@ public:
/**
* @brief initLocale init translation of applictaion
* @param prefix - path to folder with qm files. example (/home)
* @param locale - string value of locale. example (en)
* @param app - app core of qt
* @param translator - translator core of qt
* @return return true if locale funded
* @param locale - string value of locale. example (en) by default empty. @note If use by default this function set sstem language.
* @return return true if locale set for application
*/
static bool initLocale(const QString& prefix ,const QString &locale, QCoreApplication* app, QTranslator *translator);
static bool setLocale(const QString& prefix , const QString &locale = {});
private:
/**
* @brief initLocale
* @return true if function finished seccusseful
*/
static bool initLocale(QTranslator*);
/**
* @brief getTranslator
* @return instance of Translation
*/
static QTranslator* getTranslator();
};
}