Ver código fonte

Fix search paths for translation

Ivan Savenko 2 anos atrás
pai
commit
b1aaa09b8b
2 arquivos alterados com 19 adições e 8 exclusões
  1. 1 1
      launcher/CMakeLists.txt
  2. 18 7
      launcher/mainwindow_moc.cpp

+ 1 - 1
launcher/CMakeLists.txt

@@ -96,7 +96,7 @@ if(TARGET Qt6::Core)
 else()
 	qt5_wrap_ui(launcher_UI_HEADERS ${launcher_FORMS})
 	if(ENABLE_TRANSLATIONS)
-		set_source_files_properties(${launcher_TS} PROPERTIES OUTPUT_LOCATION ${CMAKE_BINARY_DIR}/bin/${CMAKE_CFG_INTDIR}/launcher/translations)
+		set_source_files_properties(${launcher_TS} PROPERTIES OUTPUT_LOCATION ${CMAKE_BINARY_DIR}/bin/${CMAKE_CFG_INTDIR}/launcher/translation)
 		qt5_add_translation( launcher_QM ${launcher_TS} )
 	endif()
 endif()

+ 18 - 7
launcher/mainwindow_moc.cpp

@@ -139,14 +139,25 @@ void MainWindow::on_lobbyButton_clicked()
 void MainWindow::updateTranslation()
 {
 #ifdef ENABLE_QT_TRANSLATIONS
-	std::string languageCode = settings["general"]["language"].String();
+	std::string translationFile = settings["general"]["language"].String()+ ".qm";
 
-	QString translationFile = "./launcher/translations/" + QString::fromStdString(languageCode) + ".qm";
+	QVector<QString> searchPaths;
+
+	for(auto const & string : VCMIDirs::get().dataPaths())
+		searchPaths.push_back(pathToQString(string / "launcher" / "translation" / translationFile));
+	searchPaths.push_back(pathToQString(VCMIDirs::get().userDataPath() / "launcher" / "translation" / translationFile));
+
+	for(auto const & string : boost::adaptors::reverse(searchPaths))
+	{
+		if (translator.load(string))
+		{
+			if (!qApp->installTranslator(&translator))
+				logGlobal->error("Failed to install translator");
+			return;
+		}
+	}
+
+	logGlobal->error("Failed to find translation");
 
-	qApp->removeTranslator(&translator);
-	if (!translator.load(translationFile))
-		logGlobal->error("Failed to load translation");
-	if (!qApp->installTranslator(&translator))
-		logGlobal->error("Failed to install translator");
 #endif
 }