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

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

Модератор: Bizdelnick

Аватара пользователя
жучара
Сообщения: 1159
ОС: 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 для него больше не существует.
Спасибо сказали:
Аватара пользователя
жучара
Сообщения: 1159
ОС: 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 определило, что нужно выводить дату на английском?
Она не смогла установить прописанную в переменных локаль, и продолжила работу, как если бы концепция локалей не существовала, используя сообщения и правила, прописанные в коде, а не в локали.
Спасибо сказали:
Аватара пользователя
жучара
Сообщения: 1159
ОС: Debian 12

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

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

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

Shell

$ cat /etc/default/locale
# File generated by update-locale
LANG=ru_RU.UTF-8
$
может вести себя как локаль по умолчанию в двух случаях- если передана белиберда ("cafebabe", неустановленная локаль), либо если передана пустая локаль, как то так: LANG="" date. В обоих случаях локаль из файла /etc/default/locale куда-то девается и на арену выходи настоящая локаль по умолчанию- английская. Только она нигде не прописана, что она локаль по умолчанию, ну пусть так и будет.

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

Shell

man update-locale
...
NAME
update-locale - Modify global locale settings
глобальные. Они определяют всё, пока их самих не переопределят или не затрут
Я просто читаю маны.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21488
Статус: nulla salus bello
ОС: Debian GNU/Linux

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

Сообщение Bizdelnick »

жучара писал(а):
07.05.2026 13:35
на арену выходи настоящая локаль по умолчанию- английская. Только она нигде не прописана, что она локаль по умолчанию, ну пусть так и будет.
Это не локаль. Это то, что прописано в коде. Там может быть хоть на эсперанто текст (реально видел такое) и любой шаблон вывода дат и прочего. Но по молчаливому соглашению всё же обычно английский.
жучара писал(а):
07.05.2026 13:35
Они определяют всё, пока их самих не переопределят или не затрут
Это и называется «по умолчанию».
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
жучара
Сообщения: 1159
ОС: Debian 12

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

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

Bizdelnick писал:
07.05.2026 14:05
жучара писал(а):
07.05.2026 13:35
на арену выходи настоящая локаль по умолчанию- английская. Только она нигде не прописана, что она локаль по умолчанию, ну пусть так и будет.
Это не локаль. Это то, что прописано в коде. Там может быть хоть на эсперанто текст (реально видел такое) и любой шаблон вывода дат и прочего. Но по молчаливому соглашению всё же обычно английский.
жучара писал(а):
07.05.2026 13:35
Они определяют всё, пока их самих не переопределят или не затрут
Это и называется «по умолчанию».
речь о терминах, конечно но термины-то важные. Мне всегда казалось, что умолчальность это то,чего отменить нельзя. Например:
$ gcc foo.c $
исполняемый файл по умолчанию имеет имя a.out. Можно переиграть, но отменить. А если можно было бы отменить, то имя выходного файла было бы непредсказуемым. Хорошие люди такого не допускают.
...Ну вот, а локали отменяются. И получается там английский, там эсперанто, там ещё что-то.
В общем, правильная умолчальность это неотменяемая умолчальность.
Я просто читаю маны.
Спасибо сказали: