Locale (Русский) - ArchWiki

# Locale (Русский)

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

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

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

    $ locale -a

Локали, которые вы можете сгенерировать перечислены в файле `/etc/locale.gen`: их имена заданы в формате `[язык][_ТЕРРИТОРИЯ][.НАБОР_СИМВОЛОВ][@модификатор]`. Чтобы сгенерировать локаль, первым делом раскомментируйте соответствующую строку в файле (а для удаления наоборот, закомментируйте); вы можете раскомментировать несколько локалей, в зависимости от ваших потребностей. Например, для русской локали раскомментируйте `ru_RU.UTF-8 UTF-8`. После сохранения файла сгенерируйте выбранные локали командой:

    # locale-gen

Обратите внимание: `locale-gen` также запускается каждый раз при обновлении glibc.

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

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

    $ locale

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

    locale.conf

    LANG=en_AU.UTF-8
    LC_COLLATE=C
    LC_TIME=en_DK.UTF-8

- Системная локаль устанавливается в файле `/etc/locale.conf`. Вы можете установить ее также при помощи localectl:

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

  Подробнее смотрите на man-странице `localectl(1)`.

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

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

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

Приоритет файлов `locale.conf` определяется в `/etc/profile.d/locale.sh`.

Смотрите #Переменные окружения, man-страницу `locale.conf (5)` и связанные страницы для получения подробной информации.

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

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

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

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

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

    $ LANG="en_AU.UTF-8" ./my_application.sh

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

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

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

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

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

### 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

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

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

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

    /etc/locale.conf

    LC_COLLATE=C

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

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

## LC_ALL

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

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

## Настройка локалей

Правильность информации, представленной в этой статье или разделе, оспаривается

Причина: Изменения локалей будут сброшены после обновления glibc, так как соответствующие файлы не указаны в поле backup в файле PKGBUILD. Вместо этого, необходимо создавать новые локали. (Обсудить)

Все параметры локалей располагаются в текстовых файлах в каталоге `/usr/share/i18n/locales/`, которые могут быть отредактированы пользователем при необходимости.

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

### Установка первого дня недели

Во многих странах первый день недели — понедельник. Чтобы изменить первый день недели, добавьте следующие строки в файл настроек локали:

    /usr/share/i18n/locales/локаль

    LC_TIME
    [...]
    week            7;19971130;5
    first_weekday   2
    first_workday   2

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

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

Например, чтобы запустить программу 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`. Также вы можете запускать uxterm, который предоставляется пакетом xterm.

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

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

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

Возможно, некоторые переменные окружения из `locale.conf` были переопределены каким-то другим файлом, например `~/.pam_environment`, который используется в GNOME. Подробнее смотрите на странице Переменные окружения#Установка переменных.

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

- Руководство по локализации Gentoo Linux
- Статья о локалях на Gentoo Wiki
- Интерактивная проверка сортировки от ICU
- Инициатива Free Standards Group создания открытого стандарта интернационализации
- О локалях в The Single UNIX Specification от The Open Group
- Переменные окружения для настройки локали на Ubuntu Help.

Categories:

- Internationalization (Русский)
- Русский