[Widget] Améliorations du calendrier pour les utilisateurs français/européens

Bonjour,

Si vous utilisez le widget calendrier de Grist, vous avez peut-être rencontré les mêmes comportements gênants : semaine commençant le dimanche, heures en format américain, calendrier qui s’ouvre sur n’importe quelle date…

J’ai corrigé quatre problèmes et publié le résultat pour que tout le monde puisse en profiter.

Les corrections apportées

  1. Date d’ouverture — Le widget s’ouvrait sur la date du premier enregistrement sélectionné au lieu d’afficher aujourd’hui. Désormais il s’ouvre toujours sur la date du jour au chargement.
  2. Premier jour de la semaine — Les semaines commençaient toujours le dimanche. Le widget lit maintenant la locale Grist (culture) et utilise Intl.Locale.getWeekInfo() pour démarrer la semaine le bon jour selon la région (lundi pour fr-FR par exemple).
  3. Format 12h/24h — Les créneaux horaires étaient toujours affichés en 24h. Le format est maintenant détecté automatiquement depuis la locale : en-US affiche 2 PM, fr-FR affiche 14:00.
  4. Colonnes de type Date pure — Quand Start et End sont des colonnes Date (sans heure), la grille horaire occupait tout l’écran inutilement. Elle se masque désormais automatiquement et le panneau « journée entière » prend toute la place.

Utilisation immédiate

Il suffit de pointer l’URL de votre widget personnalisé vers : https://lmzr.github.io/grist-widget/calendar/index.html

Note : Pour que les libellés du calendrier soient traduits (noms des jours, mois, boutons…), ajoutez ?language=fr directement à l’URL du widget : https://lmzr.github.io/grist-widget/calendar/index.html?language=fr
Grist impose actuellement en comme valeur même si la langue de votre compte ou document est Français.

Discussion sur le forum officiel Le post original (en anglais) avec plus de détails techniques : [Widget] Calendar improvements for European/non-US locales - Developers - Grist Creators

N’hésitez pas si vous avez des questions ou des retours !

1 « J'aime »

Bonsoir,
merci pour ces correctifs.
Pour ce qui est du premier jour de la semaine, je n’arrive pas à les avoir le lundi.
J’ai fait un essai en précisant le paramètre culture dans l’adresse du widget, mais sans succès. Est-ce bien comme suit ?
https://lmzr.github.io/grist-widget/calendar/index.html?culture=fr-FR
Je précise que j’utilise Grist via https://grist.numerique.gouv.fr, potentiellement ces correctifs seront pris en compte ultérieurement.

1 « J'aime »

Bonjour,
En utilisant Grist Online, pour moi (paramètre de compte et paramètres du doc sur FR+Euro), le paramètre culture est bien passé par le core, donc je n’ai pas besoin de le redéfinir dans l’URL personnalisée, seulement le paramètre language, en fr ou fr-FR. Voici pour un calendrier officiel, sans paramètre surchargé donc :

src="https://gristlabs.github.io/grist-widget/calendar/index.html?access=full&readonly=false&culture=fr-FR&language=en-US&timeZone=Europe%2FParis&currency=EUR"

Dans votre instance, tu peux vérifier en testant le Calendrier standard de Grist, inspecte l’iframe, paramètre src, tu devrais voir les paramètres culture et language envoyé « nativement ». Dans l’utilisation du widget Calendar personnalisé, surcharge le paramètre nécessaire, pour moi seulement language.

Merci pour ce retour.
J’ai fait une vérification sur l’iframe donné par le widget Calendrier intégré à https://grist.numerique.gouv.fr.
J’obtiens :
src="https://gristgouv.github.io/gristlabs-widgets/calendar/index.html?access=full&readonly=false&culture=fr-FR&language=fr&timeZone=Europe%2FParis&currency=EUR"
Mais malheureusement sur l’affichage, la semaine commence le dimanche et les heures sont affichées à l’anglo-saxone (10 am, au lieu de 10 h).

En utilisant le widget tiers suivant, j’ai au moins les heures bien affichées :
https://lmzr.github.io/grist-widget/calendar/index.html?culture=fr-FR
Mais la semaine commence encore le dimanche…

