diff --git a/gnu/packages/aux-files/guile-launcher.c b/gnu/packages/aux-files/guile-launcher.c index c205477f649..44f7e1f432a 100644 --- a/gnu/packages/aux-files/guile-launcher.c +++ b/gnu/packages/aux-files/guile-launcher.c @@ -84,11 +84,17 @@ int main (int argc, char **argv) { /* Try to install the current locale; remain silent if it fails. */ - if (setlocale (LC_ALL, "") == NULL) - /* The 'guix pull'-provided 'guix' includes at least en_US.utf8 so use - that. That gives us UTF-8 support for 'scm_to_locale_string', etc., - which is always preferable over the C locale. */ - setlocale (LC_ALL, "en_US.utf8"); + char *locale = setlocale (LC_ALL, ""); + if (locale == NULL || strcmp (locale, "C") == 0) + { + /* The 'guix pull'-provided 'guix' includes at least C.UTF-8 (which is + baked into glibc, except when cross-compiling) so use that, and fall + back to en_US.UTF-8. That gives us UTF-8 support for + 'scm_to_locale_string', etc., which is always preferable over the C + locale. */ + if (setlocale (LC_ALL, "C.UTF-8") == NULL) + setlocale (LC_ALL, "en_US.utf8"); + } const char *str; str = getenv ("GUILE_LOAD_PATH"); diff --git a/guix/ui.scm b/guix/ui.scm index eba12c86163..14d6874795a 100644 --- a/guix/ui.scm +++ b/guix/ui.scm @@ -521,7 +521,9 @@ part." "Install the current locale settings." (catch 'system-error (lambda _ - (setlocale LC_ALL "")) + (when (string=? (setlocale LC_ALL "") "C") + ;; If the current locale is "C", prefer "C.UTF-8". + (setlocale LC_ALL "C.UTF-8"))) (lambda args (display-hint (G_ "Consider installing the @code{glibc-locales} package and defining @code{GUIX_LOCPATH}, along these lines: