Настройка переменных локализации в Linux

Конфигурационный файл находится /etc/default/locale.

Команда locale запущенная без ключей выведет настройки текущей локали.

# locale -a | grep ru
ru_RU
ru_RU.iso88595
ru_RU.koi8r
ru_RU.utf8
russian
ru_UA
ru_UA.koi8u
ru_UA.utf8

Подробный вывод с ключом -v

d# locale -a -v
locale: en_US.utf8      archive: /usr/lib/locale/locale-archive
-------------------------------------------------------------------------------
    title | English locale for the USA
   source | Free Software Foundation, Inc.
  address | 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
    email | bug-glibc-locales@gnu.org
 language | English
territory | USA
 revision | 1.0
     date | 2000-06-24
  codeset | UTF-8

locale: ru_RU.utf8      archive: /usr/lib/locale/locale-archive
-------------------------------------------------------------------------------
    title | Russian locale for Russia
   source | RAP
  address | Sankt Jorgens Alle 8, DK-1615 Kobenhavn V, Danmark
    email | bug-glibc-locales@gnu.org
 language | Russian
territory | Russia
 revision | 1.0
     date | 2000-06-29
  codeset | UTF-8

Если в ответ получаем отличное от ru_RU.UTF — перенастраиваем.

# locale-gen ru_RU ru_RU.UTF-8 ru_RU ru_RU.UTF-8
# localedef -c -i ru_RU -f UTF-8 ru_RU.UTF-8
# dpkg-reconfigure locales
# update-locale LANG=ru_RU.UTF-8

Включение системных средств локализации в Red Hat Linux (а, следовательно, и в других дистрибутивах, основанных на Red Hat) осуществляется из файла /etc/profile.d/lang.sh. Как известно, при старте любого shell-а сначала выполняется /etc/profile. В Red Hat в /etc/profile прописаны команды, благодаря которым на исполнение вызываются также все файлы /etc/profile.d/*.sh

Значения переменных локализации в файлах lang.sh задаются путем вызова на выполнение файла /etc/sysconfig/i18n.

# nano /etc/sysconfig/i18n
LANG="en_US.UTF-8"
SYSFONT="latarcyrheb-sun16"

Правда, это верно только для случая, когда вы имеете права суперпользователя root. Но даже если вы простой пользователь Linux-системы и не можете редактировать файл /etc/sysconfig/i18n, то вы все же можете включить локализацию для себя, но несколько иным способом. А именно, поместите в свой файл $HOME/.profile (или в любой файл, который исполняется в процессе логирования пользователя: $HOME/.Xclients, $HOME/.xinitrc или другой) следующие строки: /etc/profile или $HOME/.bash_profile

#export LANG=ru_UA.utf8
#export LINGUAS=ru_RU:en
#export LC_ALL="ru_UA.utf8"
export LANG="en_US.UTF-8"
export LC_ALL="en_US.UTF-8"
export LC_CTYPE="en_US.UTF-8"

Чтобы изменения принялись нужно перезайти в консоль или выполнить команду source для файла в котором вы прописали export

$ source ~/.profile
Чтобы использовать UTF-8 в локали нужно установить LC_CTYPE (или, опционально, переменную LANG, если вы хотите заодно изменить и системный язык).
  • Проверяем текущие значения переменных и установленные локали
    # echo $LC_CTYPE
    # echo $LANG
    # locale -a
    C
    POSIX
  • Доусстановливаем нужные локали
    # dpkg-reconfigure locales
    en_US.UTF-8
    ru_UA.UTF-8
  • В файлы Основы BASH скрипты, циклы, горячие клавиши.bashrc и profile добавляем экспорт переменной LANG
    # nano /etc/bash.bashrc
    # nano /etc/profile
    export LANG=en_US.UTF-8

Удаление лишних локалей в Ubuntu. Делал такие телодвижения:):

  • В файле locale-gen посмотрел пути в которых хранятся файлы локалей.
    nano /usr/sbin/locale-gen
    ...
    SUPPORTED=/var/lib/locales/supported.d
    LOCALES=/usr/share/i18n/locales
    STATEDIR=/var/lib/belocs
    ...
  • В директории supported.d отредактировал файлы, оставил только нужные локали
    # ls -l /var/lib/locales/supported.d
    итого 12
    -rw-r--r-- 1 root root 18 Май 30 22:09 en
    -rw-r--r-- 1 root root 36 Май  1 21:53 local
    -rw-r--r-- 1 root root 36 Апр 18 11:31 ru
  • Поставил и настроил утилиту localepurge, она служит для удаления файлов локализаций, а не локалей
    # aptitude install localepurge
    # nano /etc/locale.nopurge
    MANDELETE
    DONTBOTHERNEWLOCALE
    SHOWFREEDSPACE
    #QUICKNDIRTYCALC
    VERBOSE
    
    en_US.UTF-8
    ru_RU.UTF-8
    ru_UA.UTF-8
  • Запустил localepurge -v. Файлов много удалило, но вывод locale -a не изменился.
  • Перегенируем локали с ключом purge
    ~# locale-gen --purge
    Generating locales...
      en_US.UTF-8... done
      ru_RU.UTF-8... done
      ru_UA.UTF-8... done
    Generation complete.
  • Проверяем. Теперь все правильно остались только нужные мне локали
    ~# locale -a
    C
    C.UTF-8
    en_US.utf8
    POSIX
    ru_RU.utf8
    ru_UA.utf8
  1. Какие локали поддерживает Ubuntu? Находим нужную нам, например en_US.UTF-8 UTF-8
    less /usr/share/i18n/SUPPORTED
  2. Добавим нужную нам локаль в список для создания локалей
    echo 'en_US.UTF-8 UTF-8' >> /var/lib/locales/supported.d/local;
    echo 'uk_UA.UTF-8 UTF-8' >> /var/lib/locales/supported.d/local;
  3. Пересоздадим локали
    dpkg-reconfigure locales

Ссылки

PQ VPS сервера в 28+ странах.