Index: CMakeLists.txt
===================================================================
--- CMakeLists.txt	(revisión: 11120)
+++ CMakeLists.txt	(copia de trabajo)
@@ -198,7 +198,11 @@
 	endif ()
 	if (SIMUTRANS_USE_FONTCONFIG)
 		target_compile_definitions(simutrans PRIVATE USE_FONTCONFIG=1)
-		target_link_libraries(simutrans PRIVATE Fontconfig::Fontconfig)
+		if (MINGW)
+			target_link_libraries(simutrans PRIVATE ${FontconfigPC_STATIC_LIBRARIES} -liconv)
+		else ()
+			target_link_libraries(simutrans PRIVATE Fontconfig::Fontconfig)
+		endif ()
 	endif ()
 	target_compile_definitions(simutrans PRIVATE USE_FREETYPE=1)
 endif (SIMUTRANS_USE_FREETYPE)
Index: cmake/SimutransFindDependencies.cmake
===================================================================
--- cmake/SimutransFindDependencies.cmake	(revisión: 11120)
+++ cmake/SimutransFindDependencies.cmake	(copia de trabajo)
@@ -16,6 +16,9 @@
 		pkg_check_modules(SDL2 IMPORTED_TARGET sdl2)
 		pkg_check_modules(Freetype IMPORTED_TARGET freetype2)
 		pkg_check_modules(FluidSynth IMPORTED_TARGET fluidsynth>=2.1.0)
+		if(MINGW)
+			pkg_check_modules(FontconfigPC IMPORTED_TARGET fontconfig)
+		endif ()
 	endif ()
 
 	set(CMAKE_THREAD_PREFER_PTHREAD ON)
Index: src/simutrans/gui/sprachen.cc
===================================================================
--- src/simutrans/gui/sprachen.cc	(revisión: 11120)
+++ src/simutrans/gui/sprachen.cc	(copia de trabajo)
@@ -49,6 +49,15 @@
 	if(  prop_font_file == default_name  ) {
 		prop_font_file = "cyr.bdf";
 	}
+#ifdef USE_FONTCONFIG
+	if (reload_font) {
+		std::string new_fontname = dr_get_system_font(translator::get_lang()->iso_base);
+		if (display_load_font(new_fontname.c_str())) {
+			env_t::fontname = new_fontname;
+			reload_font = !has_character( translator::get_lang()->highest_character );
+		}
+	}
+#endif
 
 	if(  reload_font  ) {
 		// load large font
Index: src/simutrans/simmain.cc
===================================================================
--- src/simutrans/simmain.cc	(revisión: 11120)
+++ src/simutrans/simmain.cc	(copia de trabajo)
@@ -1128,8 +1128,7 @@
 	}
 
 	// use requested language (if available)
