#ifndef LANGUAGEMANAGER_H
#define LANGUAGEMANAGER_H

#include <QObject>
#include <QTranslator>
#include <QApplication>

/**
 * @class LanguageManager
 * @brief 语言管理器类，用于管理应用程序的语言设置。
 * 
 * LanguageManager 类提供了一种集中管理应用程序语言的方法。它允许用户设置和获取当前的语言，
 * 并通过信号通知其他组件语言已更改。该类使用 QTranslator 来加载和卸载翻译文件。
 * 
 * @note 该类是单例模式，通过静态方法 instance() 获取实例。
 * 
 * @public
 * @fn static LanguageManager* instance();
 * @brief 获取 LanguageManager 的唯一实例。
 * 
 * @fn explicit LanguageManager(QObject *parent = nullptr);
 * @brief 构造函数，创建一个 LanguageManager 实例。如果提供 parent 参数，则将此对象设置为 parent 的子对象。
 * 
 * @fn void setLanguage(const QString& language);
 * @brief 设置应用程序的语言。
 * @param language 语言代码，例如 "en" 表示英语，"zh" 表示中文。
 * 
 * @fn QString currentLanguage() const;
 * @brief 获取当前设置的语言。
 * 
 * @signals
 * @fn void languageChanged();
 * @brief 当语言更改时发出此信号。
 * 
 * @private
 * @var QTranslator* m_translator;
 * @brief 用于加载和卸载翻译文件的 QTranslator 对象。
 * 
 * @var QString m_currentLanguage;
 * @brief 当前设置的语言代码。
 */
class LanguageManager : public QObject
{
    Q_OBJECT
public:
    static LanguageManager* instance();
    explicit LanguageManager(QObject *parent = nullptr);

    void setLanguage(const QString& language);
    QString currentLanguage() const;

signals:
    void languageChanged();

private:
    QTranslator* m_translator;
    QString m_currentLanguage;
};

#endif // LANGUAGEMANAGER_H
