Где определена локаль по умолчанию?

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

Модератор: Bizdelnick

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

Где определена локаль по умолчанию?

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

Друзья! Продолжаю ковыряться с локалями. Ну то есть я так понимаю, у всяких программ- у тех во всяко случае, каким это нужно, передаются значения локалей, явно или неявно. А если не передаются, тогда используется локаль по умолчанию (это всё при допущении, что локаль по умолчанию предполагается. Я стал подозревать, что такого понятия тут воообще нет).

Вот, например, команда date. Вот команднём её и передадим ей локаль:

Shell

$ LC_TIME=ru_RU.utf8 date
Ср 06 мая 2026 10:46:07 +05
$
$ LC_TIME=en_US.utf8 date
Wed May 6 10:46:27 AM +05 2026
$
Всё предсказзуемо. Если чё- вот установленные локали.

Shell

$ locale -a
C
C.utf8
en_US.utf8
POSIX
ru_RU.utf8
$
А теперь передадим команде date какую-нибудь неустановленную локаль, что-нибудь такое:

Shell

$ cat /etc/locale.gen | grep "^#" | head -n 10 | tail -n 1
# aa_ET UTF-8
$
передаём:

Shell

$ LANG="aa_ET UTF-8" date
Wed May 6 11:10:17 +05 2026
$
Сработать же должна локаль по умолчанию, разве нет? А она у нас вот такая вот:

Shell

$ cat /etc/default/locale
# File generated by update-locale
LANG=ru_RU.UTF-8
$
Ну то есть по-русски дата должна была вывестись. Не вывелась.

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Посмотрим, что за файл такой /etc/default/locale

Shell

man update-locale

...

NAME
update-locale - Modify global locale settings

...

DESCRIPTION
This program can be called by maintainer scripts when Debian packages are installed or removed, it updates the /etc/default/locale file toreflectchanges in system configuration related to global locale settings. When variables have no value assigned, they are removed from the locale file. Some basic checks are performed to ensure that requested settings are valid.
...Вот файл у нас хоть и называется default, но прописываютсяч в него не настройки по умолчанию, а какие-то глобальные. Одно ли это и то же или нет, не знаю, во всяком случае:
When variables have no value assigned, they are removed from the locale file.
а у нас переменная хоть и назначена, но такой локали ("aa_ET UTF-8") нет. В общем, я ожидаю, что локаль будет задействована из файла /etc/default/locale, но она не задействована, а берётся английская откуда-то.

...Я даже проверил, действительно ли переменная LANG="aa_ET UTF-8" присутствует в окружении date при запуске- да, так и есть. Я скропал такой скрипт:

Shell

$ cat /usr/local/bin/date
#!/bin/bash
env
exit
$
И по команде LANG="aa_ET UTF-8" date вывелись значения многих переменных окружения, среди которых LANG=aa_ET UTF-8. Но date всё равно выводится на английском, надо же. В общем, ЧЯДНТ? Спасибо, кто откликнется. Debian 12. Ну или я какое-то особенный смысл вкладываю в "значение по умолчанию", я не знаю.
Я просто читаю маны.
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5463
ОС: Gentoo

Re: Где определена локаль по умолчанию?

Сообщение /dev/random »

жучара писал(а):
06.05.2026 09:54
передаём:

Shell

$ LANG="aa_ET UTF-8" date
Wed May 6 11:10:17 +05 2026
$
Сработать же должна локаль по умолчанию, разве нет? А она у нас вот такая вот:

Shell

$ cat /etc/default/locale
# File generated by update-locale
LANG=ru_RU.UTF-8
$
Ну то есть по-русски дата должна была вывестись. Не вывелась.
"Локаль по умолчанию" - это просто локаль, которая прописывается в переменные окружения при старте сессии. Больше ни для чего она не используется. Вы прописали новое значение переменной LANG для процесса date? Значит, старого значения LANG для него больше не существует.
Спасибо сказали:
Аватара пользователя
жучара
Сообщения: 1157
ОС: Debian 12

Re: Где определена локаль по умолчанию?

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

/dev/random писал:
06.05.2026 11:32
жучара писал(а):
06.05.2026 09:54
передаём:

Shell

$ LANG="aa_ET UTF-8" date
Wed May 6 11:10:17 +05 2026
$
Сработать же должна локаль по умолчанию, разве нет? А она у нас вот такая вот:

Shell

$ cat /etc/default/locale
# File generated by update-locale
LANG=ru_RU.UTF-8
$
Ну то есть по-русски дата должна была вывестись. Не вывелась.
"Локаль по умолчанию" - это просто локаль, которая прописывается в переменные окружения при старте сессии. Больше ни для чего она не используется. Вы прописали новое значение переменной LANG для процесса date? Значит, старого значения LANG для него больше не существует.
хорошо. А как тогда date определило, что нужно выводить дату на английском?
Я просто читаю маны.
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5463
ОС: Gentoo

Re: Где определена локаль по умолчанию?

Сообщение /dev/random »

жучара писал(а):
06.05.2026 13:09
хорошо. А как тогда date определило, что нужно выводить дату на английском?
Она не смогла установить прописанную в переменных локаль, и продолжила работу, как если бы концепция локалей не существовала, используя сообщения и правила, прописанные в коде, а не в локали.
Спасибо сказали: