diff --git a/rtgui/multilangmgr.cc b/rtgui/multilangmgr.cc index 7cc79d19a..b4896d69a 100644 --- a/rtgui/multilangmgr.cc +++ b/rtgui/multilangmgr.cc @@ -94,10 +94,34 @@ struct LocaleToLang : private std::map, return "default"; } + + std::string getLocale(const Glib::ustring &language) const + { + for (auto &p : *this) { + if (p.second == language) { + std::string ret = p.first.first; + if (!p.first.second.empty()) { + ret += "_" + p.first.second; + } + return ret; + } + } + return "C"; + } }; const LocaleToLang localeToLang; +void setGtkLanguage(const Glib::ustring &language) +{ + auto l = localeToLang.getLocale(language); +#ifdef WIN32 + putenv(("LANG=" + l).c_str()); +#else + setenv("LANG", l.c_str(), true); +#endif +} + } MultiLangMgr langMgr; @@ -106,8 +130,10 @@ MultiLangMgr::MultiLangMgr () { } -void MultiLangMgr::load (const std::vector &fnames) +void MultiLangMgr::load(const Glib::ustring &language, const std::vector &fnames) { + setGtkLanguage(language); + translations.clear(); for (const auto& fname : fnames) { diff --git a/rtgui/multilangmgr.h b/rtgui/multilangmgr.h index d439307e3..649865217 100644 --- a/rtgui/multilangmgr.h +++ b/rtgui/multilangmgr.h @@ -30,7 +30,7 @@ class MultiLangMgr public: MultiLangMgr (); - void load(const std::vector &fnames); + void load(const Glib::ustring &language, const std::vector &fnames); Glib::ustring getStr(const std::string& key) const; static bool isOSLanguageDetectSupported(); static Glib::ustring getOSUserLanguage(); diff --git a/rtgui/options.cc b/rtgui/options.cc index 449aa3809..6e538059f 100644 --- a/rtgui/options.cc +++ b/rtgui/options.cc @@ -2323,7 +2323,7 @@ void Options::load (bool lightweight) } } - langMgr.load ({localeTranslation, languageTranslation, defaultTranslation}); + langMgr.load (options.language, {localeTranslation, languageTranslation, defaultTranslation}); rtengine::init (&options.rtSettings, argv0, rtdir, !lightweight); }