C’est bizarre, c’est bien le paramètre culture qui contrôle le premier jour de la semaine.
De mon côté, je n’ai pas besoin de ce paramètre pour le 1er jour car la valeur fournie par mon navigateur est bien sur fr-FR. Mais si je mets le paramètre quand même (URL https://lmzr.github.io/grist-widget/calendar/index.html?culture=fr-FR), le 1er jour reste bien Lundi.

J’imagine que, l’URL utilisée sans aucun paramètre sur ma version du widget, cela n’améliore pas les choses ?

Petits tests :

  • Votre navigateur est bien configuré en Français avec des paramètres par défaut ? Exemple pour moi dans Vivaldi :


    (si je suis maso je peux forcer à Dimanche).
    Ou dans Chrome, coller navigator.language dans la console des Outils de développement, ça doit donner 'fr-FR' ou 'fr'.

  • Votre navigateur est-il à jour ? Exemple : la locale accessible dans Chrome < v99, Firefox < v126 ou Safari < v17 n’a pas l’info du premier jour de semaine.
    Test à faire dans la console : new Intl.Locale('fr-FR').getWeekInfo?.() ?? new Intl.Locale('fr-FR').weekInfo : si ça retourne undefined, plutôt que


    c’est ça qui cloche.

  • Si culture est absent (paramètre et navigateur), le widget utilise la valeur de language. Cela ne devrait pas arriver vu qu’il est dans votre URL, mais à tout hasard essayez de mettre les 2 ?

J’espère que quelque chose là-dedans puisse nous en dire un peu plus.

Bonjour,
merci pour ce retour détaillé.
J’utilise essentiellement Firefox ESR 140.8.0esr (64 bits) sous Linux.

  • Concernant le premier point, en effet il manquait le paramètres suivant :
    firefox-date-locale-parameters
    J’ai corrigé en cochant mais cela ne semble toujours pas régler le soucis (je n’ai pas redémarré Firefox), mais j’ai tenté sur une fenêtre en navigation privée.
  • Dans la console new Intl.Locale('fr-FR').getWeekInfo?.() ?? new Intl.Locale('fr-FR').weekInfo retourne undefined. Vous avez vu juste.
  • En essayant avec Chromium Version 146.0.7680.80 (Build officiel) built on Debian GNU/Linux 12 (bookworm) (64 bits) :
    • L’URL https://lmzr.github.io/grist-widget/calendar/index.html?culture=fr-FR utilisée comme widget affiche bien les lundi comme premier jour.
    • En revanche dans le widget intégré dans Grist (grist.numerique.gouv.fr), cela reste le dimanche.
    • Dans la console new Intl.Locale('fr-FR').getWeekInfo?.() ?? new Intl.Locale('fr-FR').weekInfo retourne :
{firstDay: 1, weekend: Array(2)}
firstDay: 1
weekend: (2) [6, 7]
[[Prototype]]: Object

Peut-être que ces éléments sont suffisants pour statuer que le problème vient :

  • soit de Firefox (ou de sa configuration)
  • soit de la version de Grist (utilisée pour grist.numerique.gouv.fr)

Avez-vous une idée pour régler le problème ?
Merci pour votre aide

Je reviens juste sur le projet, veuillez m’excuser de ma réponse tardive…

Bonjour Yoann,

Merci beaucoup pour ces tests, ils sont très parlants et permettent de séparer nettement deux problèmes distincts qui se ressemblaient.

① Firefox (ESR 140) — ce n’est ni votre config, ni votre version de Firefox

Firefox n’implémente tout simplement pas l’API Intl.Locale.prototype.getWeekInfo() (ni la propriété weekInfo) — d’où le undefined que vous obtenez dans la console. Ce n’est donc pas propre à l’ESR : tous les Firefox sont concernés. Quand cette API renvoyait undefined, le widget retombait sur « dimanche » par défaut, ce qui est faux pour la France (et pour la majeure partie du monde).

C’est corrigé. J’ai ajouté au widget une table région → premier jour de semaine (données CLDR) : quand getWeekInfo manque, le widget déduit la région de la locale (frFR) et en tire « lundi », même sans getWeekInfo. Le correctif est en ligne sur mon fork (URL ci-dessous), et je l’ai vérifié sous Firefox, le calendrier démarre bien au lundi. À noter : il n’est pas encore intégré au widget officiel de Grist, ça dépend de la fusion de ma pull request (en attente).

② Chromium intégré à grist.numerique.gouv.fr : le navigateur n’est pas en cause

Vous l’avez bien montré : sur Chromium, getWeekInfo() fonctionne, et avec l’URL que je vous ai partagée passant ?culture=fr-FR le calendrier démarre bien au lundi. Le fait que ça ne marche que hors de Grist pointe vers une seule question : est-ce que le paramètre culture=fr-FR arrive jusqu’au widget une fois intégré ?

Sur docs.getgrist.com, Grist ajoute automatiquement culture=fr-FR à l’URL de l’iframe (et aussi language=en-US, une autre histoire, voir plus bas). Pour trancher chez vous : ouvrez les outils de développement dans grist.numerique.gouv.fr, trouvez l’<iframe> du widget et regardez son attribut src : culture=fr-FR y figure-t-il ? Je vous laisse tester.

Contournement immédiat (valable quelle que soit l’instance)

En attendant, vous pouvez enregistrer le widget avec les paramètres forcés directement dans l’URL :

https://lmzr.github.io/grist-widget/calendar/index.html?culture=fr-FR&language=fr

Pour mémoire, la distinction entre les deux paramètres :

  • culture pilote les conventions régionales → premier jour de semaine et format d’heure (12 h / 24 h).
  • language pilote tout le texte de l’interface.

C’est pour ça que je recommande de mettre les deux (culture=fr-FR&language=fr) : sinon on peut avoir un calendrier qui démarre au lundi mais reste en anglais.

Le ① est réglé ; pour le ②, à vous de voir ce que donne le src de l’iframe chez vous. Merci encore pour votre aide au diagnostic !

1 « J'aime »

Bonjour Lionel, merci pour ce retour détaillé et les correctifs !
Voici les éléments demandés, avec d’autres :

  1. Avec Firefox, le widget interne à grist.numerique.gouv.fr est en effet bloquer sur la semaine commençant le dimanche. Je viens aussi de tester le Widget personnalisé avec l’adresse
    https://lmzr.github.io/grist-widget/calendar/index.html?culture=fr-FR&language=fr
    Cela fonctionne bien pour les aspects culture et locale !

  2. Je viens d’essayer sur Chromium et j’obtiens le même comportement avec les 2 widgets.

  3. Avec Firefox, sur grist.numerique.gouv.fr, pour avec le widget interne, l’adresse URL dans l’iframe est https://grist-plugins-dinum.dinum-prd-osc-cgw1-grist-wapp-01.k8s.opicloud.numerique.gouv.fr/v/unknown/widgets/bundled/grist-bundled/widgets/calendar/index.html?access=full&readonly=false&culture=fr-FR&language=fr&timeZone=Europe%2FParis&currency=EUR

  4. En revanche (je ne sais pas si c’est lié), avec le widget personnalisé (Firefox ou Chromium), je constate un décalage dans l’affichage avec les cases de la ligne « Toute la journée » voir la capture ci-dessous :


    C’est sans doute dû à la différence de longueur entre « All day » et « Toute la journée ».

J’espère que tous ces éléments apporteront de l’aide pour peaufiner le tout.

Bonne journée

Yoann

1 « J'aime »

Génial merci je suis enfin parvenu à basculer en français sur Firefox! (si la semaine pouvait aussi commencer le lundi ce serait top, contrairement à votre capture d’écran moi j’ai toujours le dimanche en premier…).

L’affichage avec la semaine commençant le dimanche ne fonctionne, pour l’instant, qu’en utilisant un widget personnalisé (et non le calendrier interne à grist.numerique.gouv.fr).
L’adresse URL à indiquer pour ce widget personnalisé est :
https://lmzr.github.io/grist-widget/calendar/index.html?culture=fr-FR&language=fr)
Cela fonctionne chez moi avec Firefox et Chromium.

Ok pardon; j’ai utilisé cette URL avec le résultat mitigé (en français mais J1 le dimanche): Calendar Widget
Je vais essayer cotre URL! ++

1 « J'aime »

Bonjour Yoann,

Merci pour ces retours très complets.

Premier jour de semaine sous Firefox : validé, merci. Vous confirmez que le widget personnalisé (?culture=fr-FR&language=fr) démarre bien au lundi, sous Firefox comme sous Chromium.

Widget interne de grist.numerique.gouv.fr : votre src répond à la question. L’iframe interne passe bien culture=fr-FR&language=fr :

…/calendar/index.html?access=full&readonly=false&culture=fr-FR&language=fr&timeZone=Europe%2FParis&currency=EUR

Rien n’est donc cassé côté paramètres : ils arrivent jusqu’au widget. S’il reste au dimanche sous Firefox, c’est que le widget officiel de Grist tourne encore une version antérieure au correctif. Celui-ci est proposé en pull request au dépôt de Grist ; une fois fusionné et redéployé, le widget interne démarrera au lundi sans rien avoir à passer. En attendant, le widget personnalisé fait le travail, comme vous l’avez vérifié.

Le décalage de la ligne « Toute la journée » est corrigé. Bien vu : le libellé traduit, plus long que « All day », élargissait sa colonne et décalait toute la ligne. C’est corrigé et déjà en ligne sur l’URL personnalisée (le libellé passe sur deux lignes et les cases se réalignent). Un rafraîchissement, cache vidé, devrait vous le montrer.

Merci encore pour les retours !

Lionel

Merci @Lionel pour votre réactivité ! Voici mes retours.

  • Widget interne de grist.numerique.gouv.fr : OK j’utilise le widget personnalisé en attendant la mise à jour de la version de grist par la DINUM.
  • Décalage de la ligne « Toute la journée » : je confirme, c’est bien corrigé.

Tant que vous suivez ce fil, quel est l’endroit idoine pour formuler des requêtes (nouvelles fonctionnalités souhaitées) dans ce widget, afin qu’elles finissent à terme par être intégrées au widget officiel ?

Bonne journée