Михаил Воронин

Настройка локали в Ubuntu и Debian

     

 Linux  System Administration

На свежем сервере я почти всегда встречаюсь с предупреждениями об отсутсвии "моей" локали.
  1. perl: warning: Setting locale failed.
  2. perl: warning: Please check that your locale settings:
  3. LANGUAGE = (unset),
  4. LC_ALL = (unset),
  5. LC_TIME = "ru_RU.UTF-8",
  6. LC_MONETARY = "ru_RU.UTF-8",
  7. LC_ADDRESS = "ru_RU.UTF-8",
  8. LC_TELEPHONE = "ru_RU.UTF-8",
  9. LC_NAME = "ru_RU.UTF-8",
  10. LC_MEASUREMENT = "ru_RU.UTF-8",
  11. LC_IDENTIFICATION = "ru_RU.UTF-8",
  12. LC_NUMERIC = "ru_RU.UTF-8",
  13. LC_PAPER = "ru_RU.UTF-8",
  14. LANG = "en_US.UTF-8"
  15. are supported and installed on your system.
  16. perl: warning: Falling back to the standard locale ("C").
  17. locale: Cannot set LC_ALL to default locale: No such file or directory
Это сообщение возникает потому, что я пользуюсь системой с кириллистической локалью ru_RU.UTF-8. Когда я захожу на сервер, где нет локали ru_RU.UTF-8, я могу видеть предупреждения. Так вот, чтобы их не видеть, нужно сгенерировать соответсвующую локаль или установить локаль по умолчанию.

Вывод текущих настроек локали

Вывести список всех доступных в вашей системе локалей можно с помощью команды locale.
  1. locale -a
В качетсве ответа вам будет выведен список записей:
LANG Provides default value for LC_* variables that have not been explicitly set.
LC_CTYPE How characters are classified as letters, numbers etc. This determines things like how characters are converted between upper and lower case.
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_TIME How your time and date are formatted. Use for example "en_DK.UTF-8" to get a 24-hour-clock in some programs.
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_MONETARY What currency you use, its name, and its symbol.
LC_MESSAGES
What language should be used for system messages.
LC_PAPER
Paper sizes: 11 x 17 inches, A4, etc.
LC_NAME How names are represented (surname first or last, etc.).
LC_ADDRESS How addresses are formatted (country first or last, where zip code goes etc.).
LC_TELEPHONE
What your telephone numbers look like.
LC_MEASUREMENT What units of measurement are used (feet, meters, pounds, kilos etc.).
LC_IDENTIFICATION Metadata about the locale information.
LC_ALL Overrides individual LC_* settings: if LC_ALL is set, none of the below have any effect.

Генерирование локалей

Чтобы сгенерировать нужную локаль, можно воспользоваться командой locale-gen.
  1. locale-gen ru_RU.UTF-8

Установка локали по-умолчанию

Есть замечательный файлик /etc/default/locale. В этот файлик можно вписать настройки локали. Для минимальной настройки достаточно 2х строк:
  1. LANG="ru_RU.UTF-8"
  2. LC_ALL="ru_RU.UTF-8"
Эта команда задаст локаль ru_RU.UTF-8 для всех типов настроек. Если хочется иметь кириллистические настройки для отображения даты, чисел с плавающей точкой (вещественных чисел) и денег, а для всего остального использовать другую локаль, то можно использовать переменные окружения LC_TIME, LC_NUMERIC и LC_MONETARY. В этом случае переменную LC_ALL устанавливать не нужно.
  1. LANG=en_US.UTF-8
  2. LANGUAGE=en_US:en
  3. LC_CTYPE="en_US.UTF-8"
  4. LC_NUMERIC=ru_RU.UTF-8
  5. LC_TIME=ru_RU.UTF-8
  6. LC_COLLATE="en_US.UTF-8"
  7. LC_MONETARY=ru_RU.UTF-8
  8. LC_MESSAGES="en_US.UTF-8"
  9. LC_PAPER=ru_RU.UTF-8
  10. LC_NAME=ru_RU.UTF-8
  11. LC_ADDRESS=ru_RU.UTF-8
  12. LC_TELEPHONE=ru_RU.UTF-8
  13. LC_MEASUREMENT=ru_RU.UTF-8
  14. LC_IDENTIFICATION=ru_RU.UTF-8
  15. LC_ALL=
Ну и конечно, раз это переменные окружения, то мы можем установить их временно в текущей сессии терминала.
  1. export LANG=de_DE.UTF-8

Удаление лишних локалей

ВНИМАНИЕ! Эта команда работает не так, как вы можете подумать. Она удаляет все локали кроме перечисленных. Локали "C" и "POSIX" не удаляются, о них можно не беспокоиться.
  1. sudo locale-gen --purge ru_RU.UTF-8 en_US.UTF-8

Дополнительная информация

1. WiKi-страница сообщества пользователей Ubuntu [EN]
2. Руководство от Thomas Krenn [EN]