Browse Source

Improve language auto detection

George King 4 months ago
parent
commit
a15d62ed57
1 changed files with 43 additions and 29 deletions
  1. 43 29
      launcher/mainwindow_moc.cpp

+ 43 - 29
launcher/mainwindow_moc.cpp

@@ -81,10 +81,8 @@ MainWindow::MainWindow(QWidget * parent)
 	load(); // load FS before UI
 
 	bool setupCompleted = settings["launcher"]["setupCompleted"].Bool();
-
-	std::string currentLanguage = settings["general"]["language"].String();
-
-	if (!setupCompleted && currentLanguage.empty())
+	
+	if (!setupCompleted)
 		detectPreferredLanguage();
 
 	updateTranslation(); // load translation
@@ -132,31 +130,47 @@ MainWindow::MainWindow(QWidget * parent)
 
 void MainWindow::detectPreferredLanguage()
 {
-    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;
-        }
-    }
+	// Skip autodetection if language is already set to a valid VCMI language
+	std::string currentLanguage = settings["general"]["language"].String();
+
+	if (!currentLanguage.empty())
+	{
+		for (const auto &vcmiLang : Languages::getLanguageList())
+		{
+			if (vcmiLang.identifier == currentLanguage && vcmiLang.selectable)
+			{
+				logGlobal->info("Language '%s' is already valid, skipping autodetection", currentLanguage);
+				return;
+			}
+		}
+	}
+
+	// Proceed with autodetection
+	auto appLanguages = QLocale().uiLanguages();
+	auto sysLanguages = QLocale::system().uiLanguages();
+
+	const auto &preferredLanguages = (appLanguages != sysLanguages && !appLanguages.isEmpty()) ? appLanguages : sysLanguages;
+
+	std::string selectedLanguage;
+
+	for (const auto &userLang : preferredLanguages)
+	{
+		logGlobal->info("Preferred language: %s", userLang.toStdString());
+
+		for (const auto &vcmiLang : Languages::getLanguageList())
+		{
+			if (vcmiLang.tagIETF == userLang.toStdString() && vcmiLang.selectable)
+				selectedLanguage = vcmiLang.identifier;
+		}
+
+		if (!selectedLanguage.empty())
+		{
+			logGlobal->info("Detected language: %s", selectedLanguage);
+			Settings node = settings.write["general"]["language"];
+			node->String() = selectedLanguage;
+			return;
+		}
+	}
 }
 
 void MainWindow::enterSetup()