Browse Source

Use regional launguage when different from system language

George King 4 months ago
parent
commit
18d82dd984
1 changed files with 25 additions and 20 deletions
  1. 25 20
      launcher/mainwindow_moc.cpp

+ 25 - 20
launcher/mainwindow_moc.cpp

@@ -132,26 +132,31 @@ MainWindow::MainWindow(QWidget * parent)
 
 void MainWindow::detectPreferredLanguage()
 {
-	auto preferredLanguages = QLocale::system().uiLanguages();
-
-	std::string selectedLanguage;
-
-	for (auto const & userLang : preferredLanguages)
-	{
-		logGlobal->info("Preferred language: %s", userLang.toStdString());
-
-		for (auto const & vcmiLang : Languages::getLanguageList())
-			if (vcmiLang.tagIETF == userLang.toStdString() && vcmiLang.selectable)
-				selectedLanguage = vcmiLang.identifier;
-
-		if (!selectedLanguage.empty())
-		{
-			logGlobal->info("Selected language: %s", selectedLanguage);
-			Settings node = settings.write["general"]["language"];
-			node->String() = selectedLanguage;
-			return;
-		}
-	}
+    auto appLanguages = QLocale().uiLanguages();
+    auto sysLanguages = QLocale::system().uiLanguages();
+
+    const auto &preferredLanguages = (appLanguages != sysLanguages && !appLanguages.isEmpty()) ? appLanguages : sysLanguages;
+
+    std::string selectedLanguage;
+
+    for (auto const & userLang : preferredLanguages)
+    {
+        logGlobal->info("Preferred language: %s", userLang.toStdString());
+
+        for (auto const & vcmiLang : Languages::getLanguageList())
+        {
+            if (vcmiLang.tagIETF == userLang.toStdString() && vcmiLang.selectable)
+                selectedLanguage = vcmiLang.identifier;
+        }
+
+        if (!selectedLanguage.empty())
+        {
+            logGlobal->info("Selected language: %s", selectedLanguage);
+            Settings node = settings.write["general"]["language"];
+            node->String() = selectedLanguage;
+            return;
+        }
+    }
 }
 
 void MainWindow::enterSetup()