RibbonUI/lib_source/include/ribbonlocalization.h

47 lines
1.7 KiB
C++

#ifndef RIBBONLOCALIZATION_H
#define RIBBONLOCALIZATION_H
#include <QQuickItem>
#include <QLocale>
#include <QTranslator>
class RibbonLocalization : public QQuickItem
{
Q_OBJECT
QML_ELEMENT
QML_SINGLETON
QML_NAMED_ELEMENT(RibbonLocalization)
Q_PROPERTY(QString currentLanguage READ currentLanguage WRITE setCurrentLanguage NOTIFY currentLanguageChanged FINAL)
public:
typedef QPair<QString, QString> LangItem; // example: <"zh_CN", "qrc://i18n/xxx_zh_CN.qm">
typedef QMap<QString, QSharedPointer<QTranslator>> Translator; // example: <"main", mainTranslator>
typedef QMap<LangItem, QString> ModuleTranslator; // example: <zhItem, "main">
static RibbonLocalization* create(QQmlEngine *qmlEngine, QJSEngine *jsEngine){return instance();}
static RibbonLocalization* instance();
Q_INVOKABLE bool registerLanguage(QString langName, QString path, QString moduleName);
Q_INVOKABLE bool removeLanguage(QString langName, QString path);
Q_INVOKABLE void bindEngine();
Q_INVOKABLE QList<QString> languageList();
QString currentLanguage();
bool setCurrentLanguage(QString langName);
// Use if you need to directly save/load language from config files
Q_INVOKABLE virtual void loadCurrentLanguage(){};
virtual bool saveCurrentLanguage(const QString &language){return false;};
#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0))
public:
#else
private:
Q_DISABLE_COPY_MOVE(RibbonLocalization)
#endif
RibbonLocalization();
~RibbonLocalization();
private:
ModuleTranslator moduleLangList;
Translator transList;
QString _currentLang;
signals:
void currentLanguageChanged();
};
#endif // RIBBONLOCALIZATION_H