mirror of
https://github.com/keepassxreboot/keepassxc.git
synced 2024-12-26 15:59:50 -05:00
Use QLocale for translation search instead of custom method (#3035)
Use built-in facilities of Qt to traverse QLocale::uiLanguages() to find a valid "most preferred" language, but still respect user's choice in the application settings. Fixes #3030. Fixes #1924.
This commit is contained in:
parent
acd6847cd4
commit
bbe7e8a45a
@ -34,13 +34,14 @@
|
|||||||
*/
|
*/
|
||||||
void Translator::installTranslators()
|
void Translator::installTranslators()
|
||||||
{
|
{
|
||||||
|
QLocale locale;
|
||||||
QString language = config()->get("GUI/Language").toString();
|
QString language = config()->get("GUI/Language").toString();
|
||||||
if (language == "system" || language.isEmpty()) {
|
if (!language.isEmpty() && language != "system") {
|
||||||
language = QLocale::system().name();
|
|
||||||
}
|
|
||||||
if (language == "en") {
|
|
||||||
// use actual English translation instead of the English locale source language
|
// use actual English translation instead of the English locale source language
|
||||||
language = "en_US";
|
if (language == "en") {
|
||||||
|
language = "en_US";
|
||||||
|
}
|
||||||
|
locale = QLocale(language);
|
||||||
}
|
}
|
||||||
|
|
||||||
const QStringList paths = {
|
const QStringList paths = {
|
||||||
@ -51,11 +52,12 @@ void Translator::installTranslators()
|
|||||||
|
|
||||||
bool translationsLoaded = false;
|
bool translationsLoaded = false;
|
||||||
for (const QString& path : paths) {
|
for (const QString& path : paths) {
|
||||||
translationsLoaded |= installTranslator(language, path) || installTranslator("en_US", path);
|
translationsLoaded |= installTranslator(locale, path) || installTranslator(QLocale("en_US"), path);
|
||||||
if (!installQtTranslator(language, path)) {
|
if (!installQtTranslator(language, path)) {
|
||||||
installQtTranslator("en", path);
|
installQtTranslator(QLocale("en"), path);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!translationsLoaded) {
|
if (!translationsLoaded) {
|
||||||
// couldn't load configured language or fallback
|
// couldn't load configured language or fallback
|
||||||
qWarning("Couldn't load translations.");
|
qWarning("Couldn't load translations.");
|
||||||
@ -114,10 +116,10 @@ QList<QPair<QString, QString>> Translator::availableLanguages()
|
|||||||
* @param path local search path
|
* @param path local search path
|
||||||
* @return true on success
|
* @return true on success
|
||||||
*/
|
*/
|
||||||
bool Translator::installTranslator(const QString& language, const QString& path)
|
bool Translator::installTranslator(const QLocale& locale, const QString& path)
|
||||||
{
|
{
|
||||||
QScopedPointer<QTranslator> translator(new QTranslator(qApp));
|
QScopedPointer<QTranslator> translator(new QTranslator(qApp));
|
||||||
if (translator->load(QString("keepassx_%1").arg(language), path)) {
|
if (translator->load(locale, "keepassx_", "", path)) {
|
||||||
return QCoreApplication::installTranslator(translator.take());
|
return QCoreApplication::installTranslator(translator.take());
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@ -131,13 +133,12 @@ bool Translator::installTranslator(const QString& language, const QString& path)
|
|||||||
* @param path local search path
|
* @param path local search path
|
||||||
* @return true on success
|
* @return true on success
|
||||||
*/
|
*/
|
||||||
bool Translator::installQtTranslator(const QString& language, const QString& path)
|
bool Translator::installQtTranslator(const QLocale& locale, const QString& path)
|
||||||
{
|
{
|
||||||
QScopedPointer<QTranslator> qtTranslator(new QTranslator(qApp));
|
QScopedPointer<QTranslator> qtTranslator(new QTranslator(qApp));
|
||||||
if (qtTranslator->load(QString("qtbase_%1").arg(language), path)) {
|
if (qtTranslator->load(locale, "qtbase_", "", path)) {
|
||||||
return QCoreApplication::installTranslator(qtTranslator.take());
|
return QCoreApplication::installTranslator(qtTranslator.take());
|
||||||
} else if (qtTranslator->load(QString("qtbase_%1").arg(language),
|
} else if (qtTranslator->load(locale, "qtbase_", "", QLibraryInfo::location(QLibraryInfo::TranslationsPath))) {
|
||||||
QLibraryInfo::location(QLibraryInfo::TranslationsPath))) {
|
|
||||||
return QCoreApplication::installTranslator(qtTranslator.take());
|
return QCoreApplication::installTranslator(qtTranslator.take());
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
@ -20,6 +20,7 @@
|
|||||||
|
|
||||||
#include <QPair>
|
#include <QPair>
|
||||||
#include <QString>
|
#include <QString>
|
||||||
|
#include <QLocale>
|
||||||
|
|
||||||
class Translator
|
class Translator
|
||||||
{
|
{
|
||||||
@ -28,8 +29,8 @@ public:
|
|||||||
static QList<QPair<QString, QString>> availableLanguages();
|
static QList<QPair<QString, QString>> availableLanguages();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static bool installTranslator(const QString& language, const QString& path);
|
static bool installTranslator(const QLocale& locale, const QString& path);
|
||||||
static bool installQtTranslator(const QString& language, const QString& path);
|
static bool installQtTranslator(const QLocale& locale, const QString& path);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // KEEPASSX_TRANSLATOR_H
|
#endif // KEEPASSX_TRANSLATOR_H
|
||||||
|
Loading…
Reference in New Issue
Block a user