Have you ever encountered the warning/error “Failed to set locale, defaulting to C.UTF-8” in CentOS 8 or RHEL 8? If yes, then this article describes how to fix this error. Note that this article should also work on any operating systems based on RHEL 8.
A locale is a set of basic system parameters that define things such as a user’s language, region and any special variant preferences that the user wants to see in their user interface.
Recommended Read: How to Change or Set System Locales in Linux
On POSIX platforms such as Linux and other Unix-like operating systems, locale identifiers are defined by ISO/IEC 15897. For example, UNITED STATES OF AMERICA (US) English using the UTF-8 encoding is en_US.UTF-8).
The following is a screenshot showing the warning/error when you run the dnf or yum command as shown.
To set system locale, use the localectl command. For example, if you want English – UNITED STATES OF AMERICA (US) using the UTF-8 encoding, run the following command.
# localectl set-locale LANG=en_US.UTF-8
Next, check if the system locale has been set by running the following command.
# localectl # dnf install @postgresql
Note that even after setting the system locale, the warning persists. This implies that the language packs are missing. To install them, go to the next section.
If a particular language pack is missing on your system, you need to install it to fix the above error. However, you can install all language packs provided by the glibc-all-langpacks package which contains all locales.
# dnf install langpacks-en glibc-all-langpacks -y
Alternatively, if you want to install locales individually, and thus have a smaller package installation footprint on your system, run the following command (replace en with the locale-code you want).
# dnf install glibc-langpack-en
Using the above procedure, we managed to fix the “Failed to set locale, defaulting to C.UTF-8” in CentOS 8 or RHEL 8. Hoping that this worked for you as well, otherwise. give us feedback via the comment form below.
It solves the issue. Thank you!
Thanks!
After trying the above solution, i.e installing langpacks, I locate gnome-control-center where I was able to change language from ANSI to English, in the Region & Language section. Set Language to English (United States) and Formats to United States (English).
Locale now displays:
LANG=en_US.UTF-8
LC_CTYPE=”en_US.UTF-8″
LC_NUMERIC=”en_US.UTF-8″
LC_TIME=”en_US.UTF-8″
LC_COLLATE=”en_US.UTF-8″
LC_MONETARY=”en_US.UTF-8″
LC_MESSAGES=”en_US.UTF-8″
LC_PAPER=”en_US.UTF-8″
LC_NAME=”en_US.UTF-8″
LC_ADDRESS=”en_US.UTF-8″
LC_TELEPHONE=”en_US.UTF-8″
LC_MEASUREMENT=”en_US.UTF-8″
LC_IDENTIFICATION=”en_US.UTF-8″
LC_ALL=
@Marv
I hope it worked for you. Thanks for the feedback.
RHEL 8.3 install script failed during install localectl status showed empty, but I have updated it however locale still shows “C” and gnome-terminal fails to open.
Marv
Hi, it worked after installing this “dnf install glibc-langpack-en” in Centos 8 Docker container.
Thanks a mission.
Good job!
Many thanks for this – saved a lot of research time.
@Aaron,
I’m using Ubi minimal image and DNF/yum not installed on it. It comes with microdnf.
When I’m trying to install langpack-es, it fails saying the package not available in the base-os-8 repo. Any suggestions?
I don’t want to install an all-langpack to keep the image size small.
Thank you, man.
It worked for me.
Hi, I can’t find DNF. Any solution?
No command ‘dnf’ found, did you mean:
Command ‘df’ from package ‘coreutils’ (main)
Command ‘fnf’ from package ‘confluence’ (universe)
dnf: command not found
@Chamara
Are you using CentOS 8? It comes with DNF installed, alternatively, you can use the YUM package manager to install the packages.
Thank You. Your solution works.
@Julian
Many thanks for the useful feedback.