Merge pull request #52 from oynqr/develop
Default to system locale language
This commit is contained in:
commit
019c77f9f7
@ -143,6 +143,11 @@ struct TranslationsModel::Private
|
|||||||
|
|
||||||
std::unique_ptr<POTranslator> m_po_translator;
|
std::unique_ptr<POTranslator> m_po_translator;
|
||||||
QFileSystemWatcher *watcher;
|
QFileSystemWatcher *watcher;
|
||||||
|
|
||||||
|
const QString m_system_locale = QLocale::system().name();
|
||||||
|
const QString m_system_language = m_system_locale.split('_').front();
|
||||||
|
|
||||||
|
bool no_language_set = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
TranslationsModel::TranslationsModel(QString path, QObject* parent): QAbstractListModel(parent)
|
TranslationsModel::TranslationsModel(QString path, QObject* parent): QAbstractListModel(parent)
|
||||||
@ -164,7 +169,10 @@ TranslationsModel::~TranslationsModel()
|
|||||||
void TranslationsModel::translationDirChanged(const QString& path)
|
void TranslationsModel::translationDirChanged(const QString& path)
|
||||||
{
|
{
|
||||||
qDebug() << "Dir changed:" << path;
|
qDebug() << "Dir changed:" << path;
|
||||||
reloadLocalFiles();
|
if (!d->no_language_set)
|
||||||
|
{
|
||||||
|
reloadLocalFiles();
|
||||||
|
}
|
||||||
selectLanguage(selectedLanguage());
|
selectLanguage(selectedLanguage());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -172,7 +180,26 @@ void TranslationsModel::indexReceived()
|
|||||||
{
|
{
|
||||||
qDebug() << "Got translations index!";
|
qDebug() << "Got translations index!";
|
||||||
d->m_index_job.reset();
|
d->m_index_job.reset();
|
||||||
if(d->m_selectedLanguage != defaultLangCode)
|
|
||||||
|
if (d->no_language_set)
|
||||||
|
{
|
||||||
|
reloadLocalFiles();
|
||||||
|
|
||||||
|
auto language = d->m_system_locale;
|
||||||
|
if (!findLanguage(language))
|
||||||
|
{
|
||||||
|
language = d->m_system_language;
|
||||||
|
}
|
||||||
|
selectLanguage(language);
|
||||||
|
if (selectedLanguage() != defaultLangCode)
|
||||||
|
{
|
||||||
|
updateLanguage(selectedLanguage());
|
||||||
|
}
|
||||||
|
APPLICATION->settings()->set("Language", selectedLanguage());
|
||||||
|
d->no_language_set = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
else if(d->m_selectedLanguage != defaultLangCode)
|
||||||
{
|
{
|
||||||
downloadTranslation(d->m_selectedLanguage);
|
downloadTranslation(d->m_selectedLanguage);
|
||||||
}
|
}
|
||||||
@ -319,8 +346,19 @@ void TranslationsModel::reloadLocalFiles()
|
|||||||
{
|
{
|
||||||
d->m_languages.append(language);
|
d->m_languages.append(language);
|
||||||
}
|
}
|
||||||
std::sort(d->m_languages.begin(), d->m_languages.end(), [](const Language& a, const Language& b) {
|
std::sort(d->m_languages.begin(), d->m_languages.end(), [this](const Language& a, const Language& b) {
|
||||||
return a.key.compare(b.key) < 0;
|
if (a.key != b.key)
|
||||||
|
{
|
||||||
|
if (a.key == d->m_system_locale || a.key == d->m_system_language)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (b.key == d->m_system_locale || b.key == d->m_system_language)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return a.key < b.key;
|
||||||
});
|
});
|
||||||
endInsertRows();
|
endInsertRows();
|
||||||
}
|
}
|
||||||
@ -439,6 +477,12 @@ bool TranslationsModel::selectLanguage(QString key)
|
|||||||
{
|
{
|
||||||
QString &langCode = key;
|
QString &langCode = key;
|
||||||
auto langPtr = findLanguage(key);
|
auto langPtr = findLanguage(key);
|
||||||
|
|
||||||
|
if (langCode.isEmpty())
|
||||||
|
{
|
||||||
|
d->no_language_set = true;
|
||||||
|
}
|
||||||
|
|
||||||
if(!langPtr)
|
if(!langPtr)
|
||||||
{
|
{
|
||||||
qWarning() << "Selected invalid language" << key << ", defaulting to" << defaultLangCode;
|
qWarning() << "Selected invalid language" << key << ", defaulting to" << defaultLangCode;
|
||||||
|
@ -6,6 +6,7 @@
|
|||||||
#include <QLabel>
|
#include <QLabel>
|
||||||
#include "Application.h"
|
#include "Application.h"
|
||||||
#include "translations/TranslationsModel.h"
|
#include "translations/TranslationsModel.h"
|
||||||
|
#include "settings/Setting.h"
|
||||||
|
|
||||||
LanguageSelectionWidget::LanguageSelectionWidget(QWidget *parent) :
|
LanguageSelectionWidget::LanguageSelectionWidget(QWidget *parent) :
|
||||||
QWidget(parent)
|
QWidget(parent)
|
||||||
@ -37,6 +38,9 @@ LanguageSelectionWidget::LanguageSelectionWidget(QWidget *parent) :
|
|||||||
languageView->header()->setSectionResizeMode(0, QHeaderView::Stretch);
|
languageView->header()->setSectionResizeMode(0, QHeaderView::Stretch);
|
||||||
connect(languageView->selectionModel(), &QItemSelectionModel::currentRowChanged, this, &LanguageSelectionWidget::languageRowChanged);
|
connect(languageView->selectionModel(), &QItemSelectionModel::currentRowChanged, this, &LanguageSelectionWidget::languageRowChanged);
|
||||||
verticalLayout->setContentsMargins(0,0,0,0);
|
verticalLayout->setContentsMargins(0,0,0,0);
|
||||||
|
|
||||||
|
auto language_setting = APPLICATION->settings()->getSetting("Language");
|
||||||
|
connect(language_setting.get(), &Setting::SettingChanged, this, &LanguageSelectionWidget::languageSettingChanged);
|
||||||
}
|
}
|
||||||
|
|
||||||
QString LanguageSelectionWidget::getSelectedLanguageKey() const
|
QString LanguageSelectionWidget::getSelectedLanguageKey() const
|
||||||
@ -64,3 +68,10 @@ void LanguageSelectionWidget::languageRowChanged(const QModelIndex& current, con
|
|||||||
translations->selectLanguage(key);
|
translations->selectLanguage(key);
|
||||||
translations->updateLanguage(key);
|
translations->updateLanguage(key);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void LanguageSelectionWidget::languageSettingChanged(const Setting &, const QVariant)
|
||||||
|
{
|
||||||
|
auto translations = APPLICATION->translations();
|
||||||
|
auto index = translations->selectedIndex();
|
||||||
|
languageView->setCurrentIndex(index);
|
||||||
|
}
|
||||||
|
@ -20,6 +20,7 @@
|
|||||||
class QVBoxLayout;
|
class QVBoxLayout;
|
||||||
class QTreeView;
|
class QTreeView;
|
||||||
class QLabel;
|
class QLabel;
|
||||||
|
class Setting;
|
||||||
|
|
||||||
class LanguageSelectionWidget: public QWidget
|
class LanguageSelectionWidget: public QWidget
|
||||||
{
|
{
|
||||||
@ -33,6 +34,7 @@ public:
|
|||||||
|
|
||||||
protected slots:
|
protected slots:
|
||||||
void languageRowChanged(const QModelIndex ¤t, const QModelIndex &previous);
|
void languageRowChanged(const QModelIndex ¤t, const QModelIndex &previous);
|
||||||
|
void languageSettingChanged(const Setting &, const QVariant);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QVBoxLayout *verticalLayout = nullptr;
|
QVBoxLayout *verticalLayout = nullptr;
|
||||||
|
Loading…
Reference in New Issue
Block a user