Перейти к содержанию

5.3 Настройка локали (Configuring Locale Settings)

При установке системы Linux вы, как правило, настраиваете локаль (locale) системы непосредственно в ходе процесса установки. Локаль системы определяет следующее:

  • Язык и кодировку текста, отображаемого на экране
  • Классы символов
  • Порядок сортировки по умолчанию
  • Формат чисел по умолчанию
  • Формат денежных сумм по умолчанию
  • Способ отображения даты и времени

Параметры локали задаются значениями, присвоенными следующим переменным окружения (environment variables):

  • LC_CTYPE — настраивает тип символов и кодировку по умолчанию
  • LC_MESSAGES — настраивает языковые сообщения
  • LC_COLLATE — настраивает правила сортировки
  • LC_NUMERIC — настраивает формат чисел
  • LC_MONETARY — настраивает формат денежных сумм
  • LC_TIME — настраивает отображение даты и времени
  • LC_PAPER — настраивает размер бумаги по умолчанию
  • LC_NAME — настраивает формат имени по умолчанию
  • LC_ADDRESS — настраивает формат адреса по умолчанию
  • LC_TELEPHONE — настраивает формат телефонного номера по умолчанию
  • LC_MEASUREMENT — настраивает единицы измерения по умолчанию
  • LC_ALL — переопределяет все остальные переменные LC_
  • LANG — задаёт значение локали по умолчанию для всех переменных LC_
  • LANGUAGE — переопределяет LC_MESSAGES

Переменной локали LC_CTYPE можно задать значение, используя следующий синтаксис:

language_territory.codeset@modifier

В этом синтаксисе используются следующие элементы:

  • language — код языка по стандарту ISO 639 (указывается строчными буквами)
  • territory — код страны по стандарту ISO 3166 (указывается заглавными буквами)
  • codeset — используемая кодировка символов
  • modifier — прочие атрибуты локали, например диалект или валюта

Рассмотрим следующие примеры:

  • en_US — язык и регион для английского языка в США
  • en_CA — язык и регион для английского языка в Канаде
  • fr_CA — язык и регион для канадского французского

В локали можно также указать кодировку. Например, en_US.UTF-8 задаёт локаль американского английского с кодировкой символов UTF-8 (также известной как кодировка Unicode).

При установке системы Linux параметры локали были определены автоматически на основе сделанных вами выборов в процессе установки. Чтобы просмотреть их в приглашении командной строки, можно воспользоваться командой echo. Вот пример:

openSUSE:~ # echo $LC_CTYPE
en_US.UTF-8
openSUSE:~ #

Как видно из этого примера, переменная LC_CTYPE была заполнена в данной системе при установке. Она определяет тип символов и кодировку, используемые в системе по умолчанию. Как видите, данная система использует локаль американского английского с кодировкой текста Unicode.

Следует также упомянуть, что можно использовать локаль с именем C. Она особенно удобна при написании большого количества сценариев оболочки в командной строке. Она устанавливает следующие параметры локали по умолчанию:

  • Кодировка ASCII
  • Классы символов POSIX
  • Форматы времени, даты, чисел и денежных сумм для США и на английском языке

Если вам по каким-либо причинам нужно локализовать систему Linux с другой локалью, отличной от той, что была настроена при установке, достаточно изменить значение соответствующей переменной окружения. Как правило, все эти переменные устанавливаются в одно и то же значение (либо для задания локали по умолчанию для всех переменных используется LC_ALL или LANG). Тем не менее при необходимости их можно задавать независимо друг от друга с разными значениями.

Однако при этом необходимо учитывать, что не все переменные LC_ имеют одинаковый приоритет. Linux использует следующие правила для определения применяемой локали:

  1. Если переменная LC_ALL определена, используется её значение, а значения всех остальных переменных LC_ не проверяются.
  2. Если LC_ALL не определена, проверяется конкретная переменная LC_, о которой идёт речь. Если у неё есть значение, оно используется.
  3. Если соответствующая переменная LC_ имеет пустое значение, используется переменная окружения LANG.

Если вы хотите, чтобы все переменные LC_ использовали одно и то же значение, задайте переменную LC_ALL — это избавит от необходимости устанавливать каждую переменную по отдельности. Однако если нужно использовать разные значения для переменных LC_, предварительно необходимо задать LC_ALL пустое значение. На самом деле многие дистрибутивы именно поэтому оставляют LC_ALL неопределённой. Вместо этого они устанавливают значение LC_CTYPE для задания кодировки по умолчанию и значение LANG — для предоставления значения по умолчанию всем остальным переменным LC_. Поскольку LANG имеет третий приоритет, вы можете вручную задать значение переменной LC_ без влияния на любые другие переменные LC_.

Чтобы просмотреть все текущие параметры локали, введите команду /usr/bin/locale в приглашении командной строки. Пример:

openSUSE:~ # locale
LANG=POSIX
LC_CTYPE=en_US.UTF-8
LC_NUMERIC="POSIX"
LC_TIME="POSIX"
LC_COLLATE="POSIX"
LC_MONETARY="POSIX"
LC_MESSAGES="POSIX"
LC_PAPER="POSIX"
LC_NAME="POSIX"
LC_ADDRESS="POSIX"
LC_TELEPHONE="POSIX"
LC_MEASUREMENT="POSIX"
LC_IDENTIFICATION="POSIX"
LC_ALL=

В данном примере фактически определены только переменные LANG и LC_CTYPE. Остальные переменные LC_ автоматически получают значение, присвоенное LANG.

Можно также ввести locale charmap в приглашении командной строки, чтобы просмотреть используемый тип кодировки. Пример:

openSUSE:~ # locale charmap
UTF-8
ws1:~ #

Если вам нужно локализовать систему, изменив локаль или кодировку, сначала необходимо определить, какие локали установлены в вашей системе. Для этого используйте параметр -a с командой locale, чтобы получить список всех доступных локалей. Параметр -m с командой locale позволяет просмотреть список доступных кодировок. Пример:

openSUSE:~ # locale -a
C
POSIX
aa_DJ
aa_DJ.utf8
aa_ER
aa_ER.utf8
....
ws1:~ # locale -m
ANSI_X3.110-1983
ANSI_X3.4-1968
ARMSCII-8
....

Обратите внимание: если вы измените кодировку, используемую системой, некоторые файлы, созданные с другой кодировкой, могут отображаться некорректно. Преобразовать кодировку из одной в другую можно с помощью команды iconv в приглашении командной строки. Синтаксис:

iconv -f source_encoding -t destination_encoding -o output_filename input_filename

Помимо настройки локали системы Linux, может потребоваться также настроить параметры часового пояса. Как это делается — рассмотрим далее.