- Locale
- Introduction
- List installed locales
- List current settings
- Changing settings temporarily
- Changing settings permanently
- (Re-)Generating locales
- Troubleshooting
- files
- additional help
- Sysadminium
- Locale в linux
- Определение текущей locale в системе
- Список сгенерированных locales в системе
- Генерация новых locales
- Настройка различных locales разным пользователям
- Перенастройка locales с помощью одной команды
- Итог
Locale
This wiki page is a work in progress. There is precious little documentation covering locales, either in books or on the web. It will take either a) a bit of time, or b) a professional, to make this page a good reference. Three question marks are a placeholder for information that is lacking.
Introduction
Locales customize programs to your language and country. When you installed Ubuntu, you answered some simple questions such as specifying your country and language. Ubuntu used the answers to those questions, in part, to choose a suitable locale for your installation.
The basic functionality is provided by the locales package, which is installed by default. Actual locales are installed separately via the language-pack-* packages.
Most users want a single locale to be used for all aspects of their session. In this case, the GUI provided by System Settings -> Language Support does the right thing.
This page is about more fine-grained, non-GUI customization.
List installed locales
The command ‘locale -a’ will show which locales are available on your system:
$ locale -a C # fall-back, ASCII encoding, same as POSIX de_DE.utf8 # German language, Germany, UTF-8 encoding de_CH.utf8 # German language, Switzerland, UTF-8 encoding fr_CH.utf8 # French language, Switzerland, UTF-8 encoding fr_CA.utf8 # French language, Canada, UTF-8 encoding en_US.utf8 # English language, USA, UTF-8 encoding POSIX # fall-back, ASCII encoding, same as C
List current settings
A piece of software is expected to utilize one or more of the installed locales, depending on a couple of environment variables, each covering a different aspect (a locale category). To list those variables and see their current value, use:
In the output of the above query, you will see entries for: LANG Provides default value for LC_* variables that have not been explicitly set. LC_ADDRESS How addresses are formatted (country first or last, where zip code goes etc.). LC_ALL Overrides individual LC_* settings: if LC_ALL is set, none of the below have any effect. LC_COLLATE How strings (file names. ) are alphabetically sorted. Using the «C» or «POSIX» locale here results in a strcmp()-like sort order, which may be preferable to language-specific locales. LC_CTYPE How characters are classified as letters, numbers etc. This determines things like how characters are converted between upper and lower case. LC_IDENTIFICATION Metadata about the locale information. LC_MEASUREMENT What units of measurement are used (feet, meters, pounds, kilos etc.). LC_MESSAGES What language should be used for system messages. LC_MONETARY What currency you use, its name, and its symbol. LC_NAME How names are represented (surname first or last, etc.). LC_NUMERIC How you format your numbers. For example, in many countries a period (.) is used as a decimal separator, while others use a comma (,). LC_PAPER Paper sizes: 11 x 17 inches, A4, etc. LC_RESPONSE Determines how responses (such as Yes and No) appear in the local language LC_TELEPHONE What your telephone numbers look like. LC_TIME How your time and date are formatted. Use for example «en_DK.UTF-8» to get a 24-hour-clock in some programs.
Changing settings temporarily
Any environment variable may be set on the command line for the current process:
$ date Sat May 14 15:59:12 CEST 2011 $ LC_TIME=zh_CN.UTF-8 $ date 2011年 05月 14日 星期六 16:00:13 CEST 2011
Changing settings permanently
If you want more fine-grained control, you may manually change your system’s locale entries by modifying the file /etc/default/locale (or the user-specific $HOME/.pam_environment, which can be set by gnome-language-selector as well).
For example on a German system, to prevent system messages from being translated, you may use:
LANG=de_DE.UTF-8 LC_MESSAGES=POSIX
Note: changes take effect only after a fresh login.
Older releases, at least before Lucid (when did this change?), required modifying the file /etc/environment.
As an alternative to editing these files by hand update-locale may be used (this applies to older releases as well, at least before Raring):
$ update-locale LANG=de_DE.UTF-8 LC_MESSAGES=POSIX
If none of the above worked for you there is an option to change the actual definition of a locale. You need to edit a file with your locale, for instance:
$ sudo nano /usr/share/i18n/locales/ru_RU and change the definition that you need.
and then recompile locale definition files by:
Read the man page for more information.
(Re-)Generating locales
Installing a language-pack usually implies the creation of a file under /var/lib/locales/supported.d, named by language code (i.e. ‘fr’ for French), listing all locales that shall be generated.
Generation of locales is then automatically triggered as part of the installation process.
In order to trigger generation manually, do:
$ sudo locale-gen Generating locales. de_CH.UTF-8. done de_DE.UTF-8. done en_US.UTF-8. up-to-date Generation complete.
You may also generate new locales by issuing:
$ sudo locale-gen fr_FR.UTF-8 Generating locales. fr_FR.UTF-8. done Generation complete.
This will also append the specified locale to /var/lib/locales/supported.d/local for future regenerations.
Troubleshooting
The gnome display manager (GDM) has its own settings, including GDM_LANG for example, and is known to change locale settings when running /etc/gdm/Xsession. You may want to examine GDM’s cache (/var/cache/gdm/$USER/dmrc) and restart GDM.
files
/etc/default/locale /etc/environment
additional help
Sysadminium
Из статьи вы узнаете как в Linux, а именно Ubuntu и Debian, настроить locale для системы в целом и для пользователей по отдельности.
Locale в linux
Locale (локаль) — это региональные настройки операционной системы.
Каждая GNU/Linux система поставляется с конкретными региональными настройками. Эти настройки влияют на язык:
- интерфейса,
- сообщений об ошибках;
- справочной информации;
- вывода консольных утилит.
Но locale влияет не только на язык. Дополнительно это влияет на формат чисел, даты и времени, денежной валюты и другого.
Определение текущей locale в системе
Во-первых давайте определим с какими региональными настройками вы работаете в данный момент. Другими словами, какая locale сейчас используется в вашей linux системе. Для этого нужно выполнить команду locale без дополнительных параметров:
alex@s-ubu:~$ locale LANG=ru_RU.UTF-8 LANGUAGE= LC_CTYPE="ru_RU.UTF-8" LC_NUMERIC="ru_RU.UTF-8" LC_TIME="ru_RU.UTF-8" LC_COLLATE="ru_RU.UTF-8" LC_MONETARY="ru_RU.UTF-8" LC_MESSAGES="ru_RU.UTF-8" LC_PAPER="ru_RU.UTF-8" LC_NAME="ru_RU.UTF-8" LC_ADDRESS="ru_RU.UTF-8" LC_TELEPHONE="ru_RU.UTF-8" LC_MEASUREMENT="ru_RU.UTF-8" LC_IDENTIFICATION="ru_RU.UTF-8" LC_ALL=
Так как, в примере, мы выполнили команду под пользователем alex, то утилита покажет региональные настройки для этого пользователя.
Имя локали состоит из нескольких частей. Вначале двумя маленькими символами обозначается язык, затем после нижнего подчеркивания идет название страны. Дальше идет кодировка, в современном мире чаще всего используется кодировка UTD-8. Примеры локалей:
- ru_RU.UTF-8 — Русский Россия;
- ru_UA.UTF-8 — Русский Украина;
- en_US.UTF-8 — Английский США;
- en_GB.UTF-8 — Английский Великобритания.
Разберём вывод предыдущей команды.
LANG — системная локаль для этого пользователя содержит значение ru_RU.UTF-8.
Дальше идут переменные, которыми могут пользоваться некоторые утилиты или подсистемы, рассмотрим некоторые из них:
- LANGUAGE — список резервных языков для перевода. Если приложение умеет это использовать и у приложения нет локализации для определённой локали, то оно может использовать запасную локаль;
- LC_NUMERIC — формат чисел, например 100 000 /100.000 / 100,000;
- LC_MONETARY — валюта и денежное форматирование.
Эти и другие переменные используются различными утилитами и подсистемами. Но обычно нет смысла использовать разные локали для этих подсистем.
Список сгенерированных locales в системе
В системе можно использовать только сгенерированные локали. Посмотреть какие сейчас сгенерированы можно так:
alex@s-ubu:~$ locale -a C C.utf8 POSIX ru_RU.utf8
Логали: C, C.utf8, POSIX — это синонимы. Они являются локалями используемыми по умолчанию, если не задана никакая другая локаль.
В системе есть ещё одна локаль — ru_RU.utf8. Эта локаль была сгенерирована при установки системы.
А если добавим опцию -v, то дополнительно увидим описание по каждой locale:
alex@s-ubu:~$ locale -a -v locale: ru_RU.utf8 archive: /usr/lib/locale/locale-archive ------------------------------------------------------------------------------- title | Russian locale for Russia source | RAP address | Sankt Jorgens Alle 8, DK-1615 Kobenhavn V, Danmark email | bug-glibc-locales@gnu.org language | Russian territory | Russia revision | 1.0 date | 2000-06-29 codeset | UTF-8 locale: C.utf8 directory: /usr/lib/locale/C.utf8 ------------------------------------------------------------------------------- title | C locale email | bug-glibc-locales@gnu.org revision | 2.1 date | 2022-01-30 codeset | UTF-8
Так как локали C и POSIX это псевдонимы к C.utf8, то в этом выводе они исключаются.
Генерация новых locales
Список locales находятся в файле — /etc/locale.gen. А чтобы сгенерировать новую локаль нужно разкоментировать нужные локали в этом файле, а затем выполнить от суперпользователя команду locale-gen. Давайте попробуем сгенерировать locale en_US.utf8:
alex@s-ubu:~$ sudo nano /etc/locale.gen en_US.UTF-8 UTF-8 ru_RU.UTF-8 UTF-8 alex@s-ubu:~$ sudo locale-gen Generating locales (this might take a while). en_US.UTF-8. done ru_RU.UTF-8. done Generation complete.
Кстати, если мы укажем использовать локаль, которую не сгенерировали. То команда locale сообщит нам об ошибке:
$ 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 LANG=fr_FR.utf8 LANGUAGE= LC_CTYPE="fr_FR.utf8" LC_NUMERIC="fr_FR.utf8" LC_TIME="fr_FR.utf8" LC_COLLATE="fr_FR.utf8" LC_MONETARY="fr_FR.utf8" LC_MESSAGES="fr_FR.utf8" LC_PAPER="fr_FR.utf8" LC_NAME="fr_FR.utf8" LC_ADDRESS="fr_FR.utf8" LC_TELEPHONE="fr_FR.utf8" LC_MEASUREMENT="fr_FR.utf8" LC_IDENTIFICATION="fr_FR.utf8" LC_ALL=
В выводе видно, что мы пытаемся использовать локаль fr_FR.utf8, но забыли его сгенерировать.
Настройка различных locales разным пользователям
Для начала, если не настраивать локаль отдельным пользователям, то все они будут использовать локаль прописанную в файле /etc/default/locale:
alex@s-ubu:~$ cat /etc/default/locale LANG=ru_RU.UTF-8
Из вывода видно что все пользователи будут использовать локаль ru_RU.UTF-8.
Если пользователю нужно использовать другую локаль, то можно для него переопределить переменную LANG. Для этого можно использовать файл .bashrc в его домашнем каталоге, например:
alex@s-ubu:~$ nano .bashrc LANG=en_US.utf8 alex@s-ubu:~$ su - alex alex@s-ubu:~$ locale LANG=en_US.utf8 LANGUAGE= LC_CTYPE="en_US.utf8" LC_NUMERIC="en_US.utf8" LC_TIME="en_US.utf8" LC_COLLATE="en_US.utf8" LC_MONETARY="en_US.utf8" LC_MESSAGES="en_US.utf8" LC_PAPER="en_US.utf8" LC_NAME="en_US.utf8" LC_ADDRESS="en_US.utf8" LC_TELEPHONE="en_US.utf8" LC_MEASUREMENT="en_US.utf8" LC_IDENTIFICATION="en_US.utf8" LC_ALL=
Теперь все пользователи, кроме alex будут использовать локаль ru_RU.utf8, а alex будет использовать локаль en_US.utf8.
Перенастройка locales с помощью одной команды
В самом конце я покажу команду, с помощью которой можно сгенерировать нужные локали и убрать не нужные, а также выставить локаль по умолчанию. Это команда dpkg-reconfigure locales и запускать её нужно с правами администратора:
$ sudo dpkg-reconfigure locales
После выполнения команды вы увидите псевдографический интерфейс:
После выбора locales для генерации, вам нужно будет выбрать locale по умолчанию, которая пропишется в файл /etc/default/locale:
Итог
Мы познакомились с настройками locale в linux на примерах операционных систем Debian и Ubuntu.
- locale — для просмотра используемой и сгенерированных локалей;
- locale-gen — для генерации локалей;
- dpkg-reconfigure locales — для генерации локалей и установки локали по умолчанию.
А также узнали про системные файлы:
- /etc/default/locale — в нём прописана локаль по умолчанию;
- /etc/locale.gen — здесь содержится список доступных локалей для генерации;
- .bashrc — с помощью этого файла, в домашнем каталоге пользователя, можно переопределить локаль для пользователя.