Jump to content
From ArchWiki
Состояние перевода: На этой странице представлен перевод статьи Locale. Дата последней синхронизации: 2022-04-03. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

Ссылки по теме

- Переменные окружения
- Локализация

Локали определяют язык, который использует система, а также региональные особенности, такие как денежные знаки, формат чисел, даты и времени и наборы символов. Они используются glibc и некоторыми другими программами или библиотеками для рендеринга текста.

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

Имена локалей обычно имеют вид `[язык][_ТЕРРИТОРИЯ][.НАБОР_СИМВОЛОВ][@модификатор]`, где язык это код языка ISO 639, ТЕРРИТОРИЯ это код страны ISO 3166 и НАБОР_СИМВОЛОВ это кодировка вроде ISO-8859-1 или UTF-8. Смотрите setlocale(3).

Чтобы вывести список всех доступных и сгенерированных локалей, выполните:

    $ locale -a

Перед тем, как локаль сможет быть использована в системе, она должна быть сгенерирована. Локали, которые вы можете сгенерировать перечислены в файле `/etc/locale.gen`. Чтобы сгенерировать локаль, первым делом раскомментируйте соответствующую строку в файле (а для удаления наоборот, закомментируйте); вы можете раскомментировать несколько локалей, в зависимости от ваших потребностей.

Например, для русской локали раскомментируйте `ru_RU.UTF-8 UTF-8`:

    /etc/locale.gen

    ...
    #ro_RO ISO-8859-2
    #ru_RU.KOI8-R KOI8-R
    ru_RU.UTF-8 UTF-8
    #ru_RU ISO-8859-5
    #ru_UA.UTF-8 UTF-8
    ...

После сохранения файла сгенерируйте выбранные локали командой:

    # locale-gen

Примечание:

- `locale-gen` также запускается каждый раз при обновлении glibc. [1]
- `UTF-8` предпочтительнее других кодировок. [2]

## Установка локали

Чтобы отобразить текущую локаль и связанные с ней переменные окружения, наберите:

    $ locale

Используемая локаль, выбранная среди сгенерированных в системе, устанавливается в файлах `locale.conf`, каждый из которых должен содержать список переменных окружения в том же формате, в каком их выводит команда locale.

Чтобы посмотреть список доступных ранее сгенерированных локалей, выполните:

    $ localedef --list-archive

Также можно использовать localectl(1):

    $ localectl list-locales

### Установка системной локали

- Системная локаль устанавливается с помощью переменной `LANG` в файле `/etc/locale.conf`. Значением должен быть первый столбец из раскомментированной записи в `/etc/locale.gen`:

    /etc/locale.conf

    LANG=ru_RU.UTF-8

Вы можете установить ее также при помощи localectl:

    # localectl set-locale LANG=ru_RU.UTF-8

Подробнее смотрите #Переменные окружения and locale.conf(5).

Совет: Во время установки системы, если вас устраивает вывод команды locale, вы можете просто сохранить его в файл командой `locale > /etc/locale.conf` (в сеансе arch-chroot).

### Переопределение системной локали в пользовательском сеансе

- Системная локаль может переопределяться в каждом пользовательском сеансе с помощью файла `~/.config/locale.conf` (обычно `~/$XDG_CONFIG_HOME/locale.conf`).

  Совет:
  - Это позволяет вести системные логи в `/var/log/` на английском, при использовании местного языке в рабочей среде пользователя.
  - Вы можете создать файл `/etc/skel/.config/locale.conf`, тогда для всех новых пользователей, добавленных командой useradd с опцией `-m` сразу будет автоматически сгенерирован файл `~/.config/locale.conf`.

### Немедленное применение изменений локали

После внесения изменений в файлы `locale.conf`, они вступят в силу после перезагрузки системы, и для отдельных сеансов пользователей — при входе. Чтобы принудительно обновить локаль в текущем окружении без перезагрузки, выполните:

    $ unset LANG
    $ source /etc/profile.d/locale.sh

Примечание: Переменную `LANG` нужно обязательно сбросить, иначе `locale.sh` не обновит значения из `locale.conf`. Будут обновлены только новые и изменённые переменные; те же, что были удалены из файла `locale.conf`, по-прежнему останутся в текущем сеансе.

### Дополнительно

Переменные окружения настроек локали могут также быть установлены обычным способом, как указано на странице переменные окружения.

Например, чтобы проверить, как работает конкретное приложение с какой-нибудь локалью, вы можете запустить его следующим образом:

    $ LANG=С ./my_application.sh

Аналогично, для установки локали всем процессам, запускаемом из текущей командной оболочки (например, в процессе установки системы):

    $ export LANG=C

## Переменные окружения

Файлы `locale.conf` могут содержать следующие переменные окружения:

- LANG
- LANGUAGE
- `LC_ADDRESS`
- LC_COLLATE
- `LC_CTYPE`
- `LC_IDENTIFICATION`
- `LC_MEASUREMENT`
- `LC_MESSAGES`
- `LC_MONETARY`
- `LC_NAME`
- `LC_NUMERIC`
- `LC_PAPER`
- `LC_TELEPHONE`
- LC_TIME

Полное объяснение этих переменных можно узнать в locale(7), детали описаны в locale(5).

Примечание: При поиске значений, зависящих от локали, программы следуют определённому порядку приоритета.

### LANG: локаль по умолчанию

