How to Fix Failed to set locale, defaulting to C.UTF-8 in CentOS 8?

The "Failed to set locale, defaulting to C.UTF-8" error in CentOS 8 indicates that the system cannot determine the appropriate language and regional settings. This occurs when locale configuration is missing, incomplete, or corrupted, forcing the system to use a generic fallback locale that may cause display issues, incorrect formatting, and application compatibility problems.

Understanding Locales in CentOS 8

Locales define cultural and linguistic preferences including language, character encoding, date/time formats, number formatting, and currency symbols. In CentOS 8, locale settings are stored in /etc/locale.conf and controlled through environment variables like LANG, LC_ALL, and category-specific variables such as LC_TIME and LC_NUMERIC.

Locale Resolution Hierarchy LC_ALL LANG LC_CTYPE LC_TIME LC_NUMERIC Fallback: C.UTF-8

Common Causes

  • Missing locale packages Required language packs not installed

  • Incorrect environment variables Invalid or unset locale variables

  • Corrupted locale configuration Damaged /etc/locale.conf file

  • SSH connection issues Local terminal forwarding incompatible locales

Checking Current Locale Settings

First, examine your current locale configuration using the locale command

locale

Expected output for a properly configured system

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=

If you see C.UTF-8 values, the locale is not properly set. Check available locales

localectl list-locales | grep en_US

Fixing the Locale Error

Method 1: Using localectl Command

Set the system-wide locale using localectl

sudo localectl set-locale LANG=en_US.UTF-8

Verify the change

localectl status

Method 2: Installing Language Packs

If the desired locale is unavailable, install the language pack

sudo dnf install glibc-locale-source glibc-langpack-en

For other languages, replace en with the appropriate language code (e.g., glibc-langpack-es for Spanish).

Method 3: Manual Configuration

Edit the locale configuration file directly

sudo nano /etc/locale.conf

Add or modify the following content

LANG=en_US.UTF-8
LC_ALL=en_US.UTF-8

For SSH sessions, you may need to modify the SSH daemon configuration

sudo nano /etc/ssh/sshd_config

Ensure this line is commented out or set to no

# AcceptEnv LANG LC_*

Restart SSH service

sudo systemctl restart sshd

Verifying the Fix

After making changes, reload the locale settings

source /etc/locale.conf
export LANG=en_US.UTF-8

Or simply log out and log back in. Test the configuration

locale
date

The output should now display proper locale values without any C.UTF-8 fallbacks, and the date command should show formatted output according to your locale settings.

Conclusion

The "Failed to set locale, defaulting to C.UTF-8" error typically results from missing language packages or incorrect locale configuration. By using localectl to set proper locale values and installing necessary language packs, you can resolve this issue and ensure proper system localization behavior.

Updated on: 2026-03-17T09:01:38+05:30

5K+ Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements