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 — код языка по стандарту ISO 639 (указывается строчными буквами)
- territory — код страны по стандарту ISO 3166 (указывается заглавными буквами)
- codeset — используемая кодировка символов
- modifier — прочие атрибуты локали, например диалект или валюта
Рассмотрим следующие примеры:
en_US— язык и регион для английского языка в СШАen_CA— язык и регион для английского языка в Канадеfr_CA— язык и регион для канадского французского
В локали можно также указать кодировку. Например, en_US.UTF-8 задаёт локаль американского английского с кодировкой символов UTF-8 (также известной как кодировка Unicode).
При установке системы Linux параметры локали были определены автоматически на основе сделанных вами выборов в процессе установки. Чтобы просмотреть их в приглашении командной строки, можно воспользоваться командой echo. Вот пример:
Как видно из этого примера, переменная LC_CTYPE была заполнена в данной системе при установке. Она определяет тип символов и кодировку, используемые в системе по умолчанию. Как видите, данная система использует локаль американского английского с кодировкой текста Unicode.
Следует также упомянуть, что можно использовать локаль с именем C. Она особенно удобна при написании большого количества сценариев оболочки в командной строке. Она устанавливает следующие параметры локали по умолчанию:
- Кодировка ASCII
- Классы символов POSIX
- Форматы времени, даты, чисел и денежных сумм для США и на английском языке
Если вам по каким-либо причинам нужно локализовать систему Linux с другой локалью, отличной от той, что была настроена при установке, достаточно изменить значение соответствующей переменной окружения. Как правило, все эти переменные устанавливаются в одно и то же значение (либо для задания локали по умолчанию для всех переменных используется LC_ALL или LANG). Тем не менее при необходимости их можно задавать независимо друг от друга с разными значениями.
Однако при этом необходимо учитывать, что не все переменные LC_ имеют одинаковый приоритет. Linux использует следующие правила для определения применяемой локали:
- Если переменная
LC_ALLопределена, используется её значение, а значения всех остальных переменныхLC_не проверяются. - Если
LC_ALLне определена, проверяется конкретная переменнаяLC_, о которой идёт речь. Если у неё есть значение, оно используется. - Если соответствующая переменная
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 в приглашении командной строки, чтобы просмотреть используемый тип кодировки. Пример:
Если вам нужно локализовать систему, изменив локаль или кодировку, сначала необходимо определить, какие локали установлены в вашей системе. Для этого используйте параметр -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 в приглашении командной строки. Синтаксис:
Помимо настройки локали системы Linux, может потребоваться также настроить параметры часового пояса. Как это делается — рассмотрим далее.