Как изменить locale linux

Из статьи вы узнаете как в Linux, а именно Ubuntu и Debian, настроить locale для системы в целом и для пользователей по отдельности

Из статьи вы узнаете как в Linux, а именно Ubuntu и Debian, настроить locale для системы в целом и для пользователей по отдельности.

Locale (локаль) – это региональные настройки операционной системы.

Каждая GNU/Linux система поставляется с конкретными региональными настройками. Эти настройки влияют на язык:

  • интерфейса,
  • сообщений об ошибках;
  • справочной информации;
  • вывода консольных утилит.

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

Определение текущей locale в системе

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

alex@s-ubu:~$ locale
LANG=ru_RU.UTF-8
LANGUAGE=
LC_CTYPE="ru_RU.UTF-8"
LC_NUMERIC="ru_RU.UTF-8"
LC_TIME="ru_RU.UTF-8"
LC_COLLATE="ru_RU.UTF-8"
LC_MONETARY="ru_RU.UTF-8"
LC_MESSAGES="ru_RU.UTF-8"
LC_PAPER="ru_RU.UTF-8"
LC_NAME="ru_RU.UTF-8"
LC_ADDRESS="ru_RU.UTF-8"
LC_TELEPHONE="ru_RU.UTF-8"
LC_MEASUREMENT="ru_RU.UTF-8"
LC_IDENTIFICATION="ru_RU.UTF-8"
LC_ALL=

Так как, в примере, мы выполнили команду под пользователем alex, то утилита покажет региональные настройки для этого пользователя.

Имя локали состоит из нескольких частей. Вначале двумя маленькими символами обозначается язык, затем после нижнего подчеркивания идет название страны. Дальше идет кодировка, в современном мире чаще всего используется кодировка UTD-8. Примеры локалей:

  • ru_RU.UTF-8 – Русский Россия;
  • ru_UA.UTF-8 – Русский Украина;
  • en_US.UTF-8 – Английский США;
  • en_GB.UTF-8 – Английский Великобритания.

Разберём вывод предыдущей команды.

LANG – системная локаль для этого пользователя содержит значение ru_RU.UTF-8.

Дальше идут переменные, которыми могут пользоваться некоторые утилиты или подсистемы, рассмотрим некоторые из них:

  • LANGUAGE – список резервных языков для перевода. Если приложение умеет это использовать и у приложения нет локализации для определённой локали, то оно может использовать запасную локаль;
  • LC_NUMERIC – формат чисел, например 100 000 /100.000 / 100,000;
  • LC_MONETARY – валюта и денежное форматирование.

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

Список сгенерированных locales в системе

В системе можно использовать только сгенерированные локали. Посмотреть какие сейчас сгенерированы можно так:

alex@s-ubu:~$ locale -a
C
C.utf8
POSIX
ru_RU.utf8

Логали: C, C.utf8, POSIX – это синонимы. Они являются локалями используемыми по умолчанию, если не задана никакая другая локаль.

В системе есть ещё одна локаль – ru_RU.utf8. Эта локаль была сгенерирована при установки системы.

А если добавим опцию -v, то дополнительно увидим описание по каждой locale:

alex@s-ubu:~$ locale -a -v
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

locale: C.utf8          directory: /usr/lib/locale/C.utf8
-------------------------------------------------------------------------------
    title | C locale
    email | bug-glibc-locales@gnu.org
 revision | 2.1
     date | 2022-01-30
  codeset | UTF-8

Так как локали C и POSIX это псевдонимы к C.utf8, то в этом выводе они исключаются.

Генерация новых locales

Список locales находятся в файле – /etc/locale.gen. А чтобы сгенерировать новую локаль нужно разкоментировать нужные локали в этом файле, а затем выполнить от суперпользователя команду locale-gen. Давайте попробуем сгенерировать locale en_US.utf8:

alex@s-ubu:~$ sudo nano /etc/locale.gen
en_US.UTF-8 UTF-8
ru_RU.UTF-8 UTF-8

alex@s-ubu:~$ sudo locale-gen
Generating locales (this might take a while)...
  en_US.UTF-8... done
  ru_RU.UTF-8... done
Generation complete.

Кстати, если мы укажем использовать локаль, которую не сгенерировали. То команда locale сообщит нам об ошибке:

$ locale
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
LANG=fr_FR.utf8
LANGUAGE=
LC_CTYPE="fr_FR.utf8"
LC_NUMERIC="fr_FR.utf8"
LC_TIME="fr_FR.utf8"
LC_COLLATE="fr_FR.utf8"
LC_MONETARY="fr_FR.utf8"
LC_MESSAGES="fr_FR.utf8"
LC_PAPER="fr_FR.utf8"
LC_NAME="fr_FR.utf8"
LC_ADDRESS="fr_FR.utf8"
LC_TELEPHONE="fr_FR.utf8"
LC_MEASUREMENT="fr_FR.utf8"
LC_IDENTIFICATION="fr_FR.utf8"
LC_ALL=

В выводе видно, что мы пытаемся использовать локаль fr_FR.utf8, но забыли его сгенерировать.

Настройка различных locales разным пользователям

Для начала, если не настраивать локаль отдельным пользователям, то все они будут использовать локаль прописанную в файле /etc/default/locale:

alex@s-ubu:~$ cat /etc/default/locale
LANG=ru_RU.UTF-8

Из вывода видно что все пользователи будут использовать локаль ru_RU.UTF-8.

Если пользователю нужно использовать другую локаль, то можно для него переопределить переменную LANG. Для этого можно использовать файл .bashrc в его домашнем каталоге, например:

alex@s-ubu:~$ nano .bashrc
LANG=en_US.utf8

alex@s-ubu:~$ su - alex

alex@s-ubu:~$ locale
LANG=en_US.utf8
LANGUAGE=
LC_CTYPE="en_US.utf8"
LC_NUMERIC="en_US.utf8"
LC_TIME="en_US.utf8"
LC_COLLATE="en_US.utf8"
LC_MONETARY="en_US.utf8"
LC_MESSAGES="en_US.utf8"
LC_PAPER="en_US.utf8"
LC_NAME="en_US.utf8"
LC_ADDRESS="en_US.utf8"
LC_TELEPHONE="en_US.utf8"
LC_MEASUREMENT="en_US.utf8"
LC_IDENTIFICATION="en_US.utf8"
LC_ALL=

Теперь все пользователи, кроме alex будут использовать локаль ru_RU.utf8, а alex будет использовать локаль en_US.utf8.

Перенастройка locales с помощью одной команды

В самом конце я покажу команду, с помощью которой можно сгенерировать нужные локали и убрать не нужные, а также выставить локаль по умолчанию. Это команда dpkg-reconfigure locales и запускать её нужно с правами администратора:

$ sudo dpkg-reconfigure locales

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

Выполнение команды dpkg-reconfigure locales

Выполнение команды dpkg-reconfigure locales

После выбора locales для генерации, вам нужно будет выбрать locale по умолчанию, которая пропишется в файл /etc/default/locale:

Утилита dpkg-reconfigure locales – выбор locale по умолчанию

Итог

Мы познакомились с настройками locale в linux на примерах операционных систем Debian и Ubuntu.

Изучили команды:

  • locale – для просмотра используемой и сгенерированных локалей;
  • locale-gen – для генерации локалей;
  • dpkg-reconfigure locales – для генерации локалей и установки локали по умолчанию.

А также узнали про системные файлы:

  • /etc/default/locale – в нём прописана локаль по умолчанию;
  • /etc/locale.gen – здесь содержится список доступных локалей для генерации;
  • .bashrc – с помощью этого файла, в домашнем каталоге пользователя, можно переопределить локаль для пользователя.

Сводка

Региональные настройки (locale) в Linux

Имя статьи

Региональные настройки (locale) в Linux

Описание

Из статьи вы узнаете как в Linux, а именно Ubuntu и Debian, настроить locale для системы в целом и для пользователей по отдельности

Contents

  1. Introduction
  2. List installed locales
  3. List current settings
  4. Changing settings temporarily
  5. Changing settings permanently
  6. (Re-)Generating locales
  7. Troubleshooting
  8. files
  9. additional help

This wiki page is a work in progress. There is precious little documentation covering locales, either in books or on the web. It will take either a) a bit of time, or b) a professional, to make this page a good reference. Three question marks are a placeholder for information that is lacking.

Introduction

Locales customize programs to your language and country. When you installed Ubuntu, you answered some simple questions such as specifying your country and language. Ubuntu used the answers to those questions, in part, to choose a suitable locale for your installation.

The basic functionality is provided by the locales package, which is installed by default. Actual locales are installed separately via the language-pack-* packages.

Most users want a single locale to be used for all aspects of their session. In this case, the GUI provided by System Settings -> Language Support does the right thing.

This page is about more fine-grained, non-GUI customization.

List installed locales

The command ‘locale -a’ will show which locales are available on your system:

$ locale -a
C               # fall-back, ASCII encoding, same as POSIX
de_DE.utf8      # German language,  Germany,     UTF-8 encoding
de_CH.utf8      # German language,  Switzerland, UTF-8 encoding
fr_CH.utf8      # French language,  Switzerland, UTF-8 encoding
fr_CA.utf8      # French language,  Canada,      UTF-8 encoding
en_US.utf8      # English language, USA,         UTF-8 encoding
POSIX           # fall-back, ASCII encoding, same as C

List current settings

