Add English and Russian ChatGUI interface translations
This commit is contained in:
1 parent
972c6b7f0a
commit
27d93ecaf9
50 files changed
+4978
-491
No files matched your search
+30
-11
@@ -1,3 +1,4 @@
|
||||
#include <QCoreApplication>
|
||||
#include <QApplication>
|
||||
#include <QIcon>
|
||||
#include <QPalette>
|
||||
@@ -6,6 +7,8 @@
|
||||
#include <QFile>
|
||||
#include <QLockFile>
|
||||
#include <QMessageBox>
|
||||
#include <QTranslator>
|
||||
#include "gui_language.h"
|
||||
#include <cstdio>
|
||||
#ifdef _WIN32
|
||||
#include <windows.h>
|
||||
@@ -75,13 +78,11 @@ int main(int argc, char *argv[]) {
|
||||
app.setDesktopFileName("org.utun.vibechat");
|
||||
app.setWindowIcon(QIcon(":/icons/app_icon.png"));
|
||||
app.setQuitOnLastWindowClosed(false);
|
||||
debug_config_init();
|
||||
|
||||
/* single-instance: лог/БД/сокеты конфликтуют при втором запуске */
|
||||
/* Блокировка до любых изменений конфига/БД; предупреждение после загрузки языка. */
|
||||
QLockFile lock(QCoreApplication::applicationDirPath() + "/vibechat.lock");
|
||||
if (!lock.tryLock()) {
|
||||
QMessageBox::warning(nullptr, "vibechat", "vibechat is already running.");
|
||||
return 1;
|
||||
}
|
||||
const bool locked = lock.tryLock();
|
||||
|
||||
app.setStyle(QStyleFactory::create("Fusion"));
|
||||
QPalette p;
|
||||
@@ -105,10 +106,31 @@ int main(int argc, char *argv[]) {
|
||||
QString cfgDir = QCoreApplication::applicationDirPath();
|
||||
QString cfgPath = cfgDir + "/vibechat.cfg";
|
||||
/* миграция: старый конфиг chatgui.cfg → vibechat.cfg */
|
||||
if (!QFile::exists(cfgPath) && QFile::exists(cfgDir + "/chatgui.cfg"))
|
||||
if (locked && !QFile::exists(cfgPath) && QFile::exists(cfgDir + "/chatgui.cfg"))
|
||||
QFile::rename(cfgDir + "/chatgui.cfg", cfgPath);
|
||||
|
||||
NodeConfig cfg(cfgPath);
|
||||
if (cfg.exists() && !cfg.load()) {
|
||||
qCritical("Cannot open/read config file: %s", qPrintable(cfgPath));
|
||||
return 1;
|
||||
}
|
||||
|
||||
QTranslator guiTranslator, qtTranslator;
|
||||
const QString language = resolveGuiLanguage(cfg.language());
|
||||
if (!guiTranslator.load(":/translations/chatgui_" + language + ".qm") || !app.installTranslator(&guiTranslator)) {
|
||||
DEBUG_ERROR(DEBUG_CATEGORY_CONFIG, "GUI language: failed to load embedded catalog for %s", qPrintable(language));
|
||||
return 1;
|
||||
}
|
||||
if (language == "ru") {
|
||||
if (!qtTranslator.load(QStringLiteral(":/translations/qtbase_ru.qm")) || !app.installTranslator(&qtTranslator)) {
|
||||
DEBUG_ERROR(DEBUG_CATEGORY_CONFIG, "GUI language: failed to load embedded Qt Russian catalog");
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
if (!locked) {
|
||||
QMessageBox::warning(nullptr, "vibechat", QCoreApplication::translate("ChatGui", "vibechat is already running."));
|
||||
return 1;
|
||||
}
|
||||
bool needSave = false;
|
||||
|
||||
if (!cfg.exists()) {
|
||||
@@ -117,10 +139,6 @@ int main(int argc, char *argv[]) {
|
||||
return 1;
|
||||
}
|
||||
} else {
|
||||
if (!cfg.load()) {
|
||||
qCritical("Cannot open/read config file: %s", qPrintable(cfgPath));
|
||||
return 1;
|
||||
}
|
||||
if (cfg.hasErrors()) {
|
||||
for (const auto& err : cfg.errors())
|
||||
fprintf(stderr, "CONFIG ERROR: %s\n", qPrintable(err));
|
||||
@@ -154,12 +172,13 @@ int main(int argc, char *argv[]) {
|
||||
/* ранняя инициализация лога в GUI-потоке: SoundManager::init() вызывается в
|
||||
* конструкторе MainWindow ДО старта utun-потока, поэтому без этого его диагностика
|
||||
* (ma_engine_init и т.п.) в лог-файл не попадёт. */
|
||||
debug_config_init();
|
||||
debug_enable_function_name(0);
|
||||
debug_enable_file_output(debugFile.toUtf8().constData(), 0);
|
||||
QString lvl = cfg.debugLevel().trimmed();
|
||||
if (lvl.isEmpty()) lvl = QStringLiteral("info");
|
||||
debug_apply_global_level(lvl.toUtf8().constData());
|
||||
DEBUG_INFO(DEBUG_CATEGORY_CONFIG, "GUI language: preference=%s system=%s selected=%s",
|
||||
qPrintable(cfg.language()), qPrintable(QLocale::system().uiLanguages().join(',')), qPrintable(language));
|
||||
|
||||
DbManager db;
|
||||
MainWindow w(nullptr, &db, cfgPath, dbPath, debugFile,
|
||||
|
||||
Reference in new issue
Block a user