В линуксе можно встретить такое явление, что первый день недели по умолчанию - воскресенье.
Если вы не сильно интересовались бытом иностранцев, то может выглядеть дико ????
Я столкнувшись с этим первый раз - подумал: "Моя неделя начинается в понедельник, я хочу видеть у себя календарь нормального человека".
На какое-то время с этим смирился, пока один раз не пропустил важное событие, забыв об этой особенности :-)
И сегодня пришел день, когда я решил разобраться с этой проблемой.
Сразу оговорюсь, что в большинстве дистриутивов, если корректно указывать регион.
Если вкратце, то мультиязычность и мультирешиональность в линуксе построена на локалях (locales).
Посмотреть текущие настройки можно командой locale
.
В моём случае проблема на локалиen_US
Вывод команды locale
Варианта выходит два:
Сменить локаль времени на
en_GB
, с подходящим порядком дней неделиВнести изменения в локаль
en_US
Вариант 1. Меняем локаль времени LC_TIME
Вариант рабочий, но с нюансами.
Не забываем, что в этой секции файла хранятся названия дней недели, месяцев, их форматы и т.п.
В принципе отличия не критичные, даже более близкие к нашим реалиям ????
Порядок действий для изменения локали времени
Делаем следующие манипуляции, открывая файлы в любимом текстовом редакторе с привилегиями суперпользователя (sudo):
Открываем файл
/etc/locale.gen
Находим в нём строкуen_GB.UTF-8 UTF-8
и раскомментируем её, чтобы сгенерировать нужную локаль.
Перегененрируем локали командой
locale-gen
Естественно сsudo
, я же надеюсь не из под рута работаете)
И обновляем используемую локаль для времени в файле
/etc/locale.conf
, добавив строчкуLC_TIME=en_GB.UTF-8
или заменив значениеLC_TIME
Перелогиниваемся или перезагружаем машину и видим чудо! ????
Вариант 2. Модифицируем локаль en_US
Мне этот вариант понравился больше. Я не хочу ничего менять, кроме порядка дней недели, остальное всё меня всё устраивает.
Да и шага всего два, что меня дико радует ????
Порядок действий для модификации локали
Открываем в редакторе файл
/usr/share/i18n/locales/en_US
и находим конец секцииLC_TIME
по строкеEND LC_TIME
-
И перед ее концом ставим строчку
first_weekday 2
-
Далее перегенерируем локали командой
locale-gen
(Да, с привелениями суперпользовтеля) Перелогиниваемся или перезагружаем машину и видим чудо! ????
Вариант 3. (Бонус)
А то скажете еще, что забыл...
Если у вас дистрибутив - можно порыться в настройках системы или календаря, там тоже может быть)
Если интересна веб разработка или линукс - следи за мной в моем телеграм канале.
Буду уведомлять о новых постах на Хабре и писать короткие прямо там :-)
Комментарии (17)
alexxisr
21.11.2022 11:13+4Еще вариант:
$grep ncal ~/.bashrc
alias cal='ncal -M'$ cal
November 2022
Mo 7 14 21 28
Tu 1 8 15 22 29
We 2 9 16 23 30
Th 3 10 17 24
Fr 4 11 18 25
Sa 5 12 19 26
Su 6 13 20 27ncal -S соответственно выдает с воскресенья.
LevOrdabesov
21.11.2022 12:14-12Собственно, оно и в Windows (XP/7 по крайней мере точно) тоже первое воскресенье, вне зависимости от локали.
LevOrdabesov
21.11.2022 16:56Штош, спутал с поведением по умолчанию функции Weekday в VBS
скриншот
Но надо отметить, что, несмотря на то, что это "родной" инструмент Windows, текущую локаль оно не спрашивает, и первый день задаётся доп. параметром при вызове функции.
martin74ua
21.11.2022 12:27+22Ээээ.... Вам нужно выводить дни недели так, как принято в России, и вы правите английскую локаль. А где логика?
Tujh
21.11.2022 12:48+10Крайне вредный совет, надо сказать, модифицировать системные файлы под контролем пакетного менеджера вручную.
Как минимум первое же обновление пакета связанного с локализацией (glibc, например) перепишет все внесённые изменения.
TimsTims
21.11.2022 14:08+3Если вы не сильно интересовались бытом иностранцев, то может выглядеть дико
Оффтоп конечно, но дни недели проходят в первом классе (ну ок, для английского - в начальной школе).
может выглядеть дико
Скорее выглядит диким человек, тем более ИТ-шник линуксоид, с настолько маленьким кругозором...
gromazeka
21.11.2022 16:12-13Правильно человек написал, а вы все Жополизы западные, вам и флаг уже в радугу разрисовали, ходить с ним на парады с писями резиновыми...
В Альтлинуксе например вся неделя в привычном для русского человека виде )
TimsTims
21.11.2022 16:38+3Мне флаг никто не разрисовывал. Причем здесь жополизство? Речь об образовании автора, который в школе (чекнул его профиль - РФ, значит скорее всего получал образование в РФ) не посещал уроки иностранного языка, который входит в обязательную школьную программу. Т.е. грубо говоря, автор не ходил в школу.
И от своего невежества мало того, что не смог внятно объяснить и понять почему это день недели "съехал", так ещё и лезет в корневые файлы, ковырять локаль в то время как правильным методом было применить локаль ru_RU, тогда всё стало бы про-православно. Но увы, статьи бы тогда и не было)
Tujh
21.11.2022 18:54не посещал уроки иностранного языка, который входит в обязательную школьную программу
Только вот это учат даже не на ин.яз-е, а не географии, так как есть страны, в которых неделя начинается с субботы или с пятницы.
TimsTims
21.11.2022 20:15Мы ведь говорим о том, где ты впервые с этим сталкиваешься? У нас это было на уроке английского языка в начальной школе. География была уже с 6 класса. А так, ещё на информатике с этим сталкивались офк.
Tujh
21.11.2022 22:39+1Мы ведь говорим о том, где ты впервые с этим сталкиваешься?
Видимо речь сейчас зайдёт о том кому сколько лет и как менялась школьная программа :)
Я проходил подобные темы именно на географии, и иностранный у меня (французский) начинался тоже где-то в 6 или 7 классе.
snaiper04ek
22.11.2022 15:30+1Лучше сказать, на первых уроках английского, потому что у нас английский был с пятого класса. И да, про дни недели там рассказывали.
oleg_rico
22.11.2022 09:34Не вдаваясь детали, хочу сказать, что у меня в календаре всегда неделя начинается с воскресенья. Заодно снимаем вечную российскую проблему - понедельник день тяжёлый:) Всё-таки уже второй день недели, а не первый.
geher
22.11.2022 10:42Понедельник - день тяжелый не потому, что он первый в неделе, а потому, что он первый после воскресенья (выходного).
А утвержденный порядок дней в неделе - это исключительно религиозный реликт ("чти день седьмой - субботу" против "воскресение господне венчает все" и других подобных же альтернатив).
Сам предпочитаю, когда неделя заканчивается двумя выходными, а не начинается и заканчивается одним выходным. Но это уже совсем другая "религия".
garwall
а не проще в
.bashrc
завести `export LANG=en_GB.UTF8`? Это заодно починит и отображение mm/dd/yyyy