A piece of software is expected to utilize one or more of the installed locales, depending on a couple of environment variables, each covering a different aspect (a locale category). To list those variables and see their current value, use:

$ locale

In the output of the above query, you will see entries for:

LANG
Provides default value for LC_* variables that have not been explicitly set.
LC_ADDRESS
How addresses are formatted (country first or last, where zip code goes etc.).
LC_ALL
Overrides individual LC_* settings: if LC_ALL is set, none of the below have any effect.
LC_COLLATE
How strings (file names…) are alphabetically sorted. Using the «C» or «POSIX» locale here results in a strcmp()-like sort order, which may be preferable to language-specific locales.
LC_CTYPE
How characters are classified as letters, numbers etc. This determines things like how characters are converted between upper and lower case.
LC_IDENTIFICATION
Metadata about the locale information.
LC_MEASUREMENT
What units of measurement are used (feet, meters, pounds, kilos etc.).
LC_MESSAGES
What language should be used for system messages.
LC_MONETARY
What currency you use, its name, and its symbol.
LC_NAME
How names are represented (surname first or last, etc.).
LC_NUMERIC
How you format your numbers. For example, in many countries a period (.) is used as a decimal separator, while others use a comma (,).
LC_PAPER
Paper sizes: 11 x 17 inches, A4, etc.
LC_RESPONSE
Determines how responses (such as Yes and No) appear in the local language
LC_TELEPHONE
What your telephone numbers look like.
LC_TIME
How your time and date are formatted. Use for example «en_DK.UTF-8» to get a 24-hour-clock in some programs.

Changing settings temporarily

Any environment variable may be set on the command line for the current process:

$ date
Sat May 14 15:59:12 CEST 2011

$ LC_TIME=zh_CN.UTF-8 

$ date
2011年 05月 14日 星期六 16:00:13 CEST 2011

Changing settings permanently

If you want more fine-grained control, you may manually change your system’s locale entries by modifying the file /etc/default/locale (or the user-specific $HOME/.pam_environment, which can be set by gnome-language-selector as well).

For example on a German system, to prevent system messages from being translated, you may use:

LANG=de_DE.UTF-8
LC_MESSAGES=POSIX

Note: changes take effect only after a fresh login.

Older releases, at least before Lucid (when did this change?), required modifying the file /etc/environment.

As an alternative to editing these files by hand update-locale may be used (this applies to older releases as well, at least before Raring):

$ update-locale LANG=de_DE.UTF-8 LC_MESSAGES=POSIX

If none of the above worked for you there is an option to change the actual definition of a locale. You need to edit a file with your locale, for instance:

$ sudo nano /usr/share/i18n/locales/ru_RU and change the definition that you need.  

and then recompile locale definition files by:

$ sudo locale-gen

Read the man page for more information.

(Re-)Generating locales

Installing a language-pack usually implies the creation of a file under /var/lib/locales/supported.d, named by language code (i.e. ‘fr’ for French), listing all locales that shall be generated.

Generation of locales is then automatically triggered as part of the installation process.

In order to trigger generation manually, do:

$ sudo locale-gen
Generating locales...
  de_CH.UTF-8... done
  de_DE.UTF-8... done
  en_US.UTF-8... up-to-date
Generation complete.

You may also generate new locales by issuing:

$ sudo locale-gen fr_FR.UTF-8
Generating locales...
  fr_FR.UTF-8... done
Generation complete.

This will also append the specified locale to /var/lib/locales/supported.d/local for future regenerations.

Troubleshooting

The gnome display manager (GDM) has its own settings, including GDM_LANG for example, and is known to change locale settings when running /etc/gdm/Xsession. You may want to examine GDM’s cache (/var/cache/gdm/$USER/dmrc) and restart GDM.

files

/etc/default/locale
/etc/environment

additional help

Interesting man pages (note that the section number is important):

  • locale(1) about the locale command

  • locale(5) about locale definition files

Documentation about the common character sets:

  • ascii(7)

  • iso_8859_1(7)

  • utf8(7)


CategorySoftware

Locale is basically a set of environmental variables that defines the user’s language, region, and any special variant preferences that the user wants to see in their Linux interface. System libraries and locale-aware applications on the system use these environmental variables.

Locale settings usually consist of at least a language code, a country/region code, time/date format, numbers format setting, currency format setting, Color setting, etc. Here we will see how to set/change or view the system’s locale in Linux.

Viewing System Locale in Linux

For viewing the information regarding the currently installed locale use the following command on the terminal:-

$ locale

How to Change or Set System Locales in Linux

We will get a list of variables that can be reset to a different value according to our choice later on.

The current status can be seen using the following command:

localectl status

How to Change or Set System Locales in Linux

Display Details of a Specific Variable

We can also view more information about a specific variable that we saw when we run the locale command, for example, LC_TIME, which stores the time and date format, LC_PAPER which stores the paper size settings, LC_TELEPHONE which stores telephone settings format, etc.

You can get this information by using the following commands:-

$ locale -k LC_TIME
$ locale -k LC_TELEPHONE
$ locale -k LC_PAPER  

How to Change or Set System Locales in Linux

How to Change or Set System Locales in Linux

Display All Available locale

 Display a list of all available locales using the following command:-

$ locale -a

How to Change or Set System Locales in Linux

Setting up System Locale in Linux

We might want to change or set the system local, for that we have to use the update-locale program. The LANG variable allows us to set up the locale for the entire system.

For setting up LANG to en_IN.UTF-8 and removes definitions for LANGUAGE we can use the following command:-

$ sudo update-locale LANG=LANG=en_IN.UTF-8 LANGUAGE
OR
$ sudo localectl set-locale LANG=en_IN.UTF-8

Global locale settings

We can find global locale settings in /etc/default/locale on Ubuntu/Debian Linux distros that you can edit for configuring your system locale manually using the following command:-

$  sudo vi /etc/default/locale

How to Change or Set System Locales in Linux

To Change locale

We can also change the value of a locale that is preset, by editing the .bashrc profile by using the following command:-

sudo nano ~/.bashrc

How to Change or Set System Locales in Linux

We can set a global locale for a single user, by adding the following lines at the end of  the ~/.bash_profile file 

LANG="en_IN.utf8"
export LANG

If you want to get more information about the System locale, update-locale and localectl just view the manual pages using the following command:-

$ man locale
$ man update-locale
$ man localectl

How to Change or Set System Locales in Linux

How to Change or Set System Locales in Linux

How to Change or Set System Locales in Linux

Locale is basically a set of environmental variables that defines the user’s language, region, and any special variant preferences that the user wants to see in their Linux interface. System libraries and locale-aware applications on the system use these environmental variables.

Locale settings usually consist of at least a language code, a country/region code, time/date format, numbers format setting, currency format setting, Color setting, etc. Here we will see how to set/change or view the system’s locale in Linux.

Viewing System Locale in Linux

For viewing the information regarding the currently installed locale use the following command on the terminal:-

$ locale

How to Change or Set System Locales in Linux

We will get a list of variables that can be reset to a different value according to our choice later on.

The current status can be seen using the following command:

localectl status

How to Change or Set System Locales in Linux

Display Details of a Specific Variable

We can also view more information about a specific variable that we saw when we run the locale command, for example, LC_TIME, which stores the time and date format, LC_PAPER which stores the paper size settings, LC_TELEPHONE which stores telephone settings format, etc.

You can get this information by using the following commands:-

$ locale -k LC_TIME
$ locale -k LC_TELEPHONE
$ locale -k LC_PAPER  

How to Change or Set System Locales in Linux

How to Change or Set System Locales in Linux

Display All Available locale

 Display a list of all available locales using the following command:-

$ locale -a

How to Change or Set System Locales in Linux

Setting up System Locale in Linux

We might want to change or set the system local, for that we have to use the update-locale program. The LANG variable allows us to set up the locale for the entire system.

For setting up LANG to en_IN.UTF-8 and removes definitions for LANGUAGE we can use the following command:-

$ sudo update-locale LANG=LANG=en_IN.UTF-8 LANGUAGE
OR
$ sudo localectl set-locale LANG=en_IN.UTF-8

Global locale settings

We can find global locale settings in /etc/default/locale on Ubuntu/Debian Linux distros that you can edit for configuring your system locale manually using the following command:-

$  sudo vi /etc/default/locale

How to Change or Set System Locales in Linux

To Change locale

We can also change the value of a locale that is preset, by editing the .bashrc profile by using the following command:-

sudo nano ~/.bashrc

How to Change or Set System Locales in Linux

We can set a global locale for a single user, by adding the following lines at the end of  the ~/.bash_profile file 

LANG="en_IN.utf8"
export LANG

If you want to get more information about the System locale, update-locale and localectl just view the manual pages using the following command:-

$ man locale
$ man update-locale
$ man localectl

How to Change or Set System Locales in Linux

How to Change or Set System Locales in Linux

How to Change or Set System Locales in Linux

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

Для тех, кому лень читать всю статью до конца — чаще всего для локализации консоли достаточно повторно сконфигурировать пакет locales:

$ sudo dpkg-reconfigure locales

Сначала будут созданы нужные локали (их выбрать на первом экране), потом установлена локаль по умолчанию (ее выбрать на втором экране).

Текущие настройки языка

Посмотрим информацию о текущем языковом окружении:

