Как поменять локаль для одного значения, например LC_TIME?

Для новичков как вообще в Linux, так и в конкретной теме, к которой относится вопрос.

Модератор: Bizdelnick

Аватара пользователя
жучара
Сообщения: 1155
ОС: Debian 12

Как поменять локаль для одного значения, например LC_TIME?

Сообщение жучара »

Друзья! Такие вот у меня локали везде:

Shell

$ 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=
$
А вот список всех сгенерированных (нужны только русская и английская):

Shell

user@debian:~$ locale -a
C
C.utf8
en_US.utf8
POSIX
ru_RU.utf8
$
Поехали выставлять:

Shell

$ sudo localectl set-locale LC_TIME="en_US.utf8"
user@debian:~$ locale | grep LC_TIME
LC_TIME="ru_RU.UTF-8"
$


Может, так?

Shell

$ sudo locale-gen
Generating locales (this might take a while)...
en_US.UTF-8... done
ru_RU.UTF-8... done
Generation complete.
$
$
$
$ sudo localectl set-locale LC_TIME="en_US.UTF-8"
$
$ locale | grep LC_TIME
LC_TIME="ru_RU.UTF-8"
$
Так тоже не получается:

Shell

$ LC_TIME=en_US.UTF-8
$ locale | grep LC_TIME
LC_TIME="ru_RU.UTF-8"
$
$ LC_TIME=en_US.utf8
$ locale | grep LC_TIME
LC_TIME="ru_RU.UTF-8"
$
Единственный вариант- все скопом переделать. Причём вот так вот:

Shell

$ 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=
$
$
$ LANG=en_US.UTF-8
$
$ locale
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=
$


Но мне одну только надо. ЧЯДНТ? Спасибо, кто откликнется. Debian 12
Я просто читаю маны.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21482
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Как поменять локаль для одного значения, например LC_TIME?

Сообщение Bizdelnick »

Это просто переменная окружения. export LC_TIME="en_US.utf8"
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
math
Сообщения: 306
Статус: Ъ участник
ОС: LMDE

Re: Как поменять локаль для одного значения, например LC_TIME?

Сообщение math »

жучара писал(а):
01.05.2026 10:07
Поехали выставлять
После выставления надо как минимум перелогиниться, а как максимум перезагрузиться.
Спасибо сказали:
Аватара пользователя
жучара
Сообщения: 1155
ОС: Debian 12

Re: Как поменять локаль для одного значения, например LC_TIME?

Сообщение жучара »

Bizdelnick писал:
01.05.2026 13:40
Это просто переменная окружения. export LC_TIME="en_US.utf8"
работает-то оно, конечно, работает, вопросы глупые возникают сразу. Ну, например, почему LANG="en_US.utf8" работает без export?

Shell

$ 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=
$
$ LANG="en_US.utf8"
$
$ 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=
$
$ date
Sat May 2 08:58:25 AM +05 2026
$
Я просто читаю маны.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21482
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Как поменять локаль для одного значения, например LC_TIME?

Сообщение Bizdelnick »

Потому что она уже есть в окружении. Шелл меняет значение существующей переменной окружения, а не создаёт одноимённую внутреннюю. Переменной LC_TIME в окружении нет, поэтому для неё надо явно указывать export. После этого можно её изменить уже без export, это сработает. Но в скриптах так делать не советую, лучше явно писать export для задания переменной окружения каждый раз.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
жучара
Сообщения: 1155
ОС: Debian 12

Re: Как поменять локаль для одного значения, например LC_TIME?

Сообщение жучара »

Bizdelnick писал:
02.05.2026 14:07
Потому что она уже есть в окружении. Шелл меняет значение существующей переменной окружения, а не создаёт одноимённую внутреннюю. Переменной LC_TIME в окружении нет, поэтому для неё надо явно указывать export. После этого можно её изменить уже без export, это сработает. Но в скриптах так делать не советую, лучше явно писать export для задания переменной окружения каждый раз.
поразмышлял немножно, не совсем привычно, но понятно. Непонятно только, вот эта конструкция зачем нужна тогда?

Shell

$ sudo localectl set-locale LC_TIME="en_US.UTF-8"
user@debian:~$ echo $LC_TIME

$
Выглядит мощно, а по факту пшик. Простое присваивание и то больше эффекта даёт:

Shell

$ LC_TIME="en_US.UTF-8"
$ echo $LC_TIME
en_US.UTF-8
$
++++++++++++++++++++++++++++++++++++++++++++++++++++++++

И вот ещё- так, у нас export- те самые переменные, которые как в man bash написано:
export [-fn] [name[=word]] ...
export -p
The supplied names are marked for automatic export to the environment of subsequently executed commands.
Ну то есть печатаем export LC_TIME="en_US.utf8", переменная LC_TIME автоматически экспортируется в какие-то там под процессы, коим является locale. А иначе не экспортируется. Хотя...

Shell

$ date
Вс 03 мая 2026 11:21:13 +05
$
$ LC_TIME="en_US.UTF-8" date
Sun May 3 11:21:20 AM +05 2026
$
$ date
Вс 03 мая 2026 11:21:23 +05
$
Не понимаю я. Это временный экспорт, я бы назвал. Но разве бывает такой? Или bash умеет передавать значение переменной параметром в последующую команду?
Я просто читаю маны.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21482
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Как поменять локаль для одного значения, например LC_TIME?

Сообщение Bizdelnick »

жучара писал(а):
03.05.2026 09:11
Непонятно только, вот эта конструкция зачем нужна тогда?
Затем же, зачем ещё 100500 заклинаний systemd. Она меняет общесистемную локаль по умолчанию в /etc/locale.conf. Что также можно сделать руками или с помощью dpkg-reconfigure locales, например.
Добавлено (11:31):
жучара писал(а):
03.05.2026 09:11
Это временный экспорт, я бы назвал. Но разве бывает такой?
Нет, не бывает. Шелл просто добавляет эти переменные в окружение одного отдельно взятого дочернего процесса. Окружение самого шелла не меняется.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали: