Introduction

Linux system locale is not configured properly. Applications cannot display text correctly, dates and numbers appear in wrong formats, or system displays locale warnings.

Symptoms

Locale warning:

```bash $ ls

perl: warning: Setting locale failed. perl: warning: Please check that your locale settings: LANGUAGE = (unset), LC_ALL = (unset), LANG = "en_US.UTF-8" are supported and installed on your system. ```

Locale missing:

```bash $ locale

locale: Cannot set LC_CTYPE to default locale: No such file or directory locale: Cannot set LC_MESSAGES to default locale: No such file or directory locale: Cannot set LC_ALL to default locale: No such file or directory ```

Command error:

```bash $ man ls

man: can't set the locale; make sure $LC_* and $LANG are appropriate ```

Package installation:

```bash $ apt install package

dpkg: warning: 'not a tty' not found; using 'tty' instead perl: warning: Setting locale failed. ```

Common Causes

  1. 1.Locale not installed - Language pack missing from system
  2. 2.Environment unset - LANG/LC_ALL environment variables not configured
  3. 3.Configuration missing - Locale not in /etc/locale.conf or /etc/default/locale
  4. 4.SSH locale forwarding - Remote system doesn't have locale
  5. 5.Broken locale package - Locale package corrupted or incomplete
  6. 6.Docker container - Minimal containers without locale support

Step-by-Step Fix

  1. 1.Check logs for specific error messages
  2. 2.Verify configuration settings
  3. 3.Test network connectivity
  4. 4.Review recent changes
  5. 5.Apply corrective action
  6. 6.Verify the fix

Step 1: Check Current Locale Settings

```bash # Check locale: locale

# Output: # LANG=en_US.UTF-8 # LC_CTYPE="en_US.UTF-8" # LC_NUMERIC="en_US.UTF-8" # ...

# Check available locales: locale -a

# Output should include: # en_US.utf8 # C # C.UTF-8

# Check locale environment: echo $LANG echo $LC_ALL echo $LANGUAGE

# Check locale config file: cat /etc/locale.conf # CentOS/RHEL cat /etc/default/locale # Debian/Ubuntu

# Check for missing: locale -a | grep -i en_US ```

Step 2: Install Missing Locale Packages

```bash # Debian/Ubuntu: apt update apt install locales -y

# Generate locales: dpkg-reconfigure locales

# Or manually: locale-gen en_US.UTF-8

# Update locale: update-locale LANG=en_US.UTF-8

# CentOS/RHEL 7/8: yum install langpacks-en glibc-langpack-en -y

# Or: dnf install langpacks-en glibc-langpack-en -y

# Fedora: dnf install langpacks-en -y

# Arch Linux: pacman -S glibc # Locales generated during install

# Alpine Linux: apk add --no-cache musl-locales ```

Step 3: Generate Specific Locales

```bash # Debian/Ubuntu - edit locales file: vim /etc/locale.gen

# Uncomment needed locales: en_US.UTF-8 UTF-8 en_GB.UTF-8 UTF-8 zh_CN.UTF-8 UTF-8

# Generate: locale-gen

# Output: # Generating locales... # en_US.UTF-8... done # en_GB.UTF-8... done

# Generate specific locale: locale-gen en_US.UTF-8

# Check available: locale -a

# For Chinese locale: locale-gen zh_CN.UTF-8 update-locale LANG=zh_CN.UTF-8

# For German: locale-gen de_DE.UTF-8 ```

Step 4: Set System Default Locale

```bash # Debian/Ubuntu: update-locale LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8

# Check file: cat /etc/default/locale

# Output: # LANG=en_US.UTF-8 # LC_ALL=en_US.UTF-8

# CentOS/RHEL: localectl set-locale LANG=en_US.UTF-8

# Check: localectl status

# Edit config file: vim /etc/locale.conf LANG=en_US.UTF-8

# Fedora: localectl set-locale LANG=en_US.UTF-8

# Arch Linux: vim /etc/locale.conf LANG=en_US.UTF-8

# Apply without restart: source /etc/default/locale # Debian/Ubuntu . /etc/locale.conf # CentOS/RHEL ```

Step 5: Set User Locale

```bash # Add to user profile: vim ~/.bashrc

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

# Or ~/.profile: vim ~/.profile

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

# Apply immediately: source ~/.bashrc

# Check: locale

# For specific shell: vim ~/.zshrc export LANG=en_US.UTF-8

# System-wide bashrc: vim /etc/bash.bashrc export LANG=en_US.UTF-8 ```

Step 6: Fix SSH Locale Forwarding

```bash # SSH forwards locale from client

# Check SSH config on server: cat /etc/ssh/sshd_config | grep AcceptEnv

# Default: # AcceptEnv LANG LC_* LANGUAGE XMODIFIERS

# If locale forwarding causes issues:

# On client, disable forwarding: vim ~/.ssh/config

Host myserver SetEnv LANG= SendEnv -

# Or on server, reject certain locales: vim /etc/ssh/sshd_config

AcceptEnv LANG LC_* LANGUAGE # Remove problematic locales

# Restart SSH: systemctl restart sshd

# Or configure client to use server locale: vim ~/.ssh/config

Host myserver RequestTTY yes

# Login and set locale: ssh user@server export LANG=en_US.UTF-8 ```

Step 7: Fix Docker Container Locale

