Locales are used in Linux to define which language and character set (encoding) user see in the terminal.
From this article you will learn how to check and change the current locale and language settings from the command line in Linux.
I will show how to check the current locale and language settings and how to get the list of available locals.
You will also see how to set locale and language temporary for the current session only as well as permanently for a single user or for the all users (change default system locale).
Cool Tip: Determine and change a file’s character encoding from the command line in Linux! The best solution for converting text files between different charsets! Read more →
Locale and Language Settings
Execute locale
command to get the information about the current locale and language settings:
$ locale
To list all enabled locales, run:
$ locale -a
Locale is defined in the following format:
<LANGUAGE>_<TERRITORY>.<CODESET>[@<MODIFIERS>]
LANGUAGE | ISO 639 language code |
TERRITORY | ISO 3166 country code |
CODESET | Character set or encoding identifier, like ISO-8859-1 or UTF-8 |
e.g. Australian English with UTF-8 encoding is defined as: en_AU.UTF-8
Add New Locale
New locale: Before a locale can be enabled on the system, it must be generated.
If you didn’t find the desired language or encoding in the list of enabled locales, you can search for them in the list of all supported locales and install whatever you need.
Ubuntu-18.04
Supported releases: Ubuntu-15.04, 15.10, 16.04, 16.10, 18.04.
List the all supported (available for generation) locales:
$ cat /etc/locale.gen
Find the desired locale, for example:
$ grep de_DE.UTF-8 /etc/locale.gen de_DE.UTF-8 UTF-8
Generate it with:
$ sudo locale-gen de_DE.UTF-8
Now you should see it in the list of available locales:
$ locale -a | grep de_DE.utf8 de_DE.utf8
Ubuntu-14.04
Supported releases: Ubuntu-9.10, 10.04, 10.10, 11.04, 11.10, 12.04, 12.10, 13.04, 13.10, 14.04, 14.10.
List the all supported (available for generation) locales:
$ cat /usr/share/i18n/SUPPORTED
Find the desired locale, for example:
$ grep fr_FR.UTF-8 /usr/share/i18n/SUPPORTED fr_FR.UTF-8 UTF-8
Generate it with:
$ sudo locale-gen fr_FR.UTF-8
Now you should see it in the list of available locales:
$ locale -a | grep fr_FR.utf8 fr_FR.utf8
CentOS-7, CentOS-6
List the all supported (available for generation) locales:
$ localedef --list-archive
Find the desired locale, for example:
localedef --list-archive | grep hi_IN.utf8 hi_IN.utf8
Generate it with:
$ sudo localedef -c -i hi_IN -f UTF-8 hi_IN.UTF-8
Now you should see it in the list of available locales:
$ locale -a | grep hi_IN.utf8 hi_IN.utf8
Set Locale for the Current Session
The locale and language settings are defined in the LANG
variable that you can see if you run echo $LANG
.
To set the required locale and language for the current session – it is just needed to redefine this variable.
Below you will find the examples of setting locales for some popular languages.
Set the environment variable LANG
, as shown in the examples, to change a language and encoding for the current session:
Set the English locale:
$ LANG=en_US.utf8
Set the Russian locale:
$ LANG=ru_RU.utf8
Set the French locale:
$ LANG=fr_FR.iso-8859-15
Set the German locale:
$ LANG=de_DE.utf8
Set the Hindi locale:
$ LANG=hi_IN.utf8
Define Locale and Language Permanently
If you don’t want to change locale manually for the each session – you can set it permanently.
For this you can set the required value of the LANG
variable in a user’s bash profile and the needed locale and language settings will be automatically loaded upon the each session.
Put the following line to the ~/.bashrc
or ~/.profile
files, to change permanently the locale of the current user to en_US.utf8
:
export LANG=en_US.utf8
By default, the modification will take effect after logout/login, but you can force it if you run one of the below commands, depending on in which file you have defined the LANG
variable:
$ source ~/.profile
– or –
$ source ~/.bashrc
Set Default System Locale
Cool Tip: Create the awesome ASCII banners from the Linux command line and decorate your SSH warning messages! Read more →
Perform the following steps to permanently change the system locale (for the all users).
Ubuntu-18.04
Supported releases: Ubuntu-15.04, 15.10, 16.04, 16.10, 18.04.
$ localectl set-locale LANG=en_US.utf8
Ubuntu-14.04
Supported releases: Ubuntu-9.10, 10.04, 10.10, 11.04, 11.10, 12.04, 12.10, 13.04, 13.10, 14.04, 14.10.
Edit the file with default locale settings:
/etc/default/locale
Set the LANG
variable:
LANG="en_US.utf8"
CentOS-7
$ localectl set-locale LANG=en_US.utf8
CentOS-6
Edit the file with default locale settings:
/etc/sysconfig/i18n
Set the LANG
variable:
LANG="en_US.utf8"
Reboot is required: Note that the above settings will take effect after reboot only.
Very Nice Post!
Thanks so Much!
is it?
Thanks was great article
for mac compatibility, change every .utf8 to .UTF-8
plain clear understandable.
Thank you !
thank you ,, useful understandable information
$ grep de_DE.UTF-8 /etc/locale.gen de_DE.UTF-8 UTF-8
/etc/locale.gen:de_DE.UTF-8 UTF-8
grep: de_DE.UTF-8: No such file or directory
grep: UTF-8: No such file or directory
You misread the code block. The first line (‘grep de_DE.UTF-8 /etc/locale.gen’) is the command, the other lines are the OUTPUT of that command.
Who uses $LANG and what for?
i need to write tamil language on kalilinux terminal how to i
any way should i fellow
Great post. It’s very helpful. Thank you very much!