7.6 Locale Names

The following command prints a list of locales supported by the system:

  locale -a

Portability Note: With the notable exception of the standard locale names ‘C’ and ‘POSIX’, locale names are system-specific.

Most locale names follow XPG syntax and consist of up to four parts:

language[_territory[.codeset]][@modifier]

Beside the first part, all of them are allowed to be missing. If the full specified locale is not found, less specific ones are looked for. The various parts will be stripped off, in the following order:

  1. codeset
  2. normalized codeset
  3. territory
  4. modifier

For example, the locale name ‘de_AT.iso885915@euro’ denotes a German-language locale for use in Austria, using the ISO-8859-15 (Latin-9) character set, and with the Euro as the currency symbol.

In addition to locale names which follow XPG syntax, systems may provide aliases such as ‘german’. Both categories of names must not contain the slash character ‘/’.

If the locale name starts with a slash ‘/’, it is treated as a path relative to the configured locale directories; see LOCPATH below. The specified path must not contain a component ‘..’, or the name is invalid, and setlocale will fail.

Portability Note: POSIX suggests that if a locale name starts with a slash ‘/’, it is resolved as an absolute path. However, the GNU C Library treats it as a relative path under the directories listed in LOCPATH (or the default locale directory if LOCPATH is unset).

Locale names which are longer than an implementation-defined limit are invalid and cause setlocale to fail.

As a special case, locale names used with LC_ALL can combine several locales, reflecting different locale settings for different categories. For example, you might want to use a U.S. locale with ISO A4 paper format, so you set LANG to ‘en_US.UTF-8’, and LC_PAPER to ‘de_DE.UTF-8’. In this case, the LC_ALL-style combined locale name is

LC_CTYPE=en_US.UTF-8;LC_TIME=en_US.UTF-8;LC_PAPER=de_DE.UTF-8;…

followed by other category settings not shown here.

The path used for finding locale data can be set using the LOCPATH environment variable. This variable lists the directories in which to search for locale definitions, separated by a colon ‘:’.

The default path for finding locale data is system specific. A typical value for the LOCPATH default is:

/usr/share/locale

The value of LOCPATH is ignored by privileged programs for security reasons, and only the default directory is used.