Первый день недели - воскресенье
Первый день недели - воскресенье

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

Если вы не сильно интересовались бытом иностранцев, то может выглядеть дико ????
Я столкнувшись с этим первый раз - подумал: "Моя неделя начинается в понедельник, я хочу видеть у себя календарь нормального человека".

На какое-то время с этим смирился, пока один раз не пропустил важное событие, забыв об этой особенности :-)

И сегодня пришел день, когда я решил разобраться с этой проблемой.
Сразу оговорюсь, что в большинстве дистриутивов, если корректно указывать регион.

Если вкратце, то мультиязычность и мультирешиональность в линуксе построена на локалях (locales).

Посмотреть текущие настройки можно командой locale.
В моём случае проблема на локалиen_US

Вывод команды locale
Вывод команды  "locale"
Вывод команды "locale"


Варианта выходит два:

  1. Сменить локаль времени на en_GB, с подходящим порядком дней недели

  2. Внести изменения в локаль en_US

Вариант 1. Меняем локаль времени LC_TIME

Вариант рабочий, но с нюансами.
Не забываем, что в этой секции файла хранятся названия дней недели, месяцев, их форматы и т.п.

en_GB и en_US
en_GB и en_US

В принципе отличия не критичные, даже более близкие к нашим реалиям ????

Порядок действий для изменения локали времени

Делаем следующие манипуляции, открывая файлы в любимом текстовом редакторе с привилегиями суперпользователя (sudo):

en_GB.UTF-8 UTF-8 в /etc/locale.gen
en_GB.UTF-8 UTF-8 в /etc/locale.gen
  • Открываем файл /etc/locale.gen
    Находим в нём строку en_GB.UTF-8 UTF-8 и раскомментируем её, чтобы сгенерировать нужную локаль.

Вывод команды "locale-gen"
Вывод команды "locale-gen"
  • Перегененрируем локали командой locale-gen
    Естественно с sudo, я же надеюсь не из под рута работаете)

locale.conf с обновленной локлью времени
locale.conf с обновленной локлью времени
  • И обновляем используемую локаль для времени в файле /etc/locale.conf, добавив строчку LC_TIME=en_GB.UTF-8 или заменив значение LC_TIME

Вывод команды "cal"
Вывод команды "cal"
  • Перелогиниваемся или перезагружаем машину и видим чудо! ????

Вариант 2. Модифицируем локаль en_US

Мне этот вариант понравился больше. Я не хочу ничего менять, кроме порядка дней недели, остальное всё меня всё устраивает.

Да и шага всего два, что меня дико радует ????

Порядок действий для модификации локали
Параметр локали, отвечающий за порядок дней недели
Параметр локали, отвечающий за порядок дней недели
  • Открываем в редакторе файл /usr/share/i18n/locales/en_US и находим конец секции LC_TIME по строке END LC_TIME

  • И перед ее концом ставим строчку first_weekday 2

    Вывод команды locale-gen
    Вывод команды locale-gen
  • Далее перегенерируем локали командой locale-gen (Да, с привелениями суперпользовтеля)

  • Перелогиниваемся или перезагружаем машину и видим чудо! ????

Вариант 3. (Бонус)

А то скажете еще, что забыл...
Если у вас дистрибутив - можно порыться в настройках системы или календаря, там тоже может быть)


Если интересна веб разработка или линукс - следи за мной в моем телеграм канале.
Буду уведомлять о новых постах на Хабре и писать короткие прямо там :-)