$ locale
LANG=C.UTF-8
LANGUAGE=
LC_CTYPE="C.UTF-8"
LC_NUMERIC="C.UTF-8"
LC_TIME="C.UTF-8"
LC_COLLATE="C.UTF-8"
LC_MONETARY="C.UTF-8"
LC_MESSAGES="C.UTF-8"
LC_PAPER="C.UTF-8"
LC_NAME="C.UTF-8"
LC_ADDRESS="C.UTF-8"
LC_TELEPHONE="C.UTF-8"
LC_MEASUREMENT="C.UTF-8"
LC_IDENTIFICATION="C.UTF-8"
LC_ALL=

Список доступных локалей

Теперь посмотрим список всех установленных языков и кодировок:

$ locale -a
C
C.UTF-8
POSIX

Есть только системная локаль C.UTF-8, которая присутствует всегда. А нам надо добавить еще две локали — en_US.UTF-8 и ru_RU.UTF-8.

Добавить новую локаль

Смотрим список всех поддерживаемых (доступных для установки) локалей:

$ cat /etc/locale.gen
# This file lists locales that you wish to have built. You can find a list
# of valid supported locales at /usr/share/i18n/SUPPORTED, and you can add
# user defined locales to /usr/local/share/i18n/SUPPORTED. If you change
# this file, you need to rerun locale-gen.

# aa_DJ ISO-8859-1
# aa_DJ.UTF-8 UTF-8
# ..........
# en_US.ISO-8859-15 ISO-8859-15
# en_US.UTF-8 UTF-8
# en_ZA ISO-8859-1
# ..........
# ru_RU.KOI8-R KOI8-R
# ru_RU.UTF-8 UTF-8
# ru_UA KOI8-U
# ..........
# zu_ZA ISO-8859-1
# zu_ZA.UTF-8 UTF-8

Устанавливаем нужные локали — en_US.UTF-8 и ru_RU.UTF-8:

$ sudo locale-gen en_US.UTF-8 ru_RU.UTF-8
Generating locales (this might take a while)...
  en_US.UTF-8... done
  ru_RU.UTF-8... done
Generation complete.

Второй способ установить локали — расскомментровать нужные строки в файле /etc/locale.gen

# This file lists locales that you wish to have built. You can find a list
# of valid supported locales at /usr/share/i18n/SUPPORTED, and you can add
# user defined locales to /usr/local/share/i18n/SUPPORTED. If you change
# this file, you need to rerun locale-gen.

# aa_DJ ISO-8859-1
# aa_DJ.UTF-8 UTF-8
# ..........
# en_US.ISO-8859-15 ISO-8859-15
en_US.UTF-8 UTF-8
# en_ZA ISO-8859-1
# ..........
# ru_RU.KOI8-R KOI8-R
ru_RU.UTF-8 UTF-8
# ru_UA KOI8-U
# ..........
# zu_ZA ISO-8859-1
# zu_ZA.UTF-8 UTF-8

И просто выполнить команду locale-gen без указания локалей:

$ sudo locale-gen

Подробная информация о локалях

Более подробную информацию об установленных в системе локалях можно посмотреть так:

$ 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 | http://www.gnu.org/software/libc/
    email | bug-glibc-locales@gnu.org
 language | American English
territory | United States
 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

locale: ru_UA.utf8      archive: /usr/lib/locale/locale-archive
-------------------------------------------------------------------------------
    title | Russian locale for Ukraine
   source | RFC 2319
    email | bug-glibc-locales@gnu.org
 language | Russian
territory | Ukraine
 revision | 1.0
     date | 2000-06-29
  codeset | UTF-8

locale: C.UTF-8         directory: /usr/lib/locale/C.UTF-8
-------------------------------------------------------------------------------
    title | C locale
    email | aurel32@debian.org
 language | C
 revision | 1.6
     date | 2016-08-08
  codeset | UTF-8

Часть локалей размещена в архиве /usr/lib/locale/locale-archive, а часть — в директориях внутри /usr/lib/locale/.

Локаль по-умолчанию

Хорошо, нужные локали у нас теперь есть, осталось только задать локаль по умолчанию:

$ sudo update-locale LANG=ru_RU.UTF-8

Эта команда запишет в файл /etc/default/locale строку:

LANG=ru_RU.UTF-8

После этого надо будет перезайти в систему. И проверяем информацию о языковом окружении:

$ locale
LANG=ru_RU.UTF-8
LANGUAGE=
LC_CTYPE="ru_RU.UTF-8"
LC_NUMERIC="ru_RU.UTF-8"
LC_TIME="ru_RU.UTF-8"
LC_COLLATE="ru_RU.UTF-8"
LC_MONETARY="ru_RU.UTF-8"
LC_MESSAGES="ru_RU.UTF-8"
LC_PAPER="ru_RU.UTF-8"
LC_NAME="ru_RU.UTF-8"
LC_ADDRESS="ru_RU.UTF-8"
LC_TELEPHONE="ru_RU.UTF-8"
LC_MEASUREMENT="ru_RU.UTF-8"
LC_IDENTIFICATION="ru_RU.UTF-8"
LC_ALL=

Теперь все правильно, так что запишем эту информацию в файл /etc/default/locale:

$ locale | sudo tee /etc/default/locale
$ cat /etc/default/locale
LANG=ru_RU.UTF-8
LANGUAGE=
LC_CTYPE="ru_RU.UTF-8"
LC_NUMERIC="ru_RU.UTF-8"
LC_TIME="ru_RU.UTF-8"
LC_COLLATE="ru_RU.UTF-8"
LC_MONETARY="ru_RU.UTF-8"
LC_MESSAGES="ru_RU.UTF-8"
LC_PAPER="ru_RU.UTF-8"
LC_NAME="ru_RU.UTF-8"
LC_ADDRESS="ru_RU.UTF-8"
LC_TELEPHONE="ru_RU.UTF-8"
LC_MEASUREMENT="ru_RU.UTF-8"
LC_IDENTIFICATION="ru_RU.UTF-8"
LC_ALL=

Быстрая локализация

До сих пор мы все делали ручками, но если лень — можно просто повторно сконфигурировать пакет locales. Сначала будут созданы нужные локали (их нужно выбрать на первом экране), потом установлена локаль по умолчанию (ее нужно выбрать на втором экране).

$ sudo dpkg-reconfigure locales

Удалить лишние локали

После установки (генерации) локали, она помещается в архив /usr/lib/locale/locale-archive. Файл архива — это файл, отображаемый в память, который содержит все локали системы; он используется всеми локализованными программами. Посмотреть список локалей в архиве можно с помощью команды:

$ localedef --list-archive
en_US.utf8
ru_RU.utf8
ru_UA.utf8

Удалить заданную локаль из файла архива:

$ sudo localedef --delete-from-archive ru_UA.utf8

Обратите внимание на название локали — ru_UA.utf8, а не ru_UA.UTF-8. Если неправильно указать локаль — она не будет удалена из архива:

$ sudo localedef --delete-from-archive ru_UA.UTF-8
locale "ru_UA.UTF-8" not in archive

В случае, если утилита locale-gen была вызвана с опцией --no-archive, надо удалить соответствующую директорию в /usr/lib/locale:

$ cd /usr/lib/locale
$ ls
C.UTF-8    en_US.utf8    ru_RU.utf8    ru_UA.utf8
$ sudo rm -r ru_UA.utf8

Переводы для системных программ

Локализация для основных системных программ, чтобы получать сообщения на русском языке:

$ sudo apt install language-pack-ru

Локализация для текущей сессии

Достаточно временно установить переменную окружения LANG в текущей сессии терминала:

$ export LANG=en_US.UTF-8
$ cat /etc/shadow
cat: /etc/shadow: Permission denied
$ export LANG=ru_RU.UTF-8
$ cat /etc/shadow
cat: /etc/shadow: Отказано в доступе

Или даже так — передать переменную LANG конкретной программе:

$ export LANG=en_US.UTF-8
$ cat /etc/shadow
cat: /etc/shadow: Permission denied
$ LANG=ru_RU.UTF-8 cat /etc/shadow
cat: /etc/shadow: Отказано в доступе

Файлы конфигурации шрифта и клавиатуры

Настройки можно найти в файлах конфигурации /etc/default/console-setup и /etc/default/keyboard:

$ cat /etc/default/console-setup
# Consult the console-setup(5) manual page.
ACTIVE_CONSOLES="/dev/tty[1-6]"
CHARMAP="UTF-8"
CODESET="CyrSlav"
FONTFACE="Fixed"
FONTSIZE="8x16"
VIDEOMODE=
$ cat /etc/default/keyboard
# Consult the keyboard(5) manual page.
XKBMODEL="pc105"
XKBLAYOUT="us,ru"
XKBVARIANT=","
XKBOPTIONS="grp:alt_shift_toggle,grp_led:scroll"
BACKSPACE="guess"

Это системные настройки, пользователь может создать свои в файлах ~/.console-setup и ~/.keyboard.

Настройка шрифта и клавиатуры

Чтобы сформировать файлы конфигурации /etc/default/console-setup и /etc/default/keyboard можно использовать команды:

$ sudo dpkg-reconfigure console-setup

$ sudo dpkg-reconfigure keyboard-configuration

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

Console-cyrillic — это пакет для руссификации консоли (поддержки кириллицы в терминале), старый и известный пакет. Но в новых версиях операционных систем с системой инициализации systemd он считается устаревшим, поскольку у systemd есть нативные средства локализации консоли и наличие console-cyrillic там не только не требуется, но и не рекомендуется.

