language_manager.cpp 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. #include "language_manager.h"
  2. #include <QCoreApplication>
  3. #include <QDebug>
  4. #include <qcoreapplication.h>
  5. #include <qglobal.h>
  6. #include <qobject.h>
  7. #include <qtmetamacros.h>
  8. #include <qtranslator.h>
  9. LanguageManager::LanguageManager(QObject *parent)
  10. : QObject(parent), m_currentLanguage("en"),
  11. m_translator(new QTranslator(this)) {
  12. m_availableLanguages << "en" << "de";
  13. #ifndef DEFAULT_LANG
  14. #define DEFAULT_LANG "en"
  15. #endif
  16. QString const default_lang = QString(DEFAULT_LANG);
  17. if (m_availableLanguages.contains(default_lang)) {
  18. loadLanguage(default_lang);
  19. } else {
  20. loadLanguage("en");
  21. }
  22. }
  23. LanguageManager::~LanguageManager() = default;
  24. auto LanguageManager::currentLanguage() const -> QString {
  25. return m_currentLanguage;
  26. }
  27. auto LanguageManager::availableLanguages() const -> QStringList {
  28. return m_availableLanguages;
  29. }
  30. void LanguageManager::setLanguage(const QString &language) {
  31. if (language == m_currentLanguage ||
  32. !m_availableLanguages.contains(language)) {
  33. return;
  34. }
  35. loadLanguage(language);
  36. }
  37. void LanguageManager::loadLanguage(const QString &language) {
  38. QCoreApplication::removeTranslator(m_translator);
  39. QString const qm_file =
  40. QString(":/StandardOfIron/translations/app_%1.qm").arg(language);
  41. if (m_translator->load(qm_file)) {
  42. QCoreApplication::installTranslator(m_translator);
  43. m_currentLanguage = language;
  44. qInfo() << "Language changed to:" << language;
  45. emit languageChanged();
  46. } else {
  47. qWarning() << "Failed to load translation file:" << qm_file;
  48. }
  49. }
  50. auto LanguageManager::languageDisplayName(const QString &language) -> QString {
  51. if (language == "en") {
  52. return "English";
  53. }
  54. if (language == "de") {
  55. return "Deutsch (German)";
  56. }
  57. return language;
  58. }