Комментарии (17)


  1. garwall
    21.11.2022 10:51
    +9

    а не проще в .bashrc завести `export LANG=en_GB.UTF8`? Это заодно починит и отображение mm/dd/yyyy


  1. 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 27

    ncal -S соответственно выдает с воскресенья.


  1. LevOrdabesov
    21.11.2022 12:14
    -12

    Собственно, оно и в Windows (XP/7 по крайней мере точно) тоже первое воскресенье, вне зависимости от локали.


    1. LevOrdabesov
      21.11.2022 16:56

      Штош, спутал с поведением по умолчанию функции Weekday в VBS

      скриншот

      Но надо отметить, что, несмотря на то, что это "родной" инструмент Windows, текущую локаль оно не спрашивает, и первый день задаётся доп. параметром при вызове функции.


  1. martin74ua
    21.11.2022 12:27
    +22

    Ээээ.... Вам нужно выводить дни недели так, как принято в России, и вы правите английскую локаль. А где логика?


    1. wepp
      21.11.2022 13:30

      Будни недавнего эмигранта?


  1. Tujh
    21.11.2022 12:48
    +10

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

    Как минимум первое же обновление пакета связанного с локализацией (glibc, например) перепишет все внесённые изменения.


  1. TimsTims
    21.11.2022 14:08
    +3

    Если вы не сильно интересовались бытом иностранцев, то может выглядеть дико

    Оффтоп конечно, но дни недели проходят в первом классе (ну ок, для английского - в начальной школе).

    может выглядеть дико

    Скорее выглядит диким человек, тем более ИТ-шник линуксоид, с настолько маленьким кругозором...


    1. gromazeka
      21.11.2022 16:12
      -13

      Правильно человек написал, а вы все Жополизы западные, вам и флаг уже в радугу разрисовали, ходить с ним на парады с писями резиновыми...

      В Альтлинуксе например вся неделя в привычном для русского человека виде )


      1. TimsTims
        21.11.2022 16:38
        +3

        Мне флаг никто не разрисовывал. Причем здесь жополизство? Речь об образовании автора, который в школе (чекнул его профиль - РФ, значит скорее всего получал образование в РФ) не посещал уроки иностранного языка, который входит в обязательную школьную программу. Т.е. грубо говоря, автор не ходил в школу.

        И от своего невежества мало того, что не смог внятно объяснить и понять почему это день недели "съехал", так ещё и лезет в корневые файлы, ковырять локаль в то время как правильным методом было применить локаль ru_RU, тогда всё стало бы про-православно. Но увы, статьи бы тогда и не было)


        1. Tujh
          21.11.2022 18:54

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

          Только вот это учат даже не на ин.яз-е, а не географии, так как есть страны, в которых неделя начинается с субботы или с пятницы.


          1. TimsTims
            21.11.2022 20:15

            Мы ведь говорим о том, где ты впервые с этим сталкиваешься? У нас это было на уроке английского языка в начальной школе. География была уже с 6 класса. А так, ещё на информатике с этим сталкивались офк.


            1. Tujh
              21.11.2022 22:39
              +1

              Мы ведь говорим о том, где ты впервые с этим сталкиваешься? 

              Видимо речь сейчас зайдёт о том кому сколько лет и как менялась школьная программа :)

              Я проходил подобные темы именно на географии, и иностранный у меня (французский) начинался тоже где-то в 6 или 7 классе.


      1. net_racoon
        22.11.2022 09:23
        +2

        Эмм.. Это ведь сарказм? Ну скажите, что это сарказм...


    1. snaiper04ek
      22.11.2022 15:30
      +1

      Лучше сказать, на первых уроках английского, потому что у нас английский был с пятого класса. И да, про дни недели там рассказывали.


  1. oleg_rico
    22.11.2022 09:34

    Не вдаваясь детали, хочу сказать, что у меня в календаре всегда неделя начинается с воскресенья. Заодно снимаем вечную российскую проблему - понедельник день тяжёлый:) Всё-таки уже второй день недели, а не первый.


    1. geher
      22.11.2022 10:42

      Понедельник - день тяжелый не потому, что он первый в неделе, а потому, что он первый после воскресенья (выходного).

      А утвержденный порядок дней в неделе - это исключительно религиозный реликт ("чти день седьмой - субботу" против "воскресение господне венчает все" и других подобных же альтернатив).

      Сам предпочитаю, когда неделя заканчивается двумя выходными, а не начинается и заканчивается одним выходным. Но это уже совсем другая "религия".