From ec0622fa124997e63ce97a5d5a9460a589765816 Mon Sep 17 00:00:00 2001 From: EndrII Date: Fri, 15 May 2020 01:43:32 +0300 Subject: [PATCH] new translation logick --- locales.cpp | 29 +++++++++++++++++++++++------ locales.h | 23 ++++++++++++++++++----- 2 files changed, 41 insertions(+), 11 deletions(-) diff --git a/locales.cpp b/locales.cpp index 133515f..7d64c1c 100644 --- a/locales.cpp +++ b/locales.cpp @@ -11,22 +11,39 @@ #include #include #include +#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; } diff --git a/locales.h b/locales.h index 3352ce4..1826617 100644 --- a/locales.h +++ b/locales.h @@ -11,6 +11,8 @@ #include "quasarapp_global.h" +#include + 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(); }; }