-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtranslator.cpp
More file actions
87 lines (80 loc) · 3.79 KB
/
translator.cpp
File metadata and controls
87 lines (80 loc) · 3.79 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#include "translator.h"
#include <QApplication>
#include <QLibraryInfo>
#include <QDir>
#include <QStandardPaths>
#include <QFileInfo>
#include <QDebug>
// Используем стандартный путь конфигурации Qt, как указано в ТЗ
Translator::Translator(QObject *parent)
: QObject(parent)
, m_currentLanguage("en") // Default
// Используем QStandardPaths::ConfigLocation для получения пути ~/.config/
// и добавляем подпуть compressor-2.0/language.conf
, m_settings(
QStandardPaths::writableLocation(QStandardPaths::ConfigLocation) + "/compressor-2.0/language.conf",
QSettings::IniFormat)
{
qDebug() << "Translator: Settings file path is:" << m_settings.fileName();
// Убедимся, что директория существует сразу после инициализации m_settings
QFileInfo fi(m_settings.fileName());
QDir().mkpath(fi.absolutePath());
qDebug() << "Translator: Config directory path is:" << fi.absolutePath();
}
void Translator::installInitialTranslation()
{
qDebug() << "Translator: installInitialTranslation called.";
// Загружаем сохранённый язык из настроек
QString savedLang = loadLanguageFromSettings();
qDebug() << "Translator: Loaded language from settings:" << savedLang;
if (!savedLang.isEmpty() && (savedLang == "ru" || savedLang == "en")) {
switchToLanguage(savedLang);
} else {
// Fallback: пробуем системный язык
QLocale systemLocale = QLocale::system();
QString langCode = systemLocale.name().left(2);
if (langCode == "ru" || langCode == "en") {
switchToLanguage(langCode);
} else {
switchToLanguage("en"); // Финальный fallback
}
}
}
void Translator::switchToLanguage(const QString& languageCode)
{
qDebug() << "Translator: switchToLanguage called with:" << languageCode;
// Удаляем текущий перевод
qApp->removeTranslator(&m_appTranslator);
if (languageCode == "ru" || languageCode == "en") {
// Загружаем соответствующий .qm файл ИЗ ФАЙЛОВОЙ СИСТЕМЫ
// Путь: /opt/compressor/translations/compressor_ru.qm
QString fileName = QString("/opt/compressor/translations/compressor_%1.qm").arg(languageCode);
qDebug() << "Translator: Loading translation file from filesystem:" << fileName;
if (m_appTranslator.load(fileName)) {
qApp->installTranslator(&m_appTranslator);
m_currentLanguage = languageCode;
// Сохраняем выбранный язык в настройки
saveLanguageToSettings(languageCode);
emit languageChanged(); // Сигнал для обновления интерфейса
} else {
qDebug() << "Translator: Failed to load translation file from filesystem:" << fileName;
}
} else {
qDebug() << "Translator: Invalid language code:" << languageCode;
}
}
void Translator::saveLanguageToSettings(const QString& langCode)
{
qDebug() << "Translator: Saving language to settings:" << langCode;
// Сохраняем в группу [General]
m_settings.setValue("General/Language", langCode);
m_settings.sync(); // Принудительно записываем на диск
qDebug() << "Translator: Sync called, error state:" << m_settings.status();
}
QString Translator::loadLanguageFromSettings()
{
// Читаем из группы [General], возвращаем "en" по умолчанию
QString val = m_settings.value("General/Language", "en").toString();
qDebug() << "Translator: Loaded language value:" << val;
return val;
}