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) {