Поиск:
CLI • Linux • Ubuntu • Команда • Конфигурация • Настройка • Сервер • Установка • Локализация • Русский • ru_RU.UTF-8

Каталог оборудования

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.

Производители

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.

Функциональные группы

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.

Локаль — это набор переменных окружения, который определяет настройки языка, страны и символов (или любые другие специальные варианты) для ваших приложений и сеанса оболочки в системе Linux. Эти переменные окружения используются системными библиотеками и языковыми приложениями в системе.

Язык влияет на такие моменты, как формат времени / даты, первый день недели, цифры, валюта и многие другие значения, отформатированные в соответствии с языком или регионом / страной, установленной в системе Linux.

В этой статье мы покажем, как просмотреть установленный в данный момент язык системы и как установить локаль системы в Linux.

Чтобы просмотреть информацию о текущей установленной локали, используйте утилиту locale или localectl.

$ locale 

LANG=ru_RU.UTF-8 
LANGUAGE=ru 
LC_CTYPE="ru_RU.UTF-8" 
LC_NUMERIC="ru_RU.UTF-8" 
LC_TIME="ru_RU.UTF-8" 
LC_COLLATE="ru_RU.UTF-8" 
LC_MONETARY="ru_RU.UTF-8" 
LC_MESSAGES="ru_RU.UTF-8" 
LC_PAPER="ru_RU.UTF-8" 
LC_NAME="ru_RU.UTF-8" 
LC_ADDRESS="ru_RU.UTF-8" 
LC_TELEPHONE="ru_RU.UTF-8" 
LC_MEASUREMENT="ru_RU.UTF-8" 
LC_IDENTIFICATION="ru_RU.UTF-8" 
LC_ALL=''
$ localectl status 

   System Locale: LANG=ru_RU.UTF-8 
       VC Keymap: n/a 
      X11 Layout: us 
       X11 Model: pc105

Вы можете просмотреть дополнительную информацию о переменной окружения, например LC_TIME, которая хранит формат времени и даты.

$ locale -k LC_TIME
  
abday="Вс;Пн;Вт;Ср;Чт;Пт;Сб"  
day="Воскресенье;Понедельник;Вторник;Среда;Четверг;Пятница;Суббота" 
abmon="янв;фев;мар;апр;мая;июн;июл;авг;сен;окт;ноя;дек" 
mon="января;февраля;марта;апреля;мая;июня;июля;августа;сентября;октября;ноября;декабря" 
am_pm=";" 
d_t_fmt="%a %d %b %Y %T" 
d_fmt="%d.%m.%Y" 
t_fmt="%T" 
t_fmt_ampm="" 
era= 
era_year="" 
era_d_fmt="" 
alt_digits= 
era_d_t_fmt="" 
era_t_fmt="" 
time-era-num-entries=0 
time-era-entries="" 
week-ndays=7 
week-1stday=19971130 
week-1stweek=1 
first_weekday=2 
first_workday=2 
cal_direction=1 
timezone="" 
date_fmt="%a %b %e %H:%M:%S %Z %Y" 
time-codeset="UTF-8" 
alt_mon="Январь;Февраль;Март;Апрель;Май;Июнь;Июль;Август;Сентябрь;Октябрь;Ноябрь;Декабрь" 
ab_alt_mon="янв;фев;мар;апр;май;июн;июл;авг;сен;окт;ноя;дек"

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

$ locale -a 

C 
C.UTF-8 
en_US.utf8 
POSIX 
ru_RU.utf8 
ru_UA.utf8

Если вы хотите изменить или установить локальную систему, используйте программу update-locale. Переменная LANG позволяет вам установить локаль для всей системы.

Следующая команда устанавливает LANG в en_IN.UTF-8 и удаляет определения для LANGUAGE:

$ sudo update-locale LANG=ru_RU.UTF-8 LANGUAGE

или

$ sudo localectl set-locale LANG=ru_RU.UTF-8

Чтобы настроить определенный параметр локали, отредактируйте соответствующую переменную. Например:

$ sudo update-locale LC_TIME=ru_RU.UTF-8

или

$ sudo localectl set-locale LC_TIME=ru_RU.UTF-8

Глобальные настройки локали можно найти в следующих файлах:

Для настройки локали системы эти файлы также можно редактировать вручную, используя ваши любимых редакторы командной строки, такие как Vim или Nano.

Чтобы установить глобальную локаль для одного пользователя, вы можете просто открыть файл ~/.bash_profile и добавить следующие строки:

LANG="ru_RU.utf8"
export LANG

Для получения дополнительной информации, «курим» man’ы locale, update-locale и localectl.

$ man locale 
$ man update-locale 
$ man localectl

На этом все! В этой короткой статье мы узнали, как просматривать и устанавливать локаль системы в Linux.

Источник

