diff options
author | Robin Gareus <robin@gareus.org> | 2016-12-28 12:39:43 +0100 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2016-12-28 13:38:49 +0100 |
commit | 4c0ce209415aae838b15ace6d5a65742d5c7b968 (patch) | |
tree | 6442e14926dcd7971ef579ebb45f0309c9a33d78 /gtk2_ardour/main.cc | |
parent | 3120270d876c38f6ba22b49a44d93899f831cef6 (diff) |
Allow fine grained control over locale
Diffstat (limited to 'gtk2_ardour/main.cc')
-rw-r--r-- | gtk2_ardour/main.cc | 37 |
1 files changed, 32 insertions, 5 deletions
diff --git a/gtk2_ardour/main.cc b/gtk2_ardour/main.cc index a123631a54..bd55e67327 100644 --- a/gtk2_ardour/main.cc +++ b/gtk2_ardour/main.cc @@ -297,11 +297,19 @@ int main (int argc, char *argv[]) #ifdef ENABLE_NLS /* initialize C and C++ locales to user preference */ - setlocale (LC_ALL, ""); - try { - std::locale::global (std::locale (setlocale (LC_ALL, 0))); - } catch (...) { - std::cerr << "Cannot set C++ locale\n"; + char* l_msg = NULL; + char* l_num = NULL; + if (ARDOUR::translations_are_enabled ()) { + setlocale (LC_ALL, ""); + try { + std::locale::global (std::locale (setlocale (LC_ALL, 0))); + } catch (...) { + std::cerr << "Cannot set C++ locale\n"; + } + l_msg = setlocale (LC_MESSAGES, NULL); + l_num = setlocale (LC_NUMERIC, NULL); + if (l_msg) { l_msg = strdup (l_msg); } + if (l_num) { l_num = strdup (l_num); } } #endif @@ -379,6 +387,25 @@ int main (int argc, char *argv[]) return curvetest (curvetest_file); } +#ifdef ENABLE_NLS + ARDOUR::LocaleMode locale_mode = UIConfiguration::instance().get_locale_mode (); + if (l_msg && l_num && locale_mode != ARDOUR::SET_LC_ALL) { + try { + std::locale cpp_locale (std::locale::classic ()); + cpp_locale = std::locale (cpp_locale, l_msg, std::locale::messages); + if (ARDOUR::SET_LC_MESSAGES_AND_LC_NUMERIC == locale_mode) { + cpp_locale = std::locale (cpp_locale, l_num, std::locale::numeric); + } + std::locale::global (cpp_locale); + } catch (...) { + std::cerr << "Cannot override C++ locale\n"; + } + info << "LC_ALL: " << setlocale (LC_ALL, NULL) << endmsg; + } + free (l_msg); + free (l_num); +#endif + #ifndef PLATFORM_WINDOWS if (::signal (SIGPIPE, sigpipe_handler)) { cerr << _("Cannot xinstall SIGPIPE error handler") << endl; |