From 817f356b33b627b12d7e058648aa6d18591e9112 Mon Sep 17 00:00:00 2001 From: Syping Date: Fri, 26 Mar 2021 14:58:54 +0100 Subject: [PATCH] add donation system --- .ci/debian_build.sh | 2 + .ci/donate.txt | 1 + .ci/osx_build.sh | 2 + .ci/windows_build.sh | 2 + .ci/wininstall_build.sh | 2 + .flatpak/de.syping.gta5view.yaml | 2 + CMakeLists.txt | 16 +++ OptionsDialog.cpp | 147 +++++++-------------- UserInterface.cpp | 195 +++++++++++++++++++--------- UserInterface.h | 5 + res/btc.svgz | Bin 0 -> 1007 bytes res/donate.qrc | 9 ++ res/eth.svgz | Bin 0 -> 722 bytes res/gta5sync.ts | 212 ++++++++++++++++-------------- res/gta5sync_de.qm | Bin 49081 -> 49358 bytes res/gta5sync_de.ts | 212 ++++++++++++++++-------------- res/gta5sync_en_US.ts | 212 ++++++++++++++++-------------- res/gta5sync_fr.qm | Bin 47732 -> 47790 bytes res/gta5sync_fr.ts | 216 +++++++++++++++++-------------- res/gta5sync_ko.qm | Bin 38653 -> 38703 bytes res/gta5sync_ko.ts | 216 +++++++++++++++++-------------- res/gta5sync_ru.qm | Bin 47087 -> 47153 bytes res/gta5sync_ru.ts | 216 +++++++++++++++++-------------- res/gta5sync_uk.qm | Bin 48345 -> 48409 bytes res/gta5sync_uk.ts | 216 +++++++++++++++++-------------- res/gta5sync_zh_TW.qm | Bin 36031 -> 36081 bytes res/gta5sync_zh_TW.ts | 216 +++++++++++++++++-------------- res/ltc.svgz | Bin 0 -> 593 bytes res/qt6/qtbase_de.qm | Bin 220467 -> 206518 bytes res/qt6/qtbase_zh_TW.qm | Bin 127849 -> 126185 bytes res/xmr.svgz | Bin 0 -> 770 bytes res/zec.svgz | Bin 0 -> 1023 bytes 32 files changed, 1179 insertions(+), 920 deletions(-) create mode 100644 .ci/donate.txt create mode 100644 res/btc.svgz create mode 100644 res/donate.qrc create mode 100644 res/eth.svgz create mode 100644 res/ltc.svgz create mode 100644 res/xmr.svgz create mode 100644 res/zec.svgz diff --git a/.ci/debian_build.sh b/.ci/debian_build.sh index b38ff95..57aa9c9 100755 --- a/.ci/debian_build.sh +++ b/.ci/debian_build.sh @@ -28,7 +28,9 @@ cmake \ "-DGTA5VIEW_BUILDCODE=${PACKAGE_CODE}" \ "-DGTA5VIEW_APPVER=${APPLICATION_VERSION}" \ "-DGTA5VIEW_COMMIT=${APPLICATION_COMMIT}" \ + "-DWITH_DONATE=ON" \ "-DWITH_TELEMETRY=ON" \ + "-DDONATE_ADDRESSES=$(cat ${PROJECT_DIR}/.ci/donate.txt)" \ "-DTELEMETRY_WEBURL=https://dev.syping.de/gta5view-userstats/" \ "-DQCONF_BUILD=ON" \ ../../ && \ diff --git a/.ci/donate.txt b/.ci/donate.txt new file mode 100644 index 0000000..ab58641 --- /dev/null +++ b/.ci/donate.txt @@ -0,0 +1 @@ +btc:187NSQSPzdMpQDGhxZAuw4AhZ7LgoAPV7D,eth:0x19d71DfCa86104d37a13D3c5d419936421CDC569,ltc:LKr6yvBoMMGmcxViS8Kc1A2sDjVSWTXn4m,xmr:43TB3ZMP5nk1pu5EQXRGPzdTKvmFEBGgccX3tNhRknLLiUYQ7z7dNedVHEA6WrWdByZv1isvFmjSGhCF7ddx3eRxFdm5Fzz,zec:t1SpfDKj6qGZFwyRdzJBw9w2PTj8rUixZGh \ No newline at end of file diff --git a/.ci/osx_build.sh b/.ci/osx_build.sh index 81efae8..c8545c4 100755 --- a/.ci/osx_build.sh +++ b/.ci/osx_build.sh @@ -14,7 +14,9 @@ cd build && \ "-DGTA5VIEW_BUILDCODE=${PACKAGE_CODE}" \ "-DGTA5VIEW_APPVER=${APPLICATION_VERSION}" \ "-DGTA5VIEW_COMMIT=${APPLICATION_COMMIT}" \ + "-DWITH_DONATE=ON" \ "-DWITH_TELEMETRY=ON" \ + "-DDONATE_ADDRESSES=$(cat ${PROJECT_DIR}/.ci/donate.txt)" \ "-DTELEMETRY_WEBURL=https://dev.syping.de/gta5view-userstats/" \ ../ && \ make -j 4 && \ diff --git a/.ci/windows_build.sh b/.ci/windows_build.sh index e584dfc..4b85c38 100755 --- a/.ci/windows_build.sh +++ b/.ci/windows_build.sh @@ -17,7 +17,9 @@ mingw64-qt-cmake \ "-DGTA5VIEW_BUILDCODE=${PACKAGE_CODE}" \ "-DGTA5VIEW_APPVER=${APPLICATION_VERSION}" \ "-DGTA5VIEW_COMMIT=${APPLICATION_COMMIT}" \ + "-DWITH_DONATE=ON" \ "-DWITH_TELEMETRY=ON" \ + "-DDONATE_ADDRESSES=$(cat ${PROJECT_DIR}/.ci/donate.txt)" \ "-DTELEMETRY_WEBURL=https://dev.syping.de/gta5view-userstats/" \ .. && \ make -j 4 && \ diff --git a/.ci/wininstall_build.sh b/.ci/wininstall_build.sh index b55aee4..79e24d7 100755 --- a/.ci/wininstall_build.sh +++ b/.ci/wininstall_build.sh @@ -13,7 +13,9 @@ mingw64-qt-cmake \ "-DGTA5VIEW_BUILDCODE=${PACKAGE_CODE}" \ "-DGTA5VIEW_APPVER=${APPLICATION_VERSION}" \ "-DGTA5VIEW_COMMIT=${APPLICATION_COMMIT}" \ + "-DWITH_DONATE=ON" \ "-DWITH_TELEMETRY=ON" \ + "-DDONATE_ADDRESSES=$(cat ${PROJECT_DIR}/.ci/donate.txt)" \ "-DTELEMETRY_WEBURL=https://dev.syping.de/gta5view-userstats/" \ "-DQCONF_BUILD=ON" \ "-DGTA5VIEW_INLANG=RUNDIR:SEPARATOR:lang" \ diff --git a/.flatpak/de.syping.gta5view.yaml b/.flatpak/de.syping.gta5view.yaml index a67c9f7..2e6fa1d 100644 --- a/.flatpak/de.syping.gta5view.yaml +++ b/.flatpak/de.syping.gta5view.yaml @@ -15,6 +15,8 @@ modules: config-opts: - -DFLATPAK_BUILD=ON - -DQCONF_BUILD=ON + - -DGTA5VIEW_BUILDCODE=Flatpak + - -DGTA5VIEW_BUILDTYPE=Release sources: - type: dir path: ../ diff --git a/CMakeLists.txt b/CMakeLists.txt index 661e795..b081148 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -217,6 +217,22 @@ if(FLATPAK_BUILD) ) endif() +option(WITH_DONATE "Donate menu option and donation dialog" OFF) +if(WITH_DONATE) + set(DONATE_ADDRESSES "" CACHE STRING "Donation addresses") + list(APPEND GTA5VIEW_DEFINES + -DGTA5SYNC_DONATE + ) + list(APPEND GTA5VIEW_RESOURCES + res/donate.qrc + ) + if(DONATE_ADDRESSES) + list(APPEND GTA5VIEW_DEFINES + "-DGTA5SYNC_DONATE_ADDRESSES=\"${DONATE_ADDRESSES}\"" + ) + endif() +endif() + option(WITH_MOTD "Developer message system directed to users" OFF) if(WITH_MOTD) set(MOTD_WEBURL "" CACHE STRING "Messages WebURL") diff --git a/OptionsDialog.cpp b/OptionsDialog.cpp index 321d705..bbe5be0 100644 --- a/OptionsDialog.cpp +++ b/OptionsDialog.cpp @@ -234,15 +234,12 @@ void OptionsDialog::setupLanguageBox() availableLanguages.removeDuplicates(); availableLanguages.sort(); - for (QString lang : availableLanguages) - { + for (QString lang : availableLanguages) { // correcting Language Location if possible QString aLang = lang; - if (QFile::exists(":/global/global." % lang % ".loc")) - { + if (QFile::exists(":/global/global." % lang % ".loc")) { QFile locFile(":/global/global." % lang % ".loc"); - if (locFile.open(QFile::ReadOnly)) - { + if (locFile.open(QFile::ReadOnly)) { aLang = QString::fromUtf8(locFile.readLine()).trimmed(); locFile.close(); } @@ -253,8 +250,7 @@ void OptionsDialog::setupLanguageBox() QString langIconStr = "flag-" % TranslationClass::getCountryCode(langLocale); ui->cbAreaLanguage->addItem(QIcon::fromTheme(langIconStr), cbLangStr, lang); - if (currentAreaLanguage == lang) - { + if (currentAreaLanguage == lang) { #if QT_VERSION >= 0x050000 ui->cbAreaLanguage->setCurrentText(cbLangStr); #else @@ -265,8 +261,7 @@ void OptionsDialog::setupLanguageBox() } QString aCurrentAreaLanguage = Translator->getCurrentAreaLanguage(); - if (QFile::exists(":/global/global." % aCurrentAreaLanguage % ".loc")) - { + if (QFile::exists(":/global/global." % aCurrentAreaLanguage % ".loc")) { qDebug() << "locFile found"; QFile locFile(":/global/global." % aCurrentAreaLanguage % ".loc"); if (locFile.open(QFile::ReadOnly)) @@ -286,10 +281,8 @@ void OptionsDialog::setupRadioButtons() contentMode = settings->value("ContentMode", 0).toInt(&contentModeOk); settings->endGroup(); - if (contentModeOk) - { - switch (contentMode) - { + if (contentModeOk) { + switch (contentMode) { case 0: case 20: ui->rbModern->setChecked(true); @@ -329,8 +322,7 @@ void OptionsDialog::setupInterfaceSettings() currentIndex++; } } - else - { + else { if (availableStyles.contains(currentStyle, Qt::CaseInsensitive)) { int currentIndex = 0; for (const QString ¤tStyleFF : availableStyles) { @@ -379,16 +371,13 @@ void OptionsDialog::applySettings() settings->beginGroup("Profile"); int newContentMode = 20; - if (ui->rbModern->isChecked()) - { + if (ui->rbModern->isChecked()) { newContentMode = 20; } - else if (ui->rbClassic->isChecked()) - { + else if (ui->rbClassic->isChecked()) { newContentMode = 10; } - if (ui->cbDoubleclick->isChecked()) - { + if (ui->cbDoubleclick->isChecked()) { newContentMode++; } settings->setValue("ContentMode", newContentMode); @@ -400,18 +389,15 @@ void OptionsDialog::applySettings() settings->endGroup(); settings->beginGroup("Pictures"); - if (ui->cbPicCustomQuality->isChecked()) - { + if (ui->cbPicCustomQuality->isChecked()) { settings->setValue("CustomQuality", ui->hsPicQuality->value()); } settings->setValue("CustomQualityEnabled", ui->cbPicCustomQuality->isChecked()); QString sizeMode = "Default"; - if (ui->rbPicDesktopRes->isChecked()) - { + if (ui->rbPicDesktopRes->isChecked()) { sizeMode = "Desktop"; } - else if (ui->rbPicCustomRes->isChecked()) - { + else if (ui->rbPicCustomRes->isChecked()) { sizeMode = "Custom"; settings->setValue("CustomSize", QSize(ui->sbPicExportWidth->value(), ui->sbPicExportHeight->value())); } @@ -456,8 +442,7 @@ void OptionsDialog::applySettings() settings->endGroup(); Telemetry->refresh(); Telemetry->work(); - if (ui->cbUsageData->isChecked() && Telemetry->canPush()) - { + if (ui->cbUsageData->isChecked() && Telemetry->canPush()) { QJsonDocument jsonDocument; QJsonObject jsonObject; jsonObject["Type"] = "SettingsUpdated"; @@ -478,22 +463,19 @@ void OptionsDialog::applySettings() bool languageChanged = ui->cbLanguage->itemData(ui->cbLanguage->currentIndex()).toString() != currentLanguage; bool languageAreaChanged = ui->cbAreaLanguage->itemData(ui->cbLanguage->currentIndex()).toString() != currentAreaLanguage; #endif - if (languageChanged) - { + if (languageChanged) { Translator->unloadTranslation(qApp); Translator->initUserLanguage(); Translator->loadTranslation(qApp); } - else if (languageAreaChanged) - { + else if (languageAreaChanged) { Translator->initUserLanguage(); } settings->sync(); emit settingsApplied(newContentMode, languageChanged); - if ((forceCustomFolder && ui->txtFolder->text() != currentCFolder) || (forceCustomFolder != currentFFolder && forceCustomFolder)) - { + if ((forceCustomFolder && ui->txtFolder->text() != currentCFolder) || (forceCustomFolder != currentFFolder && forceCustomFolder)) { QMessageBox::information(this, tr("%1", "%1").arg(GTA5SYNC_APPSTR), tr("The new Custom Folder will initialise after you restart %1.").arg(GTA5SYNC_APPSTR)); } } @@ -510,11 +492,9 @@ void OptionsDialog::setupDefaultProfile() void OptionsDialog::commitProfiles(const QStringList &profiles) { - for (QString profile : profiles) - { + for (QString profile : profiles) { ui->cbProfiles->addItem(tr("Profile: %1").arg(profile), profile); - if (defaultProfile == profile) - { + if (defaultProfile == profile) { #if QT_VERSION >= 0x050000 ui->cbProfiles->setCurrentText(tr("Profile: %1").arg(profile)); #else @@ -552,8 +532,7 @@ void OptionsDialog::setupPictureSettings() // Quality Settings customQuality = settings->value("CustomQuality", defaultQuality).toInt(); - if (customQuality < 1 || customQuality > 100) - { + if (customQuality < 1 || customQuality > 100) { customQuality = 100; } ui->hsPicQuality->setValue(customQuality); @@ -561,42 +540,34 @@ void OptionsDialog::setupPictureSettings() // Size Settings cusExportSize = settings->value("CustomSize", defExportSize).toSize(); - if (cusExportSize.width() > 3840) - { + if (cusExportSize.width() > 3840) { cusExportSize.setWidth(3840); } - else if (cusExportSize.height() > 2160) - { + else if (cusExportSize.height() > 2160) { cusExportSize.setHeight(2160); } - if (cusExportSize.width() < 1) - { + if (cusExportSize.width() < 1) { cusExportSize.setWidth(1); } - else if (cusExportSize.height() < 1) - { + else if (cusExportSize.height() < 1) { cusExportSize.setHeight(1); } ui->sbPicExportWidth->setValue(cusExportSize.width()); ui->sbPicExportHeight->setValue(cusExportSize.height()); QString sizeMode = settings->value("ExportSizeMode", "Default").toString(); - if (sizeMode == "Desktop") - { + if (sizeMode == "Desktop") { ui->rbPicDesktopRes->setChecked(true); } - else if (sizeMode == "Custom") - { + else if (sizeMode == "Custom") { ui->rbPicCustomRes->setChecked(true); } - else - { + else { ui->rbPicDefaultRes->setChecked(true); } aspectRatio = (Qt::AspectRatioMode)settings->value("AspectRatio", Qt::KeepAspectRatio).toInt(); - if (aspectRatio == Qt::IgnoreAspectRatio) - { + if (aspectRatio == Qt::IgnoreAspectRatio) { ui->cbIgnoreAspectRatio->setChecked(true); } @@ -615,17 +586,14 @@ void OptionsDialog::setupStatisticsSettings() ui->cbUsageData->setChecked(settings->value("PushUsageData", false).toBool()); settings->endGroup(); - if (Telemetry->isStateForced()) - { + if (Telemetry->isStateForced()) { ui->cbParticipateStats->setEnabled(false); } - if (Telemetry->isRegistered()) - { + if (Telemetry->isRegistered()) { ui->labParticipationID->setText(tr("Participation ID: %1").arg(Telemetry->getRegisteredID())); } - else - { + else { ui->labParticipationID->setText(tr("Participation ID: %1").arg(tr("Not registered"))); ui->cmdCopyStatsID->setVisible(false); } @@ -639,62 +607,49 @@ void OptionsDialog::setupWindowsGameSettings() #ifdef GTA5SYNC_GAME GameVersion gameVersion = AppEnv::getGameVersion(); #ifdef Q_OS_WIN - if (gameVersion != GameVersion::NoVersion) - { - if (gameVersion == GameVersion::SocialClubVersion) - { + if (gameVersion != GameVersion::NoVersion) { + if (gameVersion == GameVersion::SocialClubVersion) { ui->gbSteam->setDisabled(true); ui->labSocialClubFound->setText(tr("Found: %1").arg(QString("%1").arg(tr("Yes")))); ui->labSteamFound->setText(tr("Found: %1").arg(QString("%1").arg(tr("No")))); - if (AppEnv::getGameLanguage(GameVersion::SocialClubVersion) != GameLanguage::Undefined) - { + if (AppEnv::getGameLanguage(GameVersion::SocialClubVersion) != GameLanguage::Undefined) { ui->labSocialClubLanguage->setText(tr("Language: %1").arg(QLocale(AppEnv::gameLanguageToString(AppEnv::getGameLanguage(GameVersion::SocialClubVersion))).nativeLanguageName())); } - else - { + else { ui->labSocialClubLanguage->setText(tr("Language: %1").arg(tr("OS defined"))); } ui->labSteamLanguage->setVisible(false); } - else if (gameVersion == GameVersion::SteamVersion) - { + else if (gameVersion == GameVersion::SteamVersion) { ui->gbSocialClub->setDisabled(true); ui->labSocialClubFound->setText(tr("Found: %1").arg(QString("%1").arg(tr("No")))); ui->labSteamFound->setText(tr("Found: %1").arg(QString("%1").arg(tr("Yes")))); ui->labSocialClubLanguage->setVisible(false); - if (AppEnv::getGameLanguage(GameVersion::SteamVersion) != GameLanguage::Undefined) - { + if (AppEnv::getGameLanguage(GameVersion::SteamVersion) != GameLanguage::Undefined) { ui->labSteamLanguage->setText(tr("Language: %1").arg(QLocale(AppEnv::gameLanguageToString(AppEnv::getGameLanguage(GameVersion::SteamVersion))).nativeLanguageName())); } - else - { + else { ui->labSteamLanguage->setText(tr("Language: %1").arg(tr("Steam defined"))); } } - else - { + else { ui->labSocialClubFound->setText(tr("Found: %1").arg(QString("%1").arg(tr("Yes")))); ui->labSteamFound->setText(tr("Found: %1").arg(QString("%1").arg(tr("Yes")))); - if (AppEnv::getGameLanguage(GameVersion::SocialClubVersion) != GameLanguage::Undefined) - { + if (AppEnv::getGameLanguage(GameVersion::SocialClubVersion) != GameLanguage::Undefined) { ui->labSocialClubLanguage->setText(tr("Language: %1").arg(QLocale(AppEnv::gameLanguageToString(AppEnv::getGameLanguage(GameVersion::SocialClubVersion))).nativeLanguageName())); } - else - { + else { ui->labSocialClubLanguage->setText(tr("Language: %1").arg(tr("OS defined"))); } - if (AppEnv::getGameLanguage(GameVersion::SteamVersion) != GameLanguage::Undefined) - { + if (AppEnv::getGameLanguage(GameVersion::SteamVersion) != GameLanguage::Undefined) { ui->labSteamLanguage->setText(tr("Language: %1").arg(QLocale(AppEnv::gameLanguageToString(AppEnv::getGameLanguage(GameVersion::SteamVersion))).nativeLanguageName())); } - else - { + else { ui->labSteamLanguage->setText(tr("Language: %1").arg(tr("Steam defined"))); } } } - else - { + else { ui->tabWidget->removeTab(ui->tabWidget->indexOf(ui->tabGame)); } #else @@ -707,12 +662,10 @@ void OptionsDialog::setupWindowsGameSettings() void OptionsDialog::on_cbIgnoreAspectRatio_toggled(bool checked) { - if (checked) - { + if (checked) { aspectRatio = Qt::IgnoreAspectRatio; } - else - { + else { aspectRatio = Qt::KeepAspectRatio; } } @@ -724,8 +677,7 @@ void OptionsDialog::setupCustomGTAFolder() settings->beginGroup("dir"); currentCFolder = settings->value("dir", "").toString(); currentFFolder = settings->value("force", false).toBool(); - if (currentCFolder == "" && ok) - { + if (currentCFolder == "" && ok) { currentCFolder = defaultGameFolder; } ui->txtFolder->setText(currentCFolder); @@ -754,8 +706,7 @@ void OptionsDialog::setupSnapmaticPictureViewer() void OptionsDialog::on_cmdExploreFolder_clicked() { QString GTAV_Folder = QFileDialog::getExistingDirectory(this, UserInterface::tr("Select GTA V Folder..."), StandardPaths::documentsLocation(), QFileDialog::ShowDirsOnly); - if (QFileInfo(GTAV_Folder).exists()) - { + if (QFileInfo(GTAV_Folder).exists()) { ui->txtFolder->setText(GTAV_Folder); } } diff --git a/UserInterface.cpp b/UserInterface.cpp index fad032a..08309c5 100644 --- a/UserInterface.cpp +++ b/UserInterface.cpp @@ -38,6 +38,7 @@ #include #include #include +#include #include #include #include @@ -50,11 +51,11 @@ UserInterface::UserInterface(ProfileDatabase *profileDB, CrewDatabase *crewDB, DatabaseThread *threadDB, MessageThread *threadMessage, QWidget *parent) : QMainWindow(parent), profileDB(profileDB), crewDB(crewDB), threadDB(threadDB), threadMessage(threadMessage), ui(new Ui::UserInterface) -#else + #else UserInterface::UserInterface(ProfileDatabase *profileDB, CrewDatabase *crewDB, DatabaseThread *threadDB, QWidget *parent) : QMainWindow(parent), profileDB(profileDB), crewDB(crewDB), threadDB(threadDB), ui(new Ui::UserInterface) -#endif + #endif { ui->setupUi(this); contentMode = 0; @@ -153,6 +154,84 @@ UserInterface::UserInterface(ProfileDatabase *profileDB, CrewDatabase *crewDB, D ui->actionDelete_selected->setIcon(QIcon::fromTheme("remove")); } +#ifdef GTA5SYNC_DONATE +#ifdef GTA5SYNC_DONATE_ADDRESSES + donateAction = new QAction(tr("&Donate"), this); + if (QIcon::hasThemeIcon("help-donate")) { + donateAction->setIcon(QIcon::fromTheme("help-donate")); + } + else if (QIcon::hasThemeIcon("taxes-finances")) { + donateAction->setIcon(QIcon::fromTheme("taxes-finances")); + } + ui->menuHelp->insertAction(ui->actionAbout_gta5sync, donateAction); + QObject::connect(donateAction, &QAction::triggered, this, [=](){ + QDialog *donateDialog = new QDialog(this); + donateDialog->setWindowTitle(QString("%1 - %2").arg(GTA5SYNC_APPSTR, tr("Donate"))); +#if QT_VERSION >= 0x050900 + donateDialog->setWindowFlag(Qt::WindowContextHelpButtonHint, false); +#else + donateDialog->setWindowFlags(donateDialog->windowFlags()^Qt::WindowContextHelpButtonHint); +#endif + QVBoxLayout *donateLayout = new QVBoxLayout; + donateDialog->setLayout(donateLayout); + QLabel *methodsLabel = new QLabel(QString("%1").arg(tr("Donation methods")), this); + methodsLabel->setWordWrap(true); + donateLayout->addWidget(methodsLabel); + const QStringList addressList = QString::fromUtf8(GTA5SYNC_DONATE_ADDRESSES).split(','); + for (const QString &address : addressList) { + const QStringList addressList = address.split(':'); + if (addressList.length() == 2) { + const QString currency = addressList.at(0); + const QString address = addressList.at(1); + QHBoxLayout *addressLayout = new QHBoxLayout; + const QString iconPath = QString(":/donate/%1.svgz").arg(currency); + if (QFile::exists(iconPath)) { + QLabel *currencyLabel = new QLabel(this); + currencyLabel->setFixedSize(32, 32); + currencyLabel->setScaledContents(true); + currencyLabel->setPixmap(QIcon(iconPath).pixmap(QSize(32, 32))); + addressLayout->addWidget(currencyLabel); + } + else { + QLabel *currencyLabel = new QLabel(QString("%1").arg(currency.toUpper()), this); + addressLayout->addWidget(currencyLabel); + } + QLabel *addressLabel = new QLabel(address, this); + addressLabel->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); + addressLabel->setTextFormat(Qt::PlainText); + addressLabel->setTextInteractionFlags(Qt::TextSelectableByMouse); + addressLabel->setWordWrap(true); + addressLayout->addWidget(addressLabel); + QPushButton *addressButton = new QPushButton(tr("Copy"), this); + QObject::connect(addressButton, &QPushButton::pressed, this, [=](){ + QApplication::clipboard()->setText(address); + }); + addressLayout->addWidget(addressButton); + donateLayout->addLayout(addressLayout); + } + } + QHBoxLayout *buttonLayout = new QHBoxLayout; + buttonLayout->addSpacerItem(new QSpacerItem(0, 0, QSizePolicy::Expanding, QSizePolicy::Minimum)); + QPushButton *closeButton = new QPushButton(donateDialog); + closeButton->setText(tr("&Close")); + if (QIcon::hasThemeIcon("dialog-close")) { + closeButton->setIcon(QIcon::fromTheme("dialog-close")); + } + else if (QIcon::hasThemeIcon("gtk-close")) { + closeButton->setIcon(QIcon::fromTheme("gtk-close")); + } + buttonLayout->addWidget(closeButton); + donateLayout->addLayout(buttonLayout); + QObject::connect(closeButton, &QPushButton::clicked, donateDialog, &QDialog::accept); + QObject::connect(donateDialog, &QDialog::finished, donateDialog, &QDialog::deleteLater); + QTimer::singleShot(0, closeButton, [=](){ + closeButton->setFocus(); + }); + donateDialog->open(); + }); +#endif +#endif + // DPI calculation qreal screenRatio = AppEnv::screenRatio(); #ifndef Q_QS_ANDROID @@ -172,22 +251,20 @@ void UserInterface::setupDirEnv(bool showFolderDialog) if (folderExists) { QDir::setCurrent(GTAV_Folder); } - else { - if (showFolderDialog) { - GTAV_Folder = QFileDialog::getExistingDirectory(this, tr("Select GTA V Folder..."), StandardPaths::documentsLocation(), QFileDialog::ShowDirsOnly); - if (QFileInfo(GTAV_Folder).exists()) { - folderExists = true; - QDir::setCurrent(GTAV_Folder); - AppEnv::setGameFolder(GTAV_Folder); + else if (showFolderDialog) { + GTAV_Folder = QFileDialog::getExistingDirectory(this, tr("Select GTA V Folder..."), StandardPaths::documentsLocation(), QFileDialog::ShowDirsOnly); + if (QFileInfo(GTAV_Folder).exists()) { + folderExists = true; + QDir::setCurrent(GTAV_Folder); + AppEnv::setGameFolder(GTAV_Folder); - // First time folder selection save - settings.beginGroup("dir"); - if (settings.value("dir", "").toString().isEmpty()) - { - settings.setValue("dir", GTAV_Folder); - } - settings.endGroup(); + // First time folder selection save + settings.beginGroup("dir"); + if (settings.value("dir", "").toString().isEmpty()) + { + settings.setValue("dir", GTAV_Folder); } + settings.endGroup(); } } @@ -289,8 +366,7 @@ void UserInterface::openProfile(const QString &profileName_) void UserInterface::closeProfile() { - if (profileOpen) - { + if (profileOpen) { closeProfile_p(); } setWindowTitle(defaultWindowTitle.arg(tr("Select Profile"))); @@ -465,68 +541,61 @@ fileDialogPreOpen: bool UserInterface::openFile(QString selectedFile, bool warn) { QString selectedFileName = QFileInfo(selectedFile).fileName(); - if (QFile::exists(selectedFile)) - { - if (selectedFileName.left(4) == "PGTA" || selectedFileName.right(4) == ".g5e") - { + if (QFile::exists(selectedFile)) { + if (selectedFileName.left(4) == "PGTA" || selectedFileName.right(4) == ".g5e") { SnapmaticPicture *picture = new SnapmaticPicture(selectedFile); - if (picture->readingPicture()) - { + if (picture->readingPicture()) { openSnapmaticFile(picture); delete picture; return true; } - else - { - if (warn) QMessageBox::warning(this, tr("Open File"), ProfileInterface::tr("Failed to read Snapmatic picture")); + else { + if (warn) + QMessageBox::warning(this, tr("Open File"), ProfileInterface::tr("Failed to read Snapmatic picture")); delete picture; return false; } } - else if (selectedFileName.left(4) == "SGTA") - { + else if (selectedFileName.left(4) == "SGTA") { SavegameData *savegame = new SavegameData(selectedFile); - if (savegame->readingSavegame()) - { + if (savegame->readingSavegame()) { openSavegameFile(savegame); delete savegame; return true; } - else - { - if (warn) QMessageBox::warning(this, tr("Open File"), ProfileInterface::tr("Failed to read Savegame file")); + else { + if (warn) + QMessageBox::warning(this, tr("Open File"), ProfileInterface::tr("Failed to read Savegame file")); delete savegame; return false; } } - else - { + else { SnapmaticPicture *picture = new SnapmaticPicture(selectedFile); SavegameData *savegame = new SavegameData(selectedFile); - if (picture->readingPicture()) - { + if (picture->readingPicture()) { delete savegame; openSnapmaticFile(picture); delete picture; return true; } - else if (savegame->readingSavegame()) - { + else if (savegame->readingSavegame()) { delete picture; openSavegameFile(savegame); delete savegame; return true; } - else - { + else { delete savegame; delete picture; - if (warn) QMessageBox::warning(this, tr("Open File"), tr("Can't open %1 because of not valid file format").arg("\""+selectedFileName+"\"")); + if (warn) + QMessageBox::warning(this, tr("Open File"), tr("Can't open %1 because of not valid file format").arg("\""+selectedFileName+"\"")); return false; } } } - if (warn) QMessageBox::warning(this, tr("Open File"), ProfileInterface::tr("No valid file is selected")); + if (warn) + QMessageBox::warning(this, tr("Open File"), ProfileInterface::tr("No valid file is selected")); return false; } @@ -571,13 +640,11 @@ void UserInterface::openSavegameFile(SavegameData *savegame) void UserInterface::settingsApplied(int _contentMode, bool languageChanged) { - if (languageChanged) - { + if (languageChanged) { retranslateUi(); } contentMode = _contentMode; - if (profileOpen) - { + if (profileOpen) { profileUI->settingsApplied(contentMode, languageChanged); } } @@ -611,7 +678,11 @@ void UserInterface::showMessages(const QStringList messages) { QDialog *messageDialog = new QDialog(this); messageDialog->setWindowTitle(tr("%1 - Messages").arg(GTA5SYNC_APPSTR)); +#if QT_VERSION >= 0x050900 + messageDialog->setWindowFlag(Qt::WindowContextHelpButtonHint, false); +#else messageDialog->setWindowFlags(messageDialog->windowFlags()^Qt::WindowContextHelpButtonHint); +#endif QVBoxLayout *messageLayout = new QVBoxLayout; messageDialog->setLayout(messageLayout); QStackedWidget *stackWidget = new QStackedWidget(messageDialog); @@ -682,7 +753,9 @@ void UserInterface::showMessages(const QStringList messages) }); QObject::connect(closeButton, &QPushButton::clicked, messageDialog, &QDialog::accept); QObject::connect(messageDialog, &QDialog::finished, messageDialog, &QDialog::deleteLater); - QTimer::singleShot(0, closeButton, SLOT(setFocus())); + QTimer::singleShot(0, closeButton, [=](){ + closeButton->setFocus(); + }); messageDialog->show(); } @@ -698,10 +771,8 @@ void UserInterface::updateCacheId(uint cacheId) void UserInterface::on_actionSelect_GTA_Folder_triggered() { QString GTAV_Folder_Temp = QFileDialog::getExistingDirectory(this, tr("Select GTA V Folder..."), StandardPaths::documentsLocation(), QFileDialog::ShowDirsOnly); - if (QFileInfo(GTAV_Folder_Temp).exists()) - { - if (profileOpen) - { + if (QFileInfo(GTAV_Folder_Temp).exists()) { + if (profileOpen) { closeProfile_p(); } GTAV_Folder = GTAV_Folder_Temp; @@ -714,36 +785,36 @@ void UserInterface::on_actionSelect_GTA_Folder_triggered() void UserInterface::on_action_Enable_In_game_triggered() { if (profileOpen) - { profileUI->enableSelected(); - } } void UserInterface::on_action_Disable_In_game_triggered() { if (profileOpen) - { profileUI->disableSelected(); - } } void UserInterface::retranslateUi() { ui->retranslateUi(this); +#ifdef GTA5SYNC_DONATE +#ifdef GTA5SYNC_DONATE_ADDRESSES + donateAction->setText(tr("&Donate")); +#endif +#endif ui->actionAbout_gta5sync->setText(tr("&About %1").arg(GTA5SYNC_APPSTR)); QString appVersion = GTA5SYNC_APPVER; #ifndef GTA5SYNC_BUILDTYPE_REL #ifdef GTA5SYNC_COMMIT - if (!appVersion.contains("-")) { appVersion = appVersion % "-" % GTA5SYNC_COMMIT; } + if (!appVersion.contains("-")) + appVersion = appVersion % "-" % GTA5SYNC_COMMIT; #endif #endif ui->labVersion->setText(QString("%1 %2").arg(GTA5SYNC_APPSTR, appVersion)); - if (profileOpen) - { + if (profileOpen) { setWindowTitle(defaultWindowTitle.arg(profileName)); } - else - { + else { setWindowTitle(defaultWindowTitle.arg(tr("Select Profile"))); } } diff --git a/UserInterface.h b/UserInterface.h index 08c22ef..12abc90 100644 --- a/UserInterface.h +++ b/UserInterface.h @@ -90,6 +90,11 @@ private: DatabaseThread *threadDB; #ifdef GTA5SYNC_MOTD MessageThread *threadMessage; +#endif +#ifdef GTA5SYNC_DONATE +#ifdef GTA5SYNC_DONATE_ADDRESSES + QAction *donateAction; +#endif #endif Ui::UserInterface *ui; ProfileInterface *profileUI; diff --git a/res/btc.svgz b/res/btc.svgz new file mode 100644 index 0000000000000000000000000000000000000000..e10b3a5aee8f0fce43f8f1d80f654519c0aded63 GIT binary patch literal 1007 zcmV-RCO|-A#*16v^S!uzfd$fo}Ui*Qz8xP+1Bj zCAl|W-!oKfCvAXcK@7>mGv~~VoXyv7mu~gkj?;PQx0w<$TeW>XH0S=f&Hng(UxaKm z%~ju2-O#t&tRJ$kyNAv6e0*4~R(RY`>!#jjr+I!{m*wNr*ok30mQ7u@U3+Q!c`B7q zWp;)~=4`YFBar!VioV{^EnUtV6s3nh?>F_u!7S{FbR)AxR^z7-#z zLgQyowUn~N-5vSAs8f4Bp5|@lOxnJjoB4Fxy(^wd2j^y+;bq8n*ljNDTs75P@y&8~ zJy9khfPsbeuRrgX9rks-{&N`re%s=Y0o7l_6EtMI+wrEU*N0)eRP*k9sg5n{{RxgX z<^AFVc>ey_-bokQv7Lsev2H(YVN+ku{HXkGK6l+OoFrS7{~|rlUAs#;m+tme~I_W@?M*_VTlq^j(C%B^uEBvDRLcw_3q2<=U-yikS;t%M_=YcH&K1qI=Q z&NT^SEf_*!!50ak7JMjx(9tgVoB=wajm;ClF7TK$z}q4b+9jvS7XeGkgf~k@o#4T| z-qf>O_NZ?S`poivzyILZIH4qQ0t3I24YCOf*}_R%IAM)1Jc<&EAfz{)5(cpq-i3mM zRSK04(2eul3a4C+gQy8B7KJ-T7_ev&6dyaMnMHxbSz;0y?<5p+CQmfp8LSE=Rmj9K z83!J1G-9iL$6e=hskrz7=St{A7s=!#yq%Jf9Po(V3Cp1)QzMnuhzTdCD;j{8(Q!;D zwU9=4Me1PgxSc4Di~$d%W(u8F=@e5qj+OGob(NYWEHZ&%;i(KVf>ftG5jt(X*u!f> zjCG2|$iRtZ#Bm_Ll$4TL%oGeHAo=$(EA@sjF8BhlTE})2MW_x*t|E38D5YY5R&wl& z)0riw*hw^F$la{M2NL5rs_2u8iWjj5=W6y^b|YN^@gat5je@De?d@ zJQJk+>xDU8fefT{8hm`mB02{O1$acuA|N_d!FSvxrk4uy7X#0q0ewg##0p&Q1*I}t dOaJ}2&GlEYJmQ})|K9H&{sDm&ok_z7007jX@qqvU literal 0 HcmV?d00001 diff --git a/res/donate.qrc b/res/donate.qrc new file mode 100644 index 0000000..8d652ab --- /dev/null +++ b/res/donate.qrc @@ -0,0 +1,9 @@ + + + btc.svgz + eth.svgz + ltc.svgz + xmr.svgz + zec.svgz + + diff --git a/res/eth.svgz b/res/eth.svgz new file mode 100644 index 0000000000000000000000000000000000000000..a2fbcc5eadcb2af41261b15ef175899daec4b981 GIT binary patch literal 722 zcmV;@0xkU?iwFP!000000IgKpirX*{ea}}2FNKySvLxHF9qcT$OJSi8z0${^wG~Iy zmW-_2_UkJtac&!yEYt#98l9OrIx}*1ziDc)Vyfd(ub3ldh$OIe)8I$JB~B`Oa0_-g%{KZ57;k8G7EZRBH~g7>U(%ZEtpm+@U60hVHtgAo30aoTT-3b1VqS5! z{v5z3&-VltPip?c~LV>SP1^v?X_hQ;V@%lZJj5T+1vsccQI^j=vs+`9NbwK@Hx zjqCw`7m4edOx#BIJUd>{dA1 znLyUcdRs}+w?OXQ1)&|6O(CRsW=cA9E4jI`xfdh>jD|@Zz&Hd!N+61dNkSk=L7apT z2g7lMV073+VCO+nh%q?y$)3Vqu - - + + Snapmatic Image Editor - + Patching of Snapmatic Image failed because of I/O Error - + Patching of Snapmatic Image failed because of Image Error @@ -728,26 +728,26 @@ Y: %2 - - - - - - + + + + + + Found: %1 - - - - - - - - + + + + + + + + Language: %1 @@ -768,7 +768,7 @@ Y: %2 - + Participate in %1 User Statistics @@ -804,8 +804,8 @@ Y: %2 - - + + Participation ID: %1 @@ -828,7 +828,7 @@ Y: %2 - + Current: %1 @@ -923,62 +923,62 @@ Y: %2 - + %1 %1 - + The new Custom Folder will initialise after you restart %1. - + No Profile No Profile, as default - - - + + + Profile: %1 - + View %1 User Statistics Online - + Not registered - - - - + + + + Yes - - + + No - - + + OS defined - - + + Steam defined @@ -1055,42 +1055,42 @@ Y: %2 - + Key 1 - Avatar Preview Mode Key 2 - Toggle Overlay Arrow Keys - Navigate - + Snapmatic Picture Viewer - + Failed at %1 - - - + + + No Players - - + + No Crew - + Unknown Location - + Avatar Preview Mode Press 1 for Default View @@ -1341,7 +1341,7 @@ Press 1 for Default View - + All files (**) @@ -1386,26 +1386,26 @@ Press 1 for Default View - + GTA V Export (*.g5e) - + Savegames files (SGTA*) - + Snapmatic pictures (PGTA*) - + No valid file is selected @@ -1424,13 +1424,13 @@ Press 1 for Default View - + Failed to read Snapmatic picture - + Failed to read Savegame file @@ -1640,7 +1640,7 @@ Press 1 for Default View - + All profile files (*.g5e SGTA* PGTA*) @@ -1854,8 +1854,8 @@ Press 1 for Default View - - + + Snapmatic Properties @@ -1947,8 +1947,8 @@ Press 1 for Default View - - + + Patching of Snapmatic Properties failed because of I/O Error @@ -1960,72 +1960,72 @@ Press 1 for Default View - + Snapmatic Crew - + New Snapmatic crew: - + Snapmatic Title - + New Snapmatic title: - - - + + + Edit - + Players: %1 (%2) Multiple Player are inserted here - + Player: %1 (%2) One Player is inserted here - + Title: %1 (%2) - - + + Appropriate: %1 - + Yes Yes, should work fine - + No No, could lead to issues - + Crew: %1 (%2) @@ -2259,7 +2259,7 @@ Press 1 for Default View UserInterface - + %2 - %1 @@ -2291,7 +2291,8 @@ Press 1 for Default View - + + &Close @@ -2327,8 +2328,8 @@ Press 1 for Default View - - + + &About %1 @@ -2384,15 +2385,15 @@ Press 1 for Default View - + Select &GTA V Folder... - - - + + + Select GTA V Folder... @@ -2449,32 +2450,53 @@ Press 1 for Default View - - - + + + Select Profile - + + + &Donate + + + + + Donate + + + + + Donation methods + + + + + Copy + + + + Open File... - - - - + + + + Open File - + Can't open %1 because of not valid file format - + %1 - Messages diff --git a/res/gta5sync_de.qm b/res/gta5sync_de.qm index 1397746bae56aed410726c04f14b10eb750708ad..3149d28911c57acd9f232c32841d8069568b26d3 100644 GIT binary patch delta 473 zcmZ9FJ4jn`6o=0_-rOhEIGEH$Yik`cq&i5@B^HYcf5@PZM- z51cc6eB!2V^e+*o2nlFKul!BVHB(4vR ImageEditorDialog - - + + Snapmatic Image Editor @@ -210,13 +210,13 @@ Snapmatic Bilder und Spielständen S&chließen - + Patching of Snapmatic Image failed because of I/O Error Patchen von Snapmatic Bild fehlgeschlagen wegen I/O Fehler - + Patching of Snapmatic Image failed because of Image Error Patchen von Snapmatic Bild fehlgeschlagen wegen Bild Fehler @@ -756,26 +756,26 @@ Y: %2 - - - - - - + + + + + + Found: %1 Gefunden: %1 - - - - - - - - + + + + + + + + Language: %1 Sprache: %1 @@ -796,7 +796,7 @@ Y: %2 - + Participate in %1 User Statistics An %1 Benutzerstatistik teilnehmen @@ -827,8 +827,8 @@ Y: %2 - - + + Participation ID: %1 Teilnahme ID: %1 @@ -885,7 +885,7 @@ Y: %2 - + Current: %1 Aktuell: %1 @@ -922,7 +922,7 @@ Y: %2 Abbre&chen - + %1 %1 %1 @@ -961,56 +961,56 @@ Y: %2 %1 (Sprachenpriorität) - + The new Custom Folder will initialise after you restart %1. Der eigene Ordner wird initialisiert sobald du %1 neugestartet hast. - + View %1 User Statistics Online %1 Benutzerstatistik Online ansehen - + Not registered Nicht registriert - - - - + + + + Yes Ja - - + + No Nein - - + + OS defined OS-defined - - + + Steam defined Steam-definiert - + No Profile No Profile, as default Kein Profil - - - + + + Profile: %1 Profil: %1 @@ -1090,7 +1090,7 @@ Y: %2 &Kartenansicht öffnen... - + Key 1 - Avatar Preview Mode Key 2 - Toggle Overlay Arrow Keys - Navigate @@ -1099,37 +1099,37 @@ Taste 2 - Overlay umschalten Pfeiltasten - Navigieren - + Snapmatic Picture Viewer Snapmatic Bildansicht - + Failed at %1 Fehlgeschlagen beim %1 - - + + No Crew Keine Crew - - - + + + No Players Keine Spieler - + Avatar Preview Mode Press 1 for Default View Avatar Vorschaumodus Drücke 1 für Standardmodus - + Unknown Location Unbekannter Standort @@ -1379,13 +1379,13 @@ Drücke 1 für Standardmodus - + Savegames files (SGTA*) Spielstanddateien (SGTA*) - + Snapmatic pictures (PGTA*) Snapmatic Bilder (PGTA*) @@ -1405,7 +1405,7 @@ Drücke 1 für Standardmodus - + All files (**) Alle Dateien (**) @@ -1426,13 +1426,13 @@ Drücke 1 für Standardmodus - + Failed to read Snapmatic picture Fehler beim Lesen vom Snapmatic Bild - + Failed to read Savegame file Fehler beim Lesen von Spielstanddatei @@ -1473,7 +1473,7 @@ Drücke 1 für Standardmodus - + No valid file is selected Keine gültige Datei wurde ausgewählt @@ -1677,13 +1677,13 @@ Drücke 1 für Standardmodus Exportiere Datei %1 von %2 Dateien - + All profile files (*.g5e SGTA* PGTA*) Alle Profildateien (*.g5e SGTA* PGTA*) - + GTA V Export (*.g5e) GTA V Export (*.g5e) @@ -1906,8 +1906,8 @@ Drücke 1 für Standardmodus - - + + Snapmatic Properties Snapmatic Eigenschaften @@ -1949,7 +1949,7 @@ Drücke 1 für Standardmodus - + Snapmatic Title Snapmatic Titel @@ -1959,30 +1959,30 @@ Drücke 1 für Standardmodus Snapmatic Werte - + Crew: %1 (%2) Crew: %1 (%2) - + Title: %1 (%2) Titel: %1 (%2) - + Players: %1 (%2) Multiple Player are inserted here Spieler: %1 (%2) - + Player: %1 (%2) One Player is inserted here Spieler: %1 (%2) - - + + Appropriate: %1 Angemessen: %1 @@ -2022,20 +2022,20 @@ Drücke 1 für Standardmodus Abbre&chen - - - + + + Edit Bearbeiten - + Yes Yes, should work fine Ja - + No No, could lead to issues Nein @@ -2057,27 +2057,27 @@ Drücke 1 für Standardmodus - - + + Patching of Snapmatic Properties failed because of I/O Error Patchen von Snapmatic Eigenschaften fehlgeschlagen wegen I/O Fehler - + New Snapmatic title: Neuer Snapmatic Titel: - + Snapmatic Crew Snapmatic Crew - + New Snapmatic crew: Neue Snapmatic Crew: @@ -2410,7 +2410,7 @@ Drücke 1 für Standardmodus - + Select &GTA V Folder... Wähle &GTA V Ordner... @@ -2426,7 +2426,8 @@ Drücke 1 für Standardmodus - + + &Close S&chließen @@ -2461,53 +2462,74 @@ Drücke 1 für Standardmodus Dateien &importieren... - - - + + + Select Profile Profil auswählen - - - + + + Select GTA V Folder... Wähle GTA V Ordner... - + Open File... Datei öffnen... - + %2 - %1 %2 - %1 - - + + &About %1 &Über %1 - - - - + + + &Donate + Spen&den + + + + Donate + Spenden + + + + Donation methods + Spendenmethoden + + + + Copy + Kopieren + + + + + + Open File Datei öffnen - + Can't open %1 because of not valid file format Kann nicht %1 öffnen weil Dateiformat nicht gültig ist - + %1 - Messages %1 - Nachrichten diff --git a/res/gta5sync_en_US.ts b/res/gta5sync_en_US.ts index 4889090..93ca28d 100644 --- a/res/gta5sync_en_US.ts +++ b/res/gta5sync_en_US.ts @@ -167,8 +167,8 @@ Pictures and Savegames ImageEditorDialog - - + + Snapmatic Image Editor @@ -200,13 +200,13 @@ Pictures and Savegames - + Patching of Snapmatic Image failed because of I/O Error - + Patching of Snapmatic Image failed because of Image Error @@ -728,26 +728,26 @@ Y: %2 - - - - - - + + + + + + Found: %1 - - - - - - - - + + + + + + + + Language: %1 @@ -763,7 +763,7 @@ Y: %2 - + Participate in %1 User Statistics @@ -784,8 +784,8 @@ Y: %2 - - + + Participation ID: %1 @@ -848,7 +848,7 @@ Y: %2 - + Current: %1 @@ -923,62 +923,62 @@ Y: %2 - + %1 %1 - + The new Custom Folder will initialise after you restart %1. The new Custom Folder will initialize after you restart %1. - + No Profile No Profile, as default - - - + + + Profile: %1 - + View %1 User Statistics Online - + Not registered - - - - + + + + Yes - - + + No - - + + OS defined - - + + Steam defined @@ -1049,42 +1049,42 @@ Y: %2 - + Key 1 - Avatar Preview Mode Key 2 - Toggle Overlay Arrow Keys - Navigate - + Snapmatic Picture Viewer - + Failed at %1 - - - + + + No Players - - + + No Crew - + Unknown Location - + Avatar Preview Mode Press 1 for Default View @@ -1357,19 +1357,19 @@ Press 1 for Default View - + GTA V Export (*.g5e) - + Savegames files (SGTA*) - + Snapmatic pictures (PGTA*) @@ -1384,14 +1384,14 @@ Press 1 for Default View - + All files (**) - + No valid file is selected @@ -1410,13 +1410,13 @@ Press 1 for Default View - + Failed to read Snapmatic picture - + Failed to read Savegame file @@ -1640,7 +1640,7 @@ Press 1 for Default View - + All profile files (*.g5e SGTA* PGTA*) @@ -1854,8 +1854,8 @@ Press 1 for Default View - - + + Snapmatic Properties @@ -1901,30 +1901,30 @@ Press 1 for Default View - + Crew: %1 (%2) - + Title: %1 (%2) - + Players: %1 (%2) Multiple Player are inserted here - + Player: %1 (%2) One Player is inserted here - - + + Appropriate: %1 @@ -1964,20 +1964,20 @@ Press 1 for Default View - - - + + + Edit - + Yes Yes, should work fine - + No No, could lead to issues @@ -1999,33 +1999,33 @@ Press 1 for Default View - - + + Patching of Snapmatic Properties failed because of I/O Error - + Snapmatic Title - + New Snapmatic title: - + Snapmatic Crew - + New Snapmatic crew: @@ -2259,7 +2259,7 @@ Press 1 for Default View UserInterface - + %2 - %1 @@ -2291,7 +2291,8 @@ Press 1 for Default View - + + &Close @@ -2322,8 +2323,8 @@ Press 1 for Default View - - + + &About %1 @@ -2379,15 +2380,15 @@ Press 1 for Default View - + Select &GTA V Folder... - - - + + + Select GTA V Folder... @@ -2435,32 +2436,53 @@ Press 1 for Default View - - - + + + Select Profile - + + + &Donate + + + + + Donate + + + + + Donation methods + + + + + Copy + + + + Open File... - - - - + + + + Open File - + Can't open %1 because of not valid file format - + %1 - Messages diff --git a/res/gta5sync_fr.qm b/res/gta5sync_fr.qm index 703bcebb1e1486d053356ea45337f982225da47c..676f6103f76cc237de8a18f8a07797d0311d5526 100644 GIT binary patch delta 183 zcmV;o07(Dz^a8H+0+1d7IFTQM7N&Us0H`(q1iJ(P0EjXG1kVHj0H|oOuLlDGoU^wB z&jJC!lZOVL0<1B!CkI~v0f3W-2z~;pEt3ZcF9H3NHwk|Mrn9#R4gor?0Smc<9smGF z?hCquTL1tt5DUI-#Q*@S)eF9DPy;*9*u^!~g&iR142^egFWfev|(S lF9AuDFAJXm`?JprgaH9dvs4W_sFTU1ACtAN6SI!B<^%)>K&t=% delta 131 zcmV-}0DS+h^#b(t0+1d7Fp(dE4!Z;Z0EjXG1kVHj0H`*xw+90OYO}us&jJCClaB_T z0;~VCF9%-%0Zx;T2z~;o`;!j|F9FMwKM8*UbhEz+4gmtJ&y&vz7YU;azHQ|I0INrn l?+OmHw&Ku$+OoBgaH8=vs?{2sI$nm<^;1KE(HJp diff --git a/res/gta5sync_fr.ts b/res/gta5sync_fr.ts index 9aaf33e..2b8df9e 100644 --- a/res/gta5sync_fr.ts +++ b/res/gta5sync_fr.ts @@ -178,8 +178,8 @@ et les fichiers de sauvegarde de Grand Theft Auto V ImageEditorDialog - - + + Snapmatic Image Editor @@ -211,13 +211,13 @@ et les fichiers de sauvegarde de Grand Theft Auto V &Fermer - + Patching of Snapmatic Image failed because of I/O Error Échec du patch Snapmatic : I/O Error - + Patching of Snapmatic Image failed because of Image Error Échec du patch Snapmatic : Image Error @@ -757,26 +757,26 @@ Y : %2 - - - - - - + + + + + + Found: %1 Trouvé : %1 - - - - - - - - + + + + + + + + Language: %1 Langue : %1 @@ -797,7 +797,7 @@ Y : %2 - + Participate in %1 User Statistics Participer aux statistiques d'usage %1 @@ -828,8 +828,8 @@ Y : %2 - - + + Participation ID: %1 ID de participation : %1 @@ -881,7 +881,7 @@ Y : %2 - + Current: %1 Actuel : %1 @@ -956,62 +956,62 @@ Y : %2 %1 (Priorité de la langue) - + %1 %1 %1 - + The new Custom Folder will initialise after you restart %1. Le nouveau Dossier personnalisé sera initialisé au redémarrage de %1. - + View %1 User Statistics Online Voir les statistiques d'usage %1 en ligne - + Not registered Pas enregistré - - - - + + + + Yes Oui - - + + No Non - - + + OS defined Défini par le système d'exploitation - - + + Steam defined Défini par Steam - + No Profile No Profile, as default Aucun profil - - - + + + Profile: %1 Profil : %1 @@ -1171,7 +1171,7 @@ Y : %2 Ouvrir la &Visionneuse de Carte... - + Key 1 - Avatar Preview Mode Key 2 - Toggle Overlay Arrow Keys - Navigate @@ -1180,37 +1180,37 @@ Touche 2 - Activer/désactiver l'overlay Touches fléchées - Naviguer - + Snapmatic Picture Viewer Visionneuse de photo Snapmatic - + Failed at %1 Echec de %1 - - + + No Crew Aucun crew - - - + + + No Players Aucun joueurs - + Avatar Preview Mode Press 1 for Default View Mode Aperçu Avatar Appuyer sur 1 pour le mode par défaut - + Unknown Location Emplacement inconnu @@ -1391,13 +1391,13 @@ Appuyer sur 1 pour le mode par défaut - + Savegames files (SGTA*) Fichiers de sauvegarde GTA (SGTA*) - + Snapmatic pictures (PGTA*) Photos Snapmatic (PGTA*) @@ -1412,7 +1412,7 @@ Appuyer sur 1 pour le mode par défaut - + All files (**) Tous les fichiers (**) @@ -1434,7 +1434,7 @@ Appuyer sur 1 pour le mode par défaut - + No valid file is selected Fichier invalide @@ -1445,13 +1445,13 @@ Appuyer sur 1 pour le mode par défaut - + Failed to read Snapmatic picture Impossible d'ouvrir la photo Snapmatic - + Failed to read Savegame file Impossible de lire le fichier de sauvegarde @@ -1679,13 +1679,13 @@ Appuyer sur 1 pour le mode par défaut Supprimer la sélection ? - + All profile files (*.g5e SGTA* PGTA*) Tous les fichiers de profil (*.g5e SGTA* PGTA*) - + GTA V Export (*.g5e) GTA V Export (*.g5e) @@ -1916,8 +1916,8 @@ Appuyer sur 1 pour le mode par défaut - - + + Snapmatic Properties Propriétés Snapmatic @@ -1959,7 +1959,7 @@ Appuyer sur 1 pour le mode par défaut - + Snapmatic Title Titre Snapmatic @@ -1969,30 +1969,30 @@ Appuyer sur 1 pour le mode par défaut Valeurs Snapmatic - + Crew: %1 (%2) Crew : %1 (%2) - + Title: %1 (%2) Titre : %1 (%2) - + Players: %1 (%2) Multiple Player are inserted here Joueurs : %1 (%2) - + Player: %1 (%2) One Player is inserted here Joueur : %1 (%2) - - + + Appropriate: %1 Valide : %1 @@ -2032,21 +2032,21 @@ Appuyer sur 1 pour le mode par défaut A&nnuler - - - + + + Edit Éditer - + Yes Yes, should work fine Oui, devrait fonctionner Oui - + No No, could lead to issues Non, pourrait causer des erreurs @@ -2069,27 +2069,27 @@ Appuyer sur 1 pour le mode par défaut - - + + Patching of Snapmatic Properties failed because of I/O Error La modification des propriétés Snapmatic a échoué : erreur d'entrée/sortie - + New Snapmatic title: Nouveau titre Snapmatic : - + Snapmatic Crew Crew Snapmatic - + New Snapmatic crew: Nouveau crew Snapmatic : @@ -2349,7 +2349,8 @@ Appuyer sur 1 pour le mode par défaut - + + &Close Fer&mer @@ -2425,15 +2426,15 @@ Appuyer sur 1 pour le mode par défaut - + Select &GTA V Folder... Modifier l'emplacement de &GTA V... - - - + + + Select GTA V Folder... Modifier l'emplacement de GTA V... @@ -2487,44 +2488,69 @@ Appuyer sur 1 pour le mode par défaut - + %2 - %1 %2 - %1 - - + + &About %1 &À propos de %1 - - - + + + Select Profile Sélectionner un profil - + + + &Donate + + + + + Donate + + + + + Donation methods + + + + + Copy + Copier + + + &Copy + &Copier + + + Open File... Ouvrir... - - - - + + + + Open File Ouvrir - + Can't open %1 because of not valid file format Impossible d'ouvrir %1, format invalide - + %1 - Messages %1 - Nouvelles diff --git a/res/gta5sync_ko.qm b/res/gta5sync_ko.qm index fc5b04b46b62bf2af34fb94c2e22e451e9b1d0b6..3a3bfbf6871317005ba0c3427039175185c611b5 100644 GIT binary patch delta 197 zcmeynmTCPurU`P478B*0#FkYuFtmv=uD)V; wKKFda^_$Ogw=gnZ-W>wz^K3_!pJ#4OJF1(lNnCy8&)o7~R~0N}qsIsgCw delta 130 zcmV-|0Db?jt^)n70+1d7Fp(dE4!Z;Z0Bbe?1kVHj0EQN^w+90OK(oIC&jJB7laB_T z0*K$UF9%)$0*3aJj|hJOgOd*lF98{oKM8*UD6_u_4*>yflg|nl38M?XZRG#}h-Z`U k3Ks#wlLreg0l||u3!ednv)2oR0RgGATn!tBv!RoY1DyFP<^TWy diff --git a/res/gta5sync_ko.ts b/res/gta5sync_ko.ts index 97be712..b3687a1 100644 --- a/res/gta5sync_ko.ts +++ b/res/gta5sync_ko.ts @@ -202,21 +202,21 @@ Pictures and Savegames 닫기(&C) - - + + Snapmatic Image Editor 스냅매틱 이미지 편집기 - + Patching of Snapmatic Image failed because of I/O Error I/O 오류로 인해 스냅매틱 이미지를 패치하지 못했습니다. - + Patching of Snapmatic Image failed because of Image Error 이미지 오류로 인해 스냅매틱 이미지를 패치하지 못했습니다. @@ -763,26 +763,26 @@ Y: %2 - - - - - - + + + + + + Found: %1 찾음: %1 - - - - - - - - + + + + + + + + Language: %1 언어: %1 @@ -803,7 +803,7 @@ Y: %2 - + Participate in %1 User Statistics 사용자 통계 참가 %1 @@ -839,8 +839,8 @@ Y: %2 - - + + Participation ID: %1 참여 아이디: %1 @@ -863,7 +863,7 @@ Y: %2 - + Current: %1 현재: %1 @@ -967,64 +967,64 @@ Y: %2 %1 (인터페이스와 가까운 언어) - + %1 %1 %1 %1 - + The new Custom Folder will initialise after you restart %1. 다시 시작한 후 새 사용자 지정 폴더가 초기화됩니다. %1. - + No Profile No Profile, as default 프로필 없음 (기본값) 프로필 없음 - - - + + + Profile: %1 프로필: %1 - + View %1 User Statistics Online 온라인 %1 사용자 통계 보기 - + Not registered 등록되지 않았습니다. - - - - + + + + Yes - - + + No 아니요 - - + + OS defined OS 정의 - - + + Steam defined 스팀 정의 @@ -1104,7 +1104,7 @@ Y: %2 JSON 편집기 열기(&J) - + Key 1 - Avatar Preview Mode Key 2 - Toggle Overlay Arrow Keys - Navigate @@ -1113,35 +1113,35 @@ Arrow Keys - Navigate 화살표키 - 이동 - + Snapmatic Picture Viewer 스냅매틱 이미지 뷰어 - + Failed at %1 %1에서 실패했습니다. - - - + + + No Players 플레이어 없음 - - + + No Crew 조직 없음 - + Unknown Location 알 수 없는 위치 - + Avatar Preview Mode Press 1 for Default View 아바타 미리 보기 모드입니다. @@ -1393,7 +1393,7 @@ Press 1 for Default View - + All files (**) 모든 파일 (**) @@ -1438,26 +1438,26 @@ Press 1 for Default View - + GTA V Export (*.g5e) GTA V로 내보내기 (*.g5e) - + Savegames files (SGTA*) 세이브 파일 (SGTA*) - + Snapmatic pictures (PGTA*) 스냅매틱 이미지 (PGTA*) - + No valid file is selected 올바른 파일이 선택되지 않았습니다. @@ -1478,13 +1478,13 @@ Press 1 for Default View - + Failed to read Snapmatic picture 스냅매틱 이미지를 읽지 못했습니다. - + Failed to read Savegame file 세이브 파일을 읽지 못했습니다. @@ -1703,7 +1703,7 @@ Press 1 for Default View 제목 변경 - + All profile files (*.g5e SGTA* PGTA*) 모든 프로필 파일 (*.g5e SGTA* PGTA*) @@ -1934,8 +1934,8 @@ Press 1 for Default View - - + + Snapmatic Properties 스냅매틱 속성 @@ -2027,8 +2027,8 @@ Press 1 for Default View - - + + Patching of Snapmatic Properties failed because of I/O Error I/O 오류로 인해 스냅매틱 속성을 패치하지 못했습니다. @@ -2040,76 +2040,76 @@ Press 1 for Default View - + Snapmatic Crew 조직 스냅매틱 - + New Snapmatic crew: 새로운 조직 스냅매틱: - + Snapmatic Title 스냅매틱 제목 - + New Snapmatic title: 새로운 스냅매틱 제목: - - - + + + Edit 편집 - + Players: %1 (%2) Multiple Player are inserted here 여기에 여러 플레이어가 추가됩니다. 플레이어: %1 (%2) - + Player: %1 (%2) One Player is inserted here 여기에 플레이어 하나가 추가됩니다. 플레이어: %1 (%2) - + Title: %1 (%2) 제목: %1 (%2) - - + + Appropriate: %1 변경: %1 - + Yes Yes, should work fine 네, 잘 될 거예요. - + No No, could lead to issues 아니요, 문제가 발생할 수 있습니다. 아니요 - + Crew: %1 (%2) 조직: %1 (%2) @@ -2344,7 +2344,7 @@ Press 1 for Default View UserInterface - + %2 - %1 %2 - %1 @@ -2377,7 +2377,8 @@ Press 1 for Default View - + + &Close 닫기(&C) @@ -2413,8 +2414,8 @@ Press 1 for Default View - - + + &About %1 %1 정보(&A) @@ -2470,15 +2471,15 @@ Press 1 for Default View - + Select &GTA V Folder... GTA V 폴더 선택(&G) - - - + + + Select GTA V Folder... GTA V 폴더 선택 @@ -2535,32 +2536,57 @@ Press 1 for Default View 인게임 숨기기 - - - + + + Select Profile 프로필 선택 - + + + &Donate + + + + + Donate + + + + + Donation methods + + + + + Copy + 복사 + + + &Copy + 복사(&C) + + + Open File... 파일 열기... - - - - + + + + Open File 파일 열기 - + Can't open %1 because of not valid file format 올바른 파일 형식이 아니므로 %1을 열 수 없습니다. - + %1 - Messages %1 - 뉴스 diff --git a/res/gta5sync_ru.qm b/res/gta5sync_ru.qm index 4ffa0502ceb05858a045eb0a948c1fc9189d7ad0..68f63ab63a5763e6867015c16585d0ea4fb567c9 100644 GIT binary patch delta 183 zcmV;o07(Du?*g�+1d7IFTQM7N&Us0HzKA1iJ(P0EF%U1kVHj0H#Q>uLlDGc(b5x000p#3(s_Z005{^lm7}X l0;da;FAJXm!?Vu|gaHA=vs4WdrjzfYCzD036SHQsi3E3zJ>~!a delta 131 zcmV-}0DS+k@B;7e0+1d7Fp(dE4!Z;Z0EF%U1kVHj0HzMHw+90OKC{0A&jJBplaB_U z0d=!42VVgJ6qAn#egdb_lMe|m0ezD{34Q{p=Ci*E4*>x=lg|nl2`dY}ZRG#}sNs|E l3KszulLref0;bWEHw&KuiL=)WgaHAGvs?`lrn9KCi3DFOEbRaQ diff --git a/res/gta5sync_ru.ts b/res/gta5sync_ru.ts index d4457fe..efa7ff8 100644 --- a/res/gta5sync_ru.ts +++ b/res/gta5sync_ru.ts @@ -181,8 +181,8 @@ Pictures and Savegames ImageEditorDialog - - + + Snapmatic Image Editor @@ -214,13 +214,13 @@ Pictures and Savegames &Закрыть - + Patching of Snapmatic Image failed because of I/O Error Не удалось изменить картинку Snapmatic из-за ошибки ввода-вывода - + Patching of Snapmatic Image failed because of Image Error Не удалось изменить картинку Snapmatic из-за ошибки Image Error @@ -763,26 +763,26 @@ Y: %2 - - - - - - + + + + + + Found: %1 Найдено: %1 - - - - - - - - + + + + + + + + Language: %1 Язык: %1 @@ -803,7 +803,7 @@ Y: %2 - + Participate in %1 User Statistics Участвовать в пользовательской статистике %1 @@ -836,8 +836,8 @@ Y: %2 - - + + Participation ID: %1 Номер участника: %1 @@ -891,7 +891,7 @@ Y: %2 - + Current: %1 Сейчас: %1 @@ -966,62 +966,62 @@ Y: %2 %1 (Приоритетный язык) - + %1 %1 %1 - + The new Custom Folder will initialise after you restart %1. Другая папка будет загружена после перезапуска %1. - + View %1 User Statistics Online Посмотреть пользовательскую статистику %1 онлайн - + Not registered Не зарегистрирован - - - - + + + + Yes Да - - + + No Нет - - + + OS defined Настройка от ОС - - + + Steam defined Настройка от Steam - + No Profile No Profile, as default Нет профиля - - - + + + Profile: %1 Профиль: %1 @@ -1101,7 +1101,7 @@ Y: %2 Открыть &карту... - + Key 1 - Avatar Preview Mode Key 2 - Toggle Overlay Arrow Keys - Navigate @@ -1110,37 +1110,37 @@ Arrow Keys - Navigate Стрелки - Навигация - + Snapmatic Picture Viewer Просмотрщик фотографий Snapmatic - + Failed at %1 Ошибка при %1 - - + + No Crew Вне банды - - - + + + No Players Игроков нет - + Avatar Preview Mode Press 1 for Default View Режим просмотра аватарок Нажмите 1 для стандартного просмотра - + Unknown Location Неизвестное место @@ -1391,13 +1391,13 @@ Press 1 for Default View - + Savegames files (SGTA*) Файлы сохранения (SGTA*) - + Snapmatic pictures (PGTA*) Картинка Snapmatic (PGTA*) @@ -1405,7 +1405,7 @@ Press 1 for Default View - + All files (**) Все файлы (**) @@ -1426,20 +1426,20 @@ Press 1 for Default View - + Failed to read Snapmatic picture Не удалось загрузить картинку Snapmatic - + Failed to read Savegame file Не удалось загрузить файл сохранения - + No valid file is selected Выбранный файл неверен @@ -1692,13 +1692,13 @@ Press 1 for Default View Экспортируется файл %1 из %2 - + All profile files (*.g5e SGTA* PGTA*) Все файлы профиля (*.g5e SGTA* PGTA*) - + GTA V Export (*.g5e) GTA V Export (*.g5e) @@ -1921,8 +1921,8 @@ Press 1 for Default View - - + + Snapmatic Properties Свойства Snapmatic @@ -1963,7 +1963,7 @@ Press 1 for Default View Значения в Snapmatic - + Crew: %1 (%2) Банда: %1 (%2) @@ -1974,30 +1974,30 @@ Press 1 for Default View - + Snapmatic Title Заголовок Snapmatic - + Title: %1 (%2) Заголовок: %1 (%2) - + Players: %1 (%2) Multiple Player are inserted here Игроки: %1 (%2) - + Player: %1 (%2) One Player is inserted here Игрок: %1 (%2) - - + + Appropriate: %1 Подходит: %1 @@ -2037,20 +2037,20 @@ Press 1 for Default View &Отмена - - - + + + Edit Правка - + Yes Yes, should work fine Да - + No No, could lead to issues Нет @@ -2072,27 +2072,27 @@ Press 1 for Default View - - + + Patching of Snapmatic Properties failed because of I/O Error Не удалось измененить свойства Snapmatic из-за проблемы ввода/вывода - + New Snapmatic title: Новый заголовок Snapmatic: - + Snapmatic Crew Банда на Snapmatic - + New Snapmatic crew: Новая банда на Snapmatic: @@ -2392,7 +2392,7 @@ Press 1 for Default View - + Select &GTA V Folder... Выбрать &папку GTA V... @@ -2436,7 +2436,8 @@ Press 1 for Default View - + + &Close &Закрыть @@ -2476,53 +2477,78 @@ Press 1 for Default View &Открыть файл... - - - + + + Select Profile Выбор профиля - - - + + + Select GTA V Folder... Выбрать папку GTA V... - + %2 - %1 %2 - %1 - - + + &About %1 &О программе %1 - + + + &Donate + + + + + Donate + + + + + Donation methods + + + + &Copy + &Копировать + + + + Copy + Копировать + + + Open File... Открыть файл... - - - - + + + + Open File Открыть файл - + Can't open %1 because of not valid file format Не удалось открыть %1 из-за неверного формата файла - + %1 - Messages %1 - Новости diff --git a/res/gta5sync_uk.qm b/res/gta5sync_uk.qm index 84d9d942bec754e12eba7a58275e1bf2fdbb89ba..76d1a872fc419fbadd2fbbb319824cc2042a3867 100644 GIT binary patch delta 181 zcmV;m080Pa`2v~x0+1d7IFTQM7N&Us0IK!?1iJ(P0E&J91kVHj0IM#suLlDGUbD9Y z&jJC6lZOVM0j0Ai2VVgJI+KS8e*ycG2MI3$rIR-aegdx)v$qKk0Xbm{xq}`607twF zx`SH)05R|jzHP+-0IpRFzHQ|I0ImlM#6IZ&0AIfg$W6om02C$*&vbqO0Ifii{|YYw j^^-3Pp8>72&kKYB0jslA4f?8+W2hyQwXzelPPmH%p{qaI delta 129 zcmV-{0Dk|O`U2Vc0+1d7Fp(dE4!Z;Z0E&J91kVHj0IK$}w+90OCbPc-&jJBZlaB_U z0d2D{2VVgJ0+Wvje*wdj4+$>;ZIeF &Закрити - - + + Snapmatic Image Editor Редактор Snapmatic зображень - + Patching of Snapmatic Image failed because of I/O Error Виправлення Snapmatic зображення не вдалося через I/O Error - + Patching of Snapmatic Image failed because of Image Error Виправлення Snapmatic зображення не вдалося через помилку картинки @@ -759,26 +759,26 @@ Y: %2 - - - - - - + + + + + + Found: %1 Знайдено:%1 - - - - - - - - + + + + + + + + Language: %1 Мова: %1 @@ -800,7 +800,7 @@ Y: %2 - + Participate in %1 User Statistics Опитування %1 про устаткування ПК @@ -836,8 +836,8 @@ Y: %2 - - + + Participation ID: %1 ID учасника : %1 @@ -860,7 +860,7 @@ Y: %2 - + Current: %1 Зараз: %1 @@ -959,62 +959,62 @@ Y: %2 %1 (пріоритет мови) - + %1 %1 %1 - + The new Custom Folder will initialise after you restart %1. Нова користувацька папка буде ініціалізована після перезапуску %1. - + No Profile No Profile, as default Жодного - - - + + + Profile: %1 Профіль: %1 - + View %1 User Statistics Online Переглянути користувацьку статистику %1 онлайн - + Not registered Не зареєстрований - - - - + + + + Yes Так - - + + No Ні - - + + OS defined Визначається ОС - - + + Steam defined Визначається Steam @@ -1094,7 +1094,7 @@ Y: %2 Відкрити редактор &JSON... - + Key 1 - Avatar Preview Mode Key 2 - Toggle Overlay Arrow Keys - Navigate @@ -1103,35 +1103,35 @@ Arrow Keys - Navigate Стрілки - Навігація - + Snapmatic Picture Viewer Переглядач фотографій Snapmatic - + Failed at %1 Помилка на%1 - - - + + + No Players Гравців немає - - + + No Crew Банди немає - + Unknown Location Невідома локація - + Avatar Preview Mode Press 1 for Default View Режим для аватарок @@ -1383,7 +1383,7 @@ Press 1 for Default View - + All files (**) Усі файли (**) @@ -1428,26 +1428,26 @@ Press 1 for Default View - + GTA V Export (*.g5e) GTA V Export (*.g5e) - + Savegames files (SGTA*) Файли збереження гри (SGTA*) - + Snapmatic pictures (PGTA*) Snapmatic зображення (PGTA*) - + No valid file is selected Вибрані недійсні файли @@ -1468,13 +1468,13 @@ Press 1 for Default View - + Failed to read Snapmatic picture Не вдалося прочитати Snapmatic картинку - + Failed to read Savegame file Не вдалося прочитати файл збереження гри @@ -1688,7 +1688,7 @@ Press 1 for Default View Змінити назву - + All profile files (*.g5e SGTA* PGTA*) Усі файли зображень (*.g5e SGTA* PGTA*) @@ -1919,8 +1919,8 @@ Press 1 for Default View - - + + Snapmatic Properties Властивості Snapmatic @@ -2012,8 +2012,8 @@ Press 1 for Default View - - + + Patching of Snapmatic Properties failed because of I/O Error Змінити властивості Snapmatic не вдалося через I/O Помилку @@ -2025,72 +2025,72 @@ Press 1 for Default View - + Snapmatic Crew Snapmatic банда - + New Snapmatic crew: Нова Snapmatic банда: - + Snapmatic Title Snapmatic назва - + New Snapmatic title: Новий Snapmatic заголовок: - - - + + + Edit Правка - + Players: %1 (%2) Multiple Player are inserted here Гравці: %1 (%2) - + Player: %1 (%2) One Player is inserted here Гравець: %1 (%2) - + Title: %1 (%2) Назва: %1 (%2) - - + + Appropriate: %1 Підходить: %1 - + Yes Yes, should work fine Так - + No No, could lead to issues Ні - + Crew: %1 (%2) Банда: %1 (%2) @@ -2325,7 +2325,7 @@ Press 1 for Default View UserInterface - + %2 - %1 %2 - %1 @@ -2357,7 +2357,8 @@ Press 1 for Default View - + + &Close &Закрити @@ -2393,8 +2394,8 @@ Press 1 for Default View - - + + &About %1 &Про %1 @@ -2450,15 +2451,15 @@ Press 1 for Default View - + Select &GTA V Folder... Вибрати &GTA V теку... - - - + + + Select GTA V Folder... Вибрати GTA V теку... @@ -2515,32 +2516,57 @@ Press 1 for Default View Сховати у грі - - - + + + Select Profile Вибрати профіль - + + + &Donate + + + + + Donate + + + + + Donation methods + + + + + Copy + Копіювати + + + &Copy + &Копіювати + + + Open File... Відкрити файл... - - - - + + + + Open File Відкрити файл - + Can't open %1 because of not valid file format Неможливо відкрити %1 через невідомий формат файлу - + %1 - Messages %1 - Новини diff --git a/res/gta5sync_zh_TW.qm b/res/gta5sync_zh_TW.qm index 3d1013da6720be74e01f51080586c82edc2f5caa..4aca74f33adffe76769acb15b22212037246d1a3 100644 GIT binary patch delta 183 zcmV;o07(D8nF8^d0+1d7IFTQM7N&Us0DI&B1iJ(P0Alt41kVHj0DKOyuLlDGIJ36{ z&H@5`B$I~*p8?ggCkI~v0qB#52!8=@lLrYd0)7jVHwk_Me;Bj32@e4|TMM~^9smF{ z+6%gaTL1tffD68D#Q*?)n+v{ePyk_Y25P!~g&ePz%p=egFV{tdsu= lF9EfaFAJXmd$Z3AgaHASvs4Y~dy~|B7LzrF6SF*tg9A2PJ10F9%-%0lt%u2!8=ZlMe|l0)63=KM8&Ue(tls2@e4QF_X^<7YT6-zHQ|I0Dd=< l?+O 關閉(&C) - - + + Snapmatic Image Editor Snapmatic 圖片編輯器 - + Patching of Snapmatic Image failed because of I/O Error I/O 錯誤,Snapmatic 圖片更新失敗 - + Patching of Snapmatic Image failed because of Image Error 圖片錯誤,Snapmatic 圖片更新失敗 @@ -754,26 +754,26 @@ Y: %2 - - - - - - + + + + + + Found: %1 找到: %1 - - - - - - - - + + + + + + + + Language: %1 語言: %1 @@ -794,7 +794,7 @@ Y: %2 - + Participate in %1 User Statistics 參與 %1 使用者統計 @@ -830,8 +830,8 @@ Y: %2 - - + + Participation ID: %1 參與 ID: %1 @@ -854,7 +854,7 @@ Y: %2 - + Current: %1 目前: %1 @@ -953,62 +953,62 @@ Y: %2 %1 (遊戲語言) - + %1 %1 %1 - + The new Custom Folder will initialise after you restart %1. 自訂資料夾將在 %1 重新啟動後初始化. - + No Profile No Profile, as default - - - + + + Profile: %1 設定檔: %1 - + View %1 User Statistics Online 檢視 %1 使用者統計資訊 - + Not registered 未註冊參與 - - - - + + + + Yes - - + + No - - + + OS defined 系統定義 - - + + Steam defined Steam 定義 @@ -1088,7 +1088,7 @@ Y: %2 開啟 JSON 編輯器(&J)... - + Key 1 - Avatar Preview Mode Key 2 - Toggle Overlay Arrow Keys - Navigate @@ -1097,35 +1097,35 @@ Arrow Keys - Navigate 方向鍵 - 導覽 - + Snapmatic Picture Viewer Snapmatic 圖片檢視器 - + Failed at %1 失敗: %1 - - - + + + No Players - - + + No Crew - + Unknown Location 未知地點 - + Avatar Preview Mode Press 1 for Default View 大頭貼預覽模式 @@ -1377,7 +1377,7 @@ Press 1 for Default View - + All files (**) 所有檔案 (**) @@ -1422,26 +1422,26 @@ Press 1 for Default View - + GTA V Export (*.g5e) GTA V Export (*.g5e) - + Savegames files (SGTA*) 遊戲存檔 (SGTA*) - + Snapmatic pictures (PGTA*) Snapmatic 圖片 (PGTA*) - + No valid file is selected 沒有選擇有效的檔案 @@ -1460,13 +1460,13 @@ Press 1 for Default View - + Failed to read Snapmatic picture 無法讀取 Snapmatic 圖片 - + Failed to read Savegame file 無法讀取遊戲存檔 @@ -1678,7 +1678,7 @@ Press 1 for Default View 更改標題 - + All profile files (*.g5e SGTA* PGTA*) 所有設定檔檔案 (*.g5e SGTA* PGTA*) @@ -1901,8 +1901,8 @@ Press 1 for Default View - - + + Snapmatic Properties Snapmatic 屬性 @@ -1994,8 +1994,8 @@ Press 1 for Default View - - + + Patching of Snapmatic Properties failed because of I/O Error 讀寫錯誤,未能更新 Snapmatic 屬性 @@ -2007,72 +2007,72 @@ Press 1 for Default View - + Snapmatic Crew 幫會 - + New Snapmatic crew: 輸入新的幫會: - + Snapmatic Title 標題 - + New Snapmatic title: 輸入新的標題: - - - + + + Edit 編輯 - + Players: %1 (%2) Multiple Player are inserted here 玩家: %1 (%2) - + Player: %1 (%2) One Player is inserted here 玩家: %1 (%2) - + Title: %1 (%2) 標題: %1 (%2) - - + + Appropriate: %1 可使用: %1 - + Yes Yes, should work fine - + No No, could lead to issues - + Crew: %1 (%2) 幫會: %1 (%2) @@ -2306,7 +2306,7 @@ Press 1 for Default View UserInterface - + %2 - %1 %2 - %1 @@ -2338,7 +2338,8 @@ Press 1 for Default View - + + &Close 關閉(&C) @@ -2374,8 +2375,8 @@ Press 1 for Default View - - + + &About %1 關於 %1(&A) @@ -2431,15 +2432,15 @@ Press 1 for Default View - + Select &GTA V Folder... 選擇 GTA V 資料夾(&G)... - - - + + + Select GTA V Folder... 選擇 GTA V 資料夾... @@ -2496,32 +2497,57 @@ Press 1 for Default View 在遊戲中隱藏 - - - + + + Select Profile 選擇設定檔 - + + + &Donate + + + + + Donate + + + + + Donation methods + + + + + Copy + 複製 + + + &Copy + 複製(&C) + + + Open File... 開啟檔案... - - - - + + + + Open File 開啟檔案 - + Can't open %1 because of not valid file format 格式無效,無法開啟 %1 - + %1 - Messages %1 - 新聞 diff --git a/res/ltc.svgz b/res/ltc.svgz new file mode 100644 index 0000000000000000000000000000000000000000..ae954e1202ae76cd9e11e02717ff251a1d907682 GIT binary patch literal 593 zcmV-X0!Mt5(&jm3CixQKfyUTw@Yc zV@Kd5o4@baBq6C%m57PY%$YM6Q$D_RD%i_@XpOEA#W4z`7N&0Xx?7+MvhPtQ_|1Sr7z}tcPVSDzve7yCh`0>lHTrn$&_wB|E9@Kq#gJO>{BQMK8H+ z_fnXyGkWludU&`Z_jPk&9}Wk6NIZ!aML}Xl7>j@r4M%PHTXdTWJ>E-YaU2tfP0atY z+PXr|{3!dM)Z?049%_CGjh zX&Ar0q%2GsUWCa4Ot!#m!x9d}dFV~-)hK2TvOP|66|r!R3*e+h=#A$@Am})sSb~|# za1pT>(`XJ&uxFNrX{z81xj9ZEmSYA2nN!Z_rAP)Mbd!7We>d=)CQu3*@p_N~;y8c3 fx5XsQ>Y~0{q}$xwud#Gr@M`u43oq{Vtpor7*PR^| literal 0 HcmV?d00001 diff --git a/res/qt6/qtbase_de.qm b/res/qt6/qtbase_de.qm index 4a4c988e09687f63f6b430ad1f7fd9df36e0bce6..a1080509e0d6e7c2b3e7443fe6132fd7d0a9fe3f 100644 GIT binary patch delta 14077 zcmaKzcR)@5|HohN_r2%bd(XLpl#yf=4YG=?GAha*MRt=&NF?NbD6?b~A>(6Y%cx`| zE2EHAw#@AHA$$Fvb$@?<|9YJ6z2}_wdF|KheabwdJ9tUEw2smFJP|n%zxEMyBwn?Y zNZE;4+ke2$;1;k8_#W&^tX(zG0~`-}5^LWa^a2-w-M|d6J9rKB2ETxPiFGUk`w?@~ zfc?RN-~ci*w`n*Sh!56+zTgSakC?k9I0$qD2ZMp2KR6GZOsx4=Fp7AML@=IMi)`=# z@p>%m>4=7>_cQWvw}wAt*7JQ1o3WZMB*P}ZJraUIudgo21bGN z!M((0Zzi&HAvXRF1ce&};t494U$2Y-DDzfV^`u`jdU_DIo&hFs}O zaq~D&qJih|Ahn5nkAa)Ov&3fhBO07Vygkkv5=p!(Bsg>wan&=TVfei_RB0SOjacg` zL?cf_B;PB^ed35>MiUQS0Kzvmj;-%Y(A3u#J9!JXgX+)EcSCU(3 zNV#|+ar2v`OwJ}={URw>+TbQVz@bo8Gg7W zMzu{mG?oPAWvD_+g0?PE{8AF?K`pUONN_AB-mC)&9o&hx+zk5Sx-ToqTV4V;5^ohm zLU$MZ-k458&nM7X7ZUs+V%wEqIu!`QlgAhG&z;yoIXxE3}rIDy2yGs(z@P9+gK;=`Vi2-oGqH;}4%58|Wr z;1eeS+TAi@RykDtU=%F>5m~K1M{Lp}a@ZOJ_qn#I;(++|s^oA3KE2=+IaKKUP7QMO zIz#l*K#o0e<2xSYSfP@MgUB%f#%Ea#+zX@CRgzy%BF9w~pLYdu-o$ezCTu6i3dt_` zZQ{!{lH+9*GzoHD#-?UR+3vLkxx({v6wy7V=10YVMaY= zsK(lhdJch(t+!CmIGk@agnIs*P4v$w>ctUHqPtNqmv|!g3DhejllUPA>YZ?uXm)on zk9d6p8G9dxZtJ(BJ~NR(YCoX9UY_Xo(gG?r*?8}e(BODy&s z`NblD#f~?U-@H@ATpY=7Q99hDUnRNgBl1gJ0rxT|zoq}-#4+Ue1p%n-VH%XUnMgaH z1}#O>8Z*koNqs8G+c%`a=h_nQu$KlG<-djyV7F694ZDbb9RG{o@){$5T)Mq?qJF3^y;UqtgR)6mdX#67h% zOk6}PZW9d~4&8IJO7gzFXxNYAaJSPm;sKJ;*Y6Y%Wlj7^JdF+#h(&Cruoo$Czf&~U zB@O=X--X8Yiz7C9KaF1i{~q3uCKRqFKCKf)PD4@}8AMYoRuD^$q^Ss|aEnTRMWG2L!xT-l_Sl)|R$U?dzqmrV{bnO(3@{x|N|1b_Do_~vO2YC|}si@Rm zK~(=eJ!!U|Scje90q`Y=C+cViW`U!@Y;Y?*Nh(Fm?@LdALj`U`&+HKE-PhBrUPoZm z0rWPiDs)Hj&>zrn(EGFi&7rzaeC1eqpu7 zh7eU1S#7yD>HsfRyI>1Z$wOxKu?lgI5N3VT1y5qj>dkCOJRybIjG9O+%!k?f!Yh>9 zS)+~?#11g#@D#>be-m>|Eg`n+7;ADZ3)Rmm)-(vJI9kYzPVd(f)%(R-%|$>7FJc`= z&8%`g`71y4HJj*USsp&<=e`26|A=>Q8~-;(&)5~Jy0-W?YHZ%bk& z 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 ZsjV27nmvlU=G?GS6jr{2v@c%Nqay delta 22980 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

&b2#|i!^!l`b{wTrp`mBohO^xY|_b}q?N1NVM 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 delta 17387 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≷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 AKmY&$ literal 0 HcmV?d00001 diff --git a/res/zec.svgz b/res/zec.svgz new file mode 100644 index 0000000000000000000000000000000000000000..a39853d7b4b26091f0d9a61896b114e290401586 GIT binary patch literal 1023 zcmVO^WL2%VB@@(bry6&(Dg2PKwlDgRjc^2qW?{(F+ z0V6E%CwMl&vqq;~anxD8-`7=ZBdhjy25$1rh(4W8UyV4#D=?>~NY8t7TJ_@i$A?p630K>Anx(ye@dJ(`z!w%F9oKJC`UKHX|l?sw48 zGMF3};O>0TQ&N|<(QW-nioL3 z`|tl-1{U0Ba{ixs_dMmBNPqCXvXvhzPEHHruF}hcmC6d3^|HoBv8u_O+y&JkwHL zNg9nwm%-(J97_xptYn!rQN*eYeqzA8k#x)L1o$OA>*i11UulSjt8}k>hsOtcZRb32 zK@9V;(szMu8tftMc2h@LnYOS6OUhZJko8x_BLO=_oF_4fScYYkkO)!Cs0fLSaR^ii z#i+W|036V|!@-R%VKM5np&`t{N41AN^tU6X1SgRk&(VHa<(D_xGTkyU=fGwEu2D&m zc^MyM#EG<`DJ&5&Xdr;$(Yc(0930Ky*4#%-1|xmhQ_SH*Xapl1MwFP}3p8y42E`q% zwV?~!<$>pjKKPNv%BJRVOp>s_-pW@;BEK~f&dgMqREo%CCqqV}_{d`lugVS!2D>}L z$O(%+G4o_F^~_Wh5h*??!HAL>^hoXg1&M(q3KSF*U}