Merge pull request #1345 from Trial97/time2

feat:Added option to use system locale
This commit is contained in:
Tayou 2023-07-13 01:56:12 +02:00 committed by Sefa Eyeoglu
parent b11b86e026
commit 2b3021b7c2
No known key found for this signature in database
GPG Key ID: E13DFD4B47127951
5 changed files with 62 additions and 58 deletions

View File

@ -568,6 +568,7 @@ Application::Application(int &argc, char **argv) : QApplication(argc, argv)
// Language
m_settings->registerSetting("Language", QString());
m_settings->registerSetting("UseSystemLocale", false);
// Console
m_settings->registerSetting("ShowConsole", false);
@ -918,12 +919,7 @@ bool Application::createSetupWizard()
}
return false;
}();
bool languageRequired = [&]()
{
if (settings()->get("Language").toString().isEmpty())
return true;
return false;
}();
bool languageRequired = settings()->get("Language").toString().isEmpty();
bool pasteInterventionRequired = settings()->get("PastebinURL") != "";
bool themeInterventionRequired = settings()->get("ApplicationTheme") == "";
bool wizardRequired = javaRequired || languageRequired || pasteInterventionRequired || themeInterventionRequired;

View File

@ -42,6 +42,7 @@
#include <QDir>
#include <QLibraryInfo>
#include <QDebug>
#include <locale>
#include "FileSystem.h"
#include "net/NetJob.h"
@ -526,34 +527,34 @@ Language * TranslationsModel::findLanguage(const QString& key)
}
}
void TranslationsModel::setUseSystemLocale(bool useSystemLocale)
{
APPLICATION->settings()->set("UseSystemLocale", useSystemLocale);
QLocale::setDefault(QLocale(useSystemLocale ? QString::fromStdString(std::locale().name()) : defaultLangCode));
}
bool TranslationsModel::selectLanguage(QString key)
{
QString& langCode = key;
auto langPtr = findLanguage(key);
if (langCode.isEmpty())
{
if (langCode.isEmpty()) {
d->no_language_set = true;
}
if(!langPtr)
{
if (!langPtr) {
qWarning() << "Selected invalid language" << key << ", defaulting to" << defaultLangCode;
langCode = defaultLangCode;
}
else
{
} else {
langCode = langPtr->key;
}
// uninstall existing translators if there are any
if (d->m_app_translator)
{
if (d->m_app_translator) {
QCoreApplication::removeTranslator(d->m_app_translator.get());
d->m_app_translator.reset();
}
if (d->m_qt_translator)
{
if (d->m_qt_translator) {
QCoreApplication::removeTranslator(d->m_qt_translator.get());
d->m_qt_translator.reset();
}
@ -563,8 +564,9 @@ bool TranslationsModel::selectLanguage(QString key)
* In a multithreaded application, the default locale should be set at application startup, before any non-GUI threads are created.
* This function is not reentrant.
*/
QLocale locale = QLocale(langCode);
QLocale::setDefault(locale);
QLocale::setDefault(
QLocale(APPLICATION->settings()->get("UseSystemLocale").toBool() ? QString::fromStdString(std::locale().name()) : langCode));
// if it's the default UI language, finish
if(langCode == defaultLangCode)

View File

@ -20,8 +20,7 @@
struct Language;
class TranslationsModel : public QAbstractListModel
{
class TranslationsModel : public QAbstractListModel {
Q_OBJECT
public:
explicit TranslationsModel(QString path, QObject* parent = 0);
@ -38,6 +37,7 @@ public:
QString selectedLanguage();
void downloadIndex();
void setUseSystemLocale(bool useSystemLocale);
private:
Language* findLanguage(const QString& key);
@ -57,7 +57,6 @@ private slots:
void dlGood();
void translationDirChanged(const QString& path);
private: /* data */
struct Private;
std::unique_ptr<Private> d;

View File

@ -1,16 +1,16 @@
#include "LanguageSelectionWidget.h"
#include <QVBoxLayout>
#include <QTreeView>
#include <QCheckBox>
#include <QHeaderView>
#include <QLabel>
#include <QTreeView>
#include <QVBoxLayout>
#include "Application.h"
#include "BuildConfig.h"
#include "translations/TranslationsModel.h"
#include "settings/Setting.h"
#include "translations/TranslationsModel.h"
LanguageSelectionWidget::LanguageSelectionWidget(QWidget *parent) :
QWidget(parent)
LanguageSelectionWidget::LanguageSelectionWidget(QWidget* parent) : QWidget(parent)
{
verticalLayout = new QVBoxLayout(this);
verticalLayout->setObjectName(QStringLiteral("verticalLayout"));
@ -31,6 +31,13 @@ LanguageSelectionWidget::LanguageSelectionWidget(QWidget *parent) :
helpUsLabel->setWordWrap(true);
verticalLayout->addWidget(helpUsLabel);
formatCheckbox = new QCheckBox(this);
formatCheckbox->setObjectName(QStringLiteral("formatCheckbox"));
formatCheckbox->setCheckState(APPLICATION->settings()->get("UseSystemLocale").toBool() ? Qt::Checked : Qt::Unchecked);
connect(formatCheckbox, &QCheckBox::stateChanged,
[this]() { APPLICATION->translations()->setUseSystemLocale(formatCheckbox->isChecked()); });
verticalLayout->addWidget(formatCheckbox);
auto translations = APPLICATION->translations();
auto index = translations->selectedIndex();
languageView->setModel(translations.get());
@ -55,13 +62,12 @@ void LanguageSelectionWidget::retranslate()
QString text = tr("Don't see your language or the quality is poor?<br/><a href=\"%1\">Help us with translations!</a>")
.arg(BuildConfig.TRANSLATIONS_URL);
helpUsLabel->setText(text);
formatCheckbox->setText(tr("Use system locales"));
}
void LanguageSelectionWidget::languageRowChanged(const QModelIndex& current, const QModelIndex& previous)
{
if (current == previous)
{
if (current == previous) {
return;
}
auto translations = APPLICATION->translations();

View File

@ -21,9 +21,9 @@ class QVBoxLayout;
class QTreeView;
class QLabel;
class Setting;
class QCheckBox;
class LanguageSelectionWidget: public QWidget
{
class LanguageSelectionWidget : public QWidget {
Q_OBJECT
public:
explicit LanguageSelectionWidget(QWidget* parent = 0);
@ -40,4 +40,5 @@ private:
QVBoxLayout* verticalLayout = nullptr;
QTreeView* languageView = nullptr;
QLabel* helpUsLabel = nullptr;
QCheckBox* formatCheckbox = nullptr;
};