Параметры локали (locale) определяет язык операционной системы и региональные настройки (форма даты и времени, денежные символы, доступные наборы символов и т.д.), которые используется в терминале и в графическом интерфейсе. В этой статье мы рассмотрим, как получить или изменить текущие настройки локали в Linux на примере Ubuntu и Debian

Вывести текущие настройки локали в Ubuntu и Debian можно с помощью команды:

$ locale

команда locale в linux

LANG=en_US.UTF-8
LANGUAGE=
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC=en_US.UTF-8
LC_TIME=en_US.UTF-8
LC_COLLATE="en_US.UTF-8"
LC_MONETARY=en_US.UTF-8
LC_MESSAGES="en_US.UTF-8"
LC_PAPER=en_US.UTF-8

     
     
LC_NAME=en_US.UTF-8
LC_ADDRESS=en_US.UTF-8
LC_TELEPHONE=en_US.UTF-8
LC_MEASUREMENT=en_US.UTF-8
LC_IDENTIFICATION=en_US.UTF-8
LC_ALL=

Вывести список доступных локалей на хосте:

$ locale –a

список доступных локалей на хосте linux

Чтобы вывести подробную информацию об установленных в системе локалях:

$ locale -a -v

Системная локаль C.UTF-8 в этом списке присутствует всегда. Попробуем добавить русскую локаль ru_RU.UTF-8.

Список локалей, доступных для установки перечислен в файле:

$ cat /etc/locale.gen

Чтобы установить нужную локаль, выполните команду:

$ sudo locale-gen ru_RU.UTF-8

Также вы можете установить нужные локали, просто раскомментировав строки в файле /etc/locale.gen:

/etc/locale.gen

Чтобы задать локаль по-умолчанию, выполните команду:

$ sudo update-locale LANG=ru_RU.UTF-8

или:

$ sudo localectl set-locale LANG=ru_RU.UTF-8

Эта команда запишет следующую строку в файл /etc/default/locale:

LANG=ru_RU.UTF-8

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

Можно задать отдельную локаль для различных региональных настроек Linux, например:

$ sudo update-locale LC_NUMERIC=en_US.UTF-8 LC_TIME=en_US.UTF-8 LC_MONETARY=en_US.UTF-8

Если вы зададите локаль, которая не сгенерировала, команда locale выведет ошибки:

$ locale

locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
LANG=fr_FR.utf8

В некоторых случаях нужно сначала установить необходимую локаль:

$ sudo apt-get install language-pack-fr

Если локаль в Linux не задана, и команда locale -a возвращает всего три записи:

C
C.UTF-8
POSIX
  1. Нужно сгенерировать новую локаль$ sudo locale-gen ru_RU.UTF-8
  2. Применить новую локаль: $ sudo update-locale LANG=ru_RU.UTF-8
  3. Перезагрузите хост или откройте новое окно терминала.

Для более простого управления локалями в Debian и Ubuntu вы можете использовать утилиту dpkg-reconfigure.

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

$ sudo dpkg-reconfigure locales

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

dpkg-reconfigure locales управление языками в консоли linux

Затем задайте локаль по умолчанию (default locale for the system environment).

добавить язык в linux

Чтобы изменить кодировку в консоли (терминале), выполните команду:

$ sudo dpkg-reconfigure console-setup

Выберите UTF-8 кодировку для консоли, затем выберите поддержку какого набора символов нужно добавить

добавить поддержку набора символов в linux

Эти настройки хранятся в:

$ cat /etc/default/console-setup

Затем настройте клавиатуру:

$ sudo dpkg-reconfigure keyboard-configuration

По умолчанию рекомендуется использовать модель клавиатуры Generic 105-key PC. Затем добавьте раскладку клавиш для нужной страны.

Настройки клавиатуры указываются в файле:

$ cat /etc/default/keyboard

Осталось настроить часовой пояс:

$ sudo dpkg-reconfigure tzdata

Вы можете удалить локали, которые не используете. Список установленных локалей содержится в /usr/lib/locale/locale-archive.

Выведите список локалей в архиве:

$ localedef --list-archive

localedef ru_ru.utf-8 Настройка русской локализации utf-8 в linux

Удаляем ненужную локаль:

$ sudo localedef --delete-from-archive en_IN.utf8

Состояние перевода: На этой странице представлен перевод статьи 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
  • Интерактивная проверка сортировки от ICU
  • Инициатива Free Standards Group создания открытого стандарта интернационализации
  • О локалях в The Single UNIX Specification от The Open Group
  • Переменные окружения для настройки локали на Ubuntu Help.

Понравилась статья? Поделить с друзьями:
  • Как изменить like id во второй раз
  • Как изменить lf на crlf vscode
  • Как изменить less
  • Как изменить launcher android
  • Как изменить latency оперативной памяти