metaclass: (Default)
[personal profile] metaclass
Белорусско-украинские линуксоиды познакомили меня с кромешным адом - номера дней недели в локалях линукса это пиздец живородящий.
https://github.com/GNOME/gnome-shell/blob/master/js/ui/calendar.js#L599
https://git.gnome.org/browse/gnome-shell/tree/src/shell-util.c#n181
https://bugzilla.gnome.org/show_bug.cgi?id=747346#c5
https://sourceware.org/glibc/wiki/Locales

Дни недели существуют в следующих вариантах:
ISO8601 - 1..7 начиная с понедельника
жабаскриптовый Date.getDay - 0..6 начиная с воскресенья.
Человекочитабельный номер 1..7, зависит от локали.

В локалях линукса есть такие параметры:
week DAYSINWEEK;WEEKSTARTDATE;MINWEEKLEN
first_weekday N - number of day in the week to be shown in the first column of a calendar. Defaults to 1.

Первый параметр состоит из 3 чисед.
DAYSINWEEK is usually 7;
MINWEEKLEN is the minimal length of the first week in year (usually 4).

WEEKSTARTDATE is most confusing - it should be some date that corresponds to the beginning of a week. It is typically either 19971130 (Sunday) or 19971201 (Monday), the former being used almost by all glibc locales (see below). Это параметр NL_TIME_WEEK_1STDAY/week-1stday.

Единственная локаль, в которой я нашел 19971201 (неделя начинается с понедельника) - это ru_UA. Все остальные либо по умолчанию, либо явно указанный 19971130 (неделя начинается с воскресенья)
Причем эти два числа - они захардкожены в gnome-shell/tree/src/shell-util.c для расчета нумерации дней недели.

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

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

Теперь еще вопрос: если в программе-органайзере записано событие "каждое воскресенье" - какой из типов данных там будет использован и не сломается ли оно все в прах, если заменить в локали начало дней недели?

Date: 2015-04-05 09:08 pm (UTC)
develop7: (dero)
From: [personal profile] develop7
итого https://bugzilla.gnome.org/show_bug.cgi?id=747346#c9 и я закрыл багу c RESOLVED NOTGNOME
теперь босс — протащить в glibc патч из четырёх строчек соблюдая https://sourceware.org/glibc/wiki/Contribution%20checklist

Date: 2015-04-06 04:40 am (UTC)
From: [identity profile] metaclass.livejournal.com
Что будешь менять, начало недели или отображаемый в первой колонке день?

Date: 2015-04-06 04:47 am (UTC)
develop7: (dero)
From: [personal profile] develop7
короче там как. в ru_RU, en_GB и uk_UA есть first_weekday 2 и first_workday 2, в be_BY* нет. буду добавлять.

Date: 2015-04-06 05:20 am (UTC)
From: [identity profile] metaclass.livejournal.com
А, значит отображаемый день. Ок.

Date: 2015-04-09 02:55 pm (UTC)
develop7: (dero)
From: [personal profile] develop7
https://sourceware.org/bugzilla/show_bug.cgi?id=18205 заслал и… и… и ничего

Profile

metaclass: (Default)
metaclass

April 2017

S M T W T F S
      1
2345678
9101112 131415
16171819202122
23242526272829
30      

Most Popular Tags

Page Summary

Style Credit

Expand Cut Tags

No cut tags
Page generated Jun. 7th, 2025 09:02 pm
Powered by Dreamwidth Studios