Локаль, установленная в этой переменной используется в качестве значения для всех остальных `LC_*`-переменных, которые не установлены явно.

Совет: Например, вы англоговорящий пользователь в Испании и вы хотите, чтобы приложение обрабатывало числа и даты согласно стандартам Испании, но тексты были на английском. Тогда вы можете установить переменную `LANG` в значение `es_ES.UTF-8` и переменную `LC_MESSAGES` в `en_US.UTF-8`.

### LANGUAGE: запасные локали

Программы, использующие gettext для перевода, учитывают также переменную `LANGUAGE` в дополнение к стандартным переменным. Это позволяет пользователям установить список локалей, которые будут использоваться в указанном порядке для поиска перевода. Если перевод для более предпочтительной локали (которая идет первее в списке) недоступен, будет произведена попытка получить перевод для следующей, и так далее. Например, пользователь из Австралии может предпочесть британский вариант перевода американскому:

    locale.conf

    LANG=en_AU
    LANGUAGE=en_AU:en_GB:en

### LC_TIME: формат даты и времени

Например, если переменная `LC_TIME` имеет значение `en_US.UTF-8`, будет использован формат даты `ММ/ДД/ГГГГ`. Если вы хотите использовать формат ISO 8601 (`ГГГГ-ММ-ДД`), установите:

    locale.conf

    LC_TIME=en_DK.UTF-8

Примечание: Программы не всегда учитывают указанный здесь формат даты. Например, date(1) использует свои собственные параметры, а Firefox не учитывал `LC_TIME` в версиях 57-84 (Bug 1429578).

### LC_COLLATE: порядок сортировки

Эта переменная отвечает за правила определения сравнения наборов символов, которые используются для сортировки и регулярных выражений.

Установка значения `LC_COLLATE=C`, например, приведет к тому, что команда ls будет располагать файлы, имена которых начинаются с точки, первыми, за ними последуют имена, начинающиеся с цифры, затем с заглавной и, наконец, со строчной буквы:

    /etc/locale.conf

    LC_COLLATE=C

Смотрите также https://superuser.com/a/448294.

Чтобы избежать возможных проблем, в Arch переменная установлена как `LC_COLLATE=C` в `/etc/profile`, однако этот метод сейчас устарел.

### LC_ALL: решение проблем

Переменная `LC_ALL` переопределяет своим значением все `LC_*`-переменные, включая `LANG`, независимо от того, установлены они или нет.

Переменная `LC_ALL` — единственная из всех `LC_`-переменных, которую нельзя установить в `/etc/locale.conf`: она предназначена только в целях проверки при решении проблем.

## Советы и рекомендации

### Запуск приложения с другой локалью в терминале

Например, чтобы запустить программу abiword на иврите:

    # env LANG=he_IL.UTF-8 abiword &

### Запуск приложения с другой локалью из меню

Скопируйте файл .desktop в домашний каталог пользователя:

    $ cp /usr/share/applications/abiword.desktop ~/.local/share/applications/

И отредактируйте команду в опции `Exec`:

    ~/.local/share/applications/abiword.desktop

    Exec=env LANG=he_IL.UTF-8 abiword %U

## Решение проблем

### Эмулятор терминала не поддерживает UTF-8

Небольшой список терминалов с поддержкой UTF-8:

- gnustep-terminal
- konsole
- mlterm
- rxvt-unicode (Русский)
- st
- эмуляторы на основе VTE
- xterm — необходимо запускать с опцией `-u8` или с настройкой `xterm*utf8: 2`. Также вы можете запускать uxterm, который предоставляется пакетом xterm.

#### gnome-terminal или rxvt-unicode не поддерживают UTF-8

Чтобы заработала поддержка UTF-8 в этих приложениях, необходимо запускать их с локалью, в которой установлена кодировка UTF-8, например `ru_RU.UTF-8`. Включите эту локаль в системе, установите ее как системную локаль по умолчанию в соответствиями с инструкциями в предыдущих разделах и перезагрузите компьютер.

### Моя система использует неверный язык

Возможно, некоторые переменные окружения из `locale.conf`. Подробнее смотрите на странице Переменные окружения#Установка переменных.

Если вы используете окружение рабочего стола, такое как GNOME, его настройки могут перекрывать `locale.conf`.

KDE Plasma также позволяет изменить язык интерфейса через свои настройки. Если он всё равно использует язык по умолчанию после изменения, удаление файла `~/.config/plasma-localerc` (ранее `~/.config/plasma-locale-settings.sh`) должно помочь.

Если вы используете экранный менеджер вместе с accountsservice, смотрите Display manager (Русский)#Установка языка.

LightDM автоматически использует accountsservice для выбора локали, если он установлен. В противном случае LightDM читает настройки сеанса из `~/.dmrc`. Возможно, что нежелательные настройки локали прочитались оттуда.

## Смотрите также

- Руководство по локализации Gentoo Linux
- http://wikigentoo.ksiezyc.pl/Locales.htm[устаревшая ссылка 2023-05-06 ⓘ]
- Интерактивная проверка сортировки от ICU
- Инициатива Free Standards Group создания открытого стандарта интернационализации
- О локалях в The Single UNIX Specification от The Open Group
- Переменные окружения для настройки локали на Ubuntu Help.

Category:

- Localization (Русский)

Hidden category:

- Pages with dead links