diff --git a/src/aegisublocale.cpp b/src/aegisublocale.cpp index 156f77ab4..9a1258cd0 100644 --- a/src/aegisublocale.cpp +++ b/src/aegisublocale.cpp @@ -35,14 +35,13 @@ #include "aegisublocale.h" #include "options.h" +#include "utils.h" #include #include -#include #include #include - #include #include // Keep this last so wxUSE_CHOICEDLG is set. @@ -78,6 +77,7 @@ wxString AegisubLocale::PickLanguage() { } wxArrayString langs = GetTranslations()->GetAvailableTranslations(AEGISUB_CATALOG); + // No translations available, so don't bother asking the user if (langs.empty() && !active_language) return "en_US"; @@ -94,13 +94,8 @@ wxString AegisubLocale::PickLanguage() { // Generate names wxArrayString langNames; - for (auto const& lang : langs) { - const wxLanguageInfo *info = wxLocale::FindLanguageInfo(lang); - if (info) - langNames.push_back(wxLocale::GetLanguageName(info->Language)); - else - langNames.push_back(lang); - } + for (auto const& lang : langs) + langNames.push_back(LocalizedLanguageName(lang)); long style = wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER | wxOK | wxCENTRE; if (!active_language.empty()) diff --git a/src/subs_edit_ctrl.cpp b/src/subs_edit_ctrl.cpp index 9096f574a..b98a38047 100644 --- a/src/subs_edit_ctrl.cpp +++ b/src/subs_edit_ctrl.cpp @@ -444,10 +444,8 @@ wxMenu *SubsTextEditCtrl::GetLanguagesMenu(int base_id, wxString const& curLang, auto languageMenu = new wxMenu; languageMenu->AppendRadioItem(base_id, _("Disable"))->Check(curLang.empty()); - for (size_t i = 0; i < langs.size(); ++i) { - const wxLanguageInfo *info = wxLocale::FindLanguageInfo(langs[i]); - languageMenu->AppendRadioItem(base_id + i + 1, info ? info->Description : langs[i])->Check(langs[i] == curLang); - } + for (size_t i = 0; i < langs.size(); ++i) + languageMenu->AppendRadioItem(base_id + i + 1, LocalizedLanguageName(langs[i]))->Check(langs[i] == curLang); return languageMenu; } diff --git a/src/utils.cpp b/src/utils.cpp index 9ebd126f0..c77013f08 100644 --- a/src/utils.cpp +++ b/src/utils.cpp @@ -49,7 +49,7 @@ #include #include #include - +#include #include #include #include @@ -267,3 +267,16 @@ agi::fs::path OpenFileSelector(wxString const& message, std::string const& optio agi::fs::path SaveFileSelector(wxString const& message, std::string const& option_name, std::string const& default_filename, std::string const& default_extension, wxString const& wildcard, wxWindow *parent) { return FileSelector(message, option_name, default_filename, default_extension, wildcard, wxFD_SAVE | wxFD_OVERWRITE_PROMPT, parent); } + +wxString LocalizedLanguageName(wxString const& lang) { + Locale iculoc(lang.c_str()); + if (!iculoc.isBogus()) { + UnicodeString ustr; + iculoc.getDisplayName(iculoc, ustr); + return wxString(ustr.getBuffer()); + } + + if (auto info = wxLocale::FindLanguageInfo(lang)) + return info->Description; + return lang; +} diff --git a/src/utils.h b/src/utils.h index 14b43f4ff..a9bae56c8 100644 --- a/src/utils.h +++ b/src/utils.h @@ -112,3 +112,5 @@ wxString FontFace(std::string opt_prefix); agi::fs::path OpenFileSelector(wxString const& message, std::string const& option_name, std::string const& default_filename, std::string const& default_extension, wxString const& wildcard, wxWindow *parent); agi::fs::path SaveFileSelector(wxString const& message, std::string const& option_name, std::string const& default_filename, std::string const& default_extension, wxString const& wildcard, wxWindow *parent); + +wxString LocalizedLanguageName(wxString const& lang);