From 002ae9a4bfbb302364bbf10bbdebfdb58e6d8435 Mon Sep 17 00:00:00 2001
From: bubnikv <bubnikv@gmail.com>
Date: Wed, 28 Aug 2019 11:59:30 +0200
Subject: [PATCH 1/2] Slovaks understand Czech well. Give them the Czech
 translation.

---
 src/slic3r/GUI/GUI_App.cpp | 13 ++++++++++---
 1 file changed, 10 insertions(+), 3 deletions(-)

diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp
index c8f760166..010ae8989 100644
--- a/src/slic3r/GUI/GUI_App.cpp
+++ b/src/slic3r/GUI/GUI_App.cpp
@@ -649,6 +649,12 @@ bool GUI_App::load_language(wxString language)
     if (language.IsEmpty())
         language = "en_US";
 
+    // Alternate language code.
+    wxString language_code_alt = language_code_short(language);
+    if (language_code_alt == "sk")
+    	// Slovaks understand Czech well. Give them the Czech translation.
+    	language_code_alt = "cz";
+
     const wxLanguageInfo *info = nullptr;
     for (const wxLanguageInfo *this_info : get_installed_languages()) {
         if (this_info->CanonicalName == language) {
@@ -656,17 +662,18 @@ bool GUI_App::load_language(wxString language)
             info = this_info;
             break;
         }
-        if (language_code_short(this_info->CanonicalName) == language_code_short(language))
+        if (language_code_short(this_info->CanonicalName) == language_code_alt)
         	// Alternatively try to match just the language without the country suffix.
         	info = this_info;
     }
 
-    wxString canonical_name = info->CanonicalName;
+    wxString canonical_name;
     if (info == nullptr) {
     	// Fallback for user languages, for which we do not have dictionaries.
     	canonical_name = "en_EN";
 		info = wxLocale::GetLanguageInfo(wxLANGUAGE_ENGLISH_US);
-	}
+	} else
+		canonical_name = info->CanonicalName;
 
     wxLocale *new_locale = new wxLocale;
     if (info == nullptr || ! new_locale->Init(info->Language)) {

From a1ebb8d483a36a646aee76b7d787f8d24380b143 Mon Sep 17 00:00:00 2001
From: bubnikv <bubnikv@gmail.com>
Date: Wed, 28 Aug 2019 13:23:58 +0200
Subject: [PATCH 2/2] Don't delete old locales when switching language. It
 crashes for an unknown reason.

---
 src/slic3r/GUI/GUI_App.cpp | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp
index 010ae8989..ccda72f5c 100644
--- a/src/slic3r/GUI/GUI_App.cpp
+++ b/src/slic3r/GUI/GUI_App.cpp
@@ -692,7 +692,7 @@ bool GUI_App::load_language(wxString language)
 		else
 			return false;
     }
-    delete m_wxLocale;
+	wxLocale *old_locale = m_wxLocale;
     m_wxLocale = new_locale;
     m_wxLocale->AddCatalogLookupPathPrefix(from_u8(localization_dir()));
     m_wxLocale->AddCatalog(SLIC3R_APP_KEY);
@@ -700,7 +700,9 @@ bool GUI_App::load_language(wxString language)
 	//FIXME This is a temporary workaround, the correct solution is to switch to "C" locale during file import / export only.
     wxSetlocale(LC_NUMERIC, "C");
     Preset::update_suffix_modified();
-    return true;
+	//FIXME Why the following line crashes?
+	// delete old_locale;
+	return true;
 }
 
 // Get a list of installed languages (languages for which we have dictionaries).
@@ -709,7 +711,7 @@ std::vector<const wxLanguageInfo*> GUI_App::get_installed_languages()
 	wxDir dir(from_u8(localization_dir()));
     wxString filename;
     std::vector<const wxLanguageInfo*> res;
-    res.emplace_back(wxLocale::FindLanguageInfo("en_EN"));
+    res.emplace_back(wxLocale::GetLanguageInfo(wxLANGUAGE_ENGLISH_US));
     for (bool cont = dir.GetFirst(&filename, wxEmptyString, wxDIR_DIRS); cont; cont = dir.GetNext(&filename)) {
 	    const wxLanguageInfo *langinfo = wxLocale::FindLanguageInfo(filename);
         if (langinfo != nullptr) {