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:21 am (UTC)
From: [identity profile] sbj-ss.livejournal.com
Стоп. Sunday - воскресенье. Значит, для 19971130 неделя начинается с воскресенья.

Date: 2015-04-05 09:24 am (UTC)
From: [identity profile] metaclass.livejournal.com
Да, перепутал.
В итоге, насколько я понял, товарищу надо исправлять в его локали параметр first_weekday на 2, как для всех советских локалей, а начало недели не трогать.

Date: 2015-04-05 10:03 am (UTC)
From: [identity profile] eternal-leave.livejournal.com
А почему все ссылки, кроме одной, про гном?

Date: 2015-04-05 10:06 am (UTC)
From: [identity profile] metaclass.livejournal.com
Первичная проблема была в том, что гномо-календарь-апплет показывает первым днем недели воскресенье вместо понедельника.

Date: 2015-04-05 12:40 pm (UTC)
From: [identity profile] besm6.livejournal.com
В гномовской программе может сломаться что угодно и от чего угодно. А в большинстве работающих в линуксе программ (они, как правило, не специфично линуксовые) - нет, не сломается.

Date: 2015-04-06 06:02 am (UTC)
develop7: (dero)
From: [personal profile] develop7
Сищечька же. Привилегия программиста разыменовать нулевой указатель освящена веками. «деды сегфолтились!», вот это всё
Edited Date: 2015-04-06 06:02 am (UTC)

Date: 2015-04-05 01:01 pm (UTC)
From: [identity profile] techquisitor.livejournal.com
Так это ж Gnome. Тот ещё хтоничный пиздец. Я сам не, но бывшие гойлеги с тамошним апстримом общались. Более невменямой компании сложно придумать. KDEшники не в пример дружелюбнее и вменяемее. Хотя тоже не без тараканов там.
Edited Date: 2015-04-05 01:02 pm (UTC)

Date: 2015-04-06 05:57 am (UTC)
develop7: (dero)
From: [personal profile] develop7
KDEшники не в пример дружелюбнее и вменяемее.
хз, по третьей ссылке вроде как довольно конструктивно пообщались. хотя лично у меня есть и примеры обратного.
Edited Date: 2015-04-06 05:58 am (UTC)

Date: 2015-04-06 06:58 am (UTC)
From: [identity profile] techquisitor.livejournal.com
Я за тусовку в целом говорю. Нисколько не отрицая, что там есть вменямые люди, говорю, что вся эта шайка — те ещё ебанавты. Вплоть до того, когда локализатор направила им вежливое письмо «У вас тут перевод кривой, возьмите патч, там всё корректно переведено. И вам будет хорошо и нам приятно.» получила письмо в духе «Вас здесь не стояло и вы, вообще, кто такая?». По остальным патчам, вроде исправления багов GTK+ — аналогично. Вплоть до того, что вообще забивают, ссылаясь на якобы проблемы с видеодрайверами.

Date: 2015-04-06 07:27 am (UTC)
develop7: (dero)
From: [personal profile] develop7
я однажды пытался найти патчи из росы в гном. безуспешно.

Date: 2015-04-05 02:22 pm (UTC)
From: [identity profile] nivanych.livejournal.com
> Ад локалей
Локалехост!

Date: 2015-04-05 03:30 pm (UTC)
From: [identity profile] juan-gandhi.livejournal.com
Любопытно.
А в венде что?

Date: 2015-04-05 07:19 pm (UTC)
From: [identity profile] slonopotamus.livejournal.com
А в венде до недавнего времени чтобы посмотреть штатный календарь надо было админские права иметь, бугога.

Date: 2015-04-06 05:49 am (UTC)
From: [personal profile] leotsarev
До недавнего времени: это типа 8 лет?
:-)

На самом деле раньше в винде не было календаря просто. Разрабы предполагали использование этой штуки только для установки даты, а потом уже выяснили, что все используют её как календарь и дали права всем + переработали с прицелом на этот юзкейс.

Date: 2015-04-06 06:30 am (UTC)
From: [identity profile] slonopotamus.livejournal.com
Черт, как время-то летит...

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

Style Credit

Expand Cut Tags

No cut tags
Page generated Jun. 6th, 2025 06:44 am
Powered by Dreamwidth Studios