diff --git a/lib/utils/mu-utils.cc b/lib/utils/mu-utils.cc index e1c820f3..8f5dbae2 100644 --- a/lib/utils/mu-utils.cc +++ b/lib/utils/mu-utils.cc @@ -49,6 +49,8 @@ #include "mu-error.hh" #include "mu-option.hh" +#include "message/mu-message-file.hh" + using namespace Mu; namespace { @@ -642,20 +644,21 @@ Mu::TempDir::~TempDir() } bool -Mu::locale_workaround() +Mu::locale_workaround() try { // quite horrible... but some systems break otherwise with // https://github.com/djcb/mu/issues/2252 - for (auto&& loc : {"", "en_US.UTF-8", "C" }) { - try { - std::locale::global(std::locale(loc)); - return true; - } catch (const std::runtime_error& re) { - continue; - } + try { + std::locale::global(std::locale("")); + } catch (const std::runtime_error& re) { + g_setenv("LC_ALL", "C", 1); + std::locale::global(std::locale("")); } + return true; + +} catch (...) { return false; } diff --git a/lib/utils/tests/test-utils.cc b/lib/utils/tests/test-utils.cc index c09671d2..5eae911c 100644 --- a/lib/utils/tests/test-utils.cc +++ b/lib/utils/tests/test-utils.cc @@ -270,6 +270,16 @@ test_to_from_lexnum() g_assert_cmpuint(from_lexnum(to_lexnum(9876543)), ==, 9876543); } +static void +test_locale_workaround() +{ + g_assert_true(locale_workaround()); + + g_setenv("LC_ALL", "BOO", 1); + + g_assert_true(locale_workaround()); +} + int main(int argc, char* argv[]) @@ -287,6 +297,7 @@ main(int argc, char* argv[]) g_test_add_func("/utils/join", test_join); g_test_add_func("/utils/define-bitmap", test_define_bitmap); g_test_add_func("/utils/to-from-lexnum", test_to_from_lexnum); + g_test_add_func("/utils/locale-workaround", test_locale_workaround); return g_test_run(); }