```bash # Minimal containers often lack locale

# Install locale in Dockerfile: # Debian/Ubuntu: RUN apt-get update && apt-get install -y locales RUN locale-gen en_US.UTF-8 ENV LANG en_US.UTF-8 ENV LANGUAGE en_US:en ENV LC_ALL en_US.UTF-8

# Alpine: RUN apk add --no-cache musl-locales ENV LANG=en_US.UTF-8 ENV LC_ALL=en_US.UTF-8

# CentOS/RHEL: RUN yum install -y glibc-langpack-en ENV LANG=en_US.UTF-8

# Build image: docker build -t myimage .

# Run with locale: docker run -e LANG=en_US.UTF-8 -e LC_ALL=en_US.UTF-8 myimage

# Or add to compose: environment: - LANG=en_US.UTF-8 - LC_ALL=en_US.UTF-8 ```

Step 8: Test Locale Configuration

```bash # Test locale: locale

# Test character encoding: echo "Hello 世界" | xxd

# Test date format: date

# Test number format: printf "%.2f\n" 1234.56

# Test currency: # Depends on LC_MONETARY

# Test sort order: sort test.txt

# Test character classes: ls -l | grep [[:alpha:]]

# Test in Python: python3 -c "import locale; locale.setlocale(locale.LC_ALL, 'en_US.UTF-8'); print(locale.currency(1234.56))"

# Test in Perl: perl -e 'use POSIX; setlocale(LC_ALL, "en_US.UTF-8"); print strftime("%c", localtime());'

# Test with locale command: locale -k LC_TIME # Shows time format settings ```

Step 9: Troubleshoot Specific Issues

```bash # Issue: Locale generation fails locale-gen en_US.UTF-8 # Error: character map file not found

# Fix: Install full language support: apt install language-pack-en-base

# Issue: Perl locale warning # Fix: Install locales package: apt install locales locale-gen en_US.UTF-8

# Issue: Python locale error # Fix: Ensure locale installed and set: python3 -c "import locale; locale.setlocale(locale.LC_ALL, '')"

# Issue: MySQL locale # Check MySQL locale: mysql -e "SHOW VARIABLES LIKE '%locale%'";

# Set in MySQL config: [mysqld] lc-messages=en_US

# Issue: Postgres locale # Check: psql -c "SHOW lc_ctype;"

# Set at database creation: createdb --locale=en_US.UTF-8 mydb ```

Step 10: Monitor and Verify

```bash # Create verification script: cat << 'EOF' > /usr/local/bin/check-locale.sh #!/bin/bash

echo "=== Current Locale ===" locale

echo "" echo "=== Available Locales ===" locale -a | head -20

echo "" echo "=== Locale Config ===" cat /etc/locale.conf 2>/dev/null || cat /etc/default/locale 2>/dev/null

echo "" echo "=== Environment Variables ===" echo "LANG=$LANG" echo "LC_ALL=$LC_ALL" echo "LANGUAGE=$LANGUAGE"

echo "" echo "=== Test Locale ===" perl -e 'print "Perl OK\n"' python3 -c 'print("Python OK")' date

echo "" echo "=== Character Test ===" echo "Test: α β γ δ 中文 日本語" EOF

chmod +x /usr/local/bin/check-locale.sh

# Run: /usr/local/bin/check-locale.sh

# System locale status: localectl status

# Check if locale valid: locale -a | grep -q "en_US.utf8" && echo "OK" || echo "Missing" ```

Linux Locale Checklist

CheckCommandExpected
Current localelocaleNo errors
Available localeslocale -aen_US.utf8 listed
LANG varecho $LANGSet to valid locale
Config filecat /etc/locale.confLANG configured
Perl testperl -e printNo warnings
Date formatdateCorrect format

Verification

```bash # After fixing locale

# 1. Check locale locale // No errors, LANG set

# 2. Check available locale -a | grep en_US.utf8 // Listed

# 3. Test perl perl -e 'print "test\n"' // No warnings

# 4. Test date date // Correct format

# 5. Test characters echo "Test: 世界" // Displays correctly

# 6. Test application # Run app that uses locale // No locale errors ```

  • [Fix Linux System Time Wrong](/articles/fix-linux-system-time-wrong)
  • [Fix Linux System Service Failed](/articles/fix-linux-system-service-failed)
  • [Fix Linux System Disk Full](/articles/fix-linux-system-disk-full)
  • [Fix Ceph Cluster Not Healthy](fix-ceph-cluster-not-healthy)
  • [Fix Corosync Cluster Not Forming](fix-corosync-cluster-not-forming)
  • [Fix GlusterFS Volume Not Mounting](fix-glusterfs-volume-not-mounting)
  • [Fix Fix Linux Acpi Event Not Handled Issue in Linux](fix-linux-acpi-event-not-handled)
  • [Fix Fix Linux Anacron Missed Jobs Issue in Linux](fix-linux-anacron-missed-jobs)

<script type="application/ld+json"> { "@context": "https://schema.org", "@type": "TechArticle", "headline": "Fix Linux System Locale Not Set", "description": "Troubleshoot Linux locale not set. Check configuration, install language packs, set default.", "url": "https://www.fixwikihub.com/fix-linux-system-locale-not-set", "publisher": { "@type": "Organization", "name": "FixWikiHub", "url": "https://www.fixwikihub.com" }, "author": { "@type": "Person", "name": "FixWikiHub Editorial Team" }, "datePublished": "2026-04-06T13:22:25.031Z", "dateModified": "2026-04-06T13:22:25.031Z" } </script>