-	if(  args.gimme_arg("-lang", 1)  ) {
-		const char *iso = args.gimme_arg("-lang", 1);
+	if(  const char *iso = args.gimme_arg("-lang", 1) ) {
 		if(  strlen(iso)>=2  ) {
 			translator::set_language( iso );
 		}
@@ -1214,7 +1213,15 @@
 		const utf8 *new_world = (const utf8 *)translator::translate("Beenden");
 		size_t len;
 		testfor_this_character = utf8_decoder_t::decode(new_world,len);
+#ifdef USE_FONTCONFIG
 		if (!has_character(testfor_this_character)) {
+			std::string new_fontname = dr_get_system_font(translator::get_lang()->iso_base);
+			if (!display_load_font(new_fontname.c_str())) {
+				display_load_font(env_t::fontname.c_str());
+			} else env_t::fontname = new_fontname;
+		}
+#endif
+		if (!has_character(testfor_this_character)) {
 			// not valid => show font selector
 			loadfont_frame_t* sel = new loadfont_frame_t();
 			destroy_all_win(true); // since eventually the successful load message is still there ....
Index: src/simutrans/sys/simsys.cc
===================================================================
--- src/simutrans/sys/simsys.cc	(revisión: 11120)
+++ src/simutrans/sys/simsys.cc	(copia de trabajo)
@@ -638,10 +638,41 @@
 
 
 
-std::string dr_get_system_font()
+std::string dr_get_system_font(std::string language_iso)
 {
 #if COLOUR_DEPTH != 0
-#ifdef WIN32
+#if defined(ANDROID)
+	return FONT_PATH_X "Roboto-Regular.ttf";
+#elif defined(USE_FONTCONFIG)
+	std::string fontFile = FONT_PATH_X "cyr.bdf";
+	FcInit();
+	FcConfig* config = FcInitLoadConfigAndFonts();
+	FcPattern* pat = FcNameParse((const FcChar8*)"Sans");
+	FcLangSet* langset = FcLangSetCreate();
+	FcLangSetAdd(langset, (FcChar8*) language_iso.c_str());
+	FcPatternAddLangSet(pat, FC_LANG, langset);
+	FcConfigSubstitute(config, pat, FcMatchPattern);
+	FcDefaultSubstitute(pat);
+
+	FcResult result;
+	FcPattern* font = FcFontMatch(config, pat, &result);
+
+	if (font) {
+		FcChar8* file = NULL; 
+
+		if (  FcPatternGetString(font, FC_FILE, 0, &file) == FcResultMatch  ) {
+			fontFile = (char*)file;
+		}
+	}
+	FcPatternDestroy(font);
+	FcPatternDestroy(pat);
+	FcConfigDestroy(config);
+	FcLangSetDestroy(langset);
+	FcFini();
+	DBG_MESSAGE("dr_get_system_font()", "Using %s", fontFile.c_str());
+	return fontFile;
+
+#elif WIN32
 #define DEFAULT_FONT "arial.ttf"
 
 	NONCLIENTMETRICS ncm;
@@ -724,31 +755,6 @@
 	// luckily any TTF font in windows has an ASCII name ...
 	DBG_MESSAGE("dr_get_system_font()", "Using %s", std::string(wsFontFile.begin(), wsFontFile.end()).c_str());
 	return (std::string)winDir + std::string(wsFontFile.begin(), wsFontFile.end());
-#elif defined(ANDROID)
-	return FONT_PATH_X "Roboto-Regular.ttf";
-#elif defined(USE_FONTCONFIG)
-	std::string fontFile = FONT_PATH_X "cyr.bdf";
-	FcInit();
-	FcConfig* config = FcInitLoadConfigAndFonts();
-	FcPattern* pat = FcNameParse((const FcChar8*)"Sans");
-	FcConfigSubstitute(config, pat, FcMatchPattern);
-	FcDefaultSubstitute(pat);
-
-	FcResult result;
-	FcPattern* font = FcFontMatch(config, pat, &result);
-
-	if (font) {
-		FcChar8* file = NULL; 
-
-		if (  FcPatternGetString(font, FC_FILE, 0, &file) == FcResultMatch  ) {
-			fontFile = (char*)file;
-		}
-	}
-	FcPatternDestroy(font);
-	FcPatternDestroy(pat);
-	FcConfigDestroy(config);
-	FcFini();
-	return fontFile;
 #else
 	return FONT_PATH_X "cyr.bdf";
 #endif
Index: src/simutrans/sys/simsys.h
===================================================================
--- src/simutrans/sys/simsys.h	(revisión: 11120)
+++ src/simutrans/sys/simsys.h	(copia de trabajo)
@@ -176,8 +176,11 @@
 // returns the file path to a font file (or more than one, if used with number higher than zero)
 const char *dr_query_fontpath( int );
 
-// return a default TTF (windows/android) or a BDF for now
-std::string dr_get_system_font();
+/**
+* @param language_iso optional, only used for fontconfig builds to query for a suitable font
+* @returns a default TTF (or a BDF if not posible)
+*/
+std::string dr_get_system_font(std::string language_iso = "en");
 
 void dr_textur(int xp, int yp, int w, int h);
 
