[Résolu] - Calendar : Problème avec le format de date dans les views "week" et "day"

Information importante

En raison d'un grand nombre d'inscriptions de spammers sur notre site, polluant sans relache notre forum, nous suspendons la création de compte via le formulaire de "sign up".

Il est néanmoins toujours possible de devenir adhérent•e en faisant la demande sur cette page, rubrique "Inscription" : https://www.drupal.fr/contact


De plus, le forum est désormais "interdit en écriture". Il n'est plus autorisé d'y écrire un sujet/billet/commentaire.

Pour contacter la communauté, merci de rejoindre le slack "drupalfrance".

Si vous voulez contacter le bureau de l'association, utilisez le formulaire disponible ici, ou envoyez-nous un DM sur twitter.

Ci dessous le problème tel qu'il a été posté dans le forum www.drupal.org:

Week and Day dates are not properly displayed in Calendar view (calender "header") if French language is selected (probably an issue in all languages out of English). Date format seems to be hard coded and does not take into account the date format configured.
Please refer to the screenshot attached.

Versions des modules calendar et Date: 6.x-2.0 (ou 6.x-2.x-dev)

Quelqu'un aurait-il connaissance de ce problème ?

D'avance merci.

Fichier attachéTaille
Icône image calendar issue.png15 Ko
Version de Drupal : 

Bonjour (?)

Rien ne me choque dans ton screenshot. Suis-je miro ?
J'utilise Calendar (fourni avec le module Date) et je rencontre aucun souci.

Redéveloppe-nous ton problème en bon français et on pourrait sans doute t'en dire plus.

D'abord merci de votre réponse ultra rapide.

Le problème (en bon français cette fois ci) est que la légende de la vue ne prend pas en compte le format de date configuré. J'ai l'impression que la date est codée en dur. En plus, en anglais le jour de la semaine (Mardi par ex.) est rajouté aussi. En Français on a juste la ",".
Je vous envoi une 2ème copie d'écran.
Au fait même en anglais le format de date de la légende est insensible à la config de format.

Ah ok, le format de date... J'avais mal lu ^^

Pour ton second prob (mardi) regarde si tu n'as pas une chaîne vide dans la trad (ou un double pipe).

Tu devrais avoir :
!day-name Sunday|Monday|Tuesday|Wednesday|Thursday|Friday|Saturday

!day-name Dimanche|Lundi|Mardi|Mercredi|Jeudi|Vendredi|Samedi

J'ai vérifié la trad. Rien d'anormal. Mais ce qui est incroyable c'est que si je fais un coupé collé de la chaine en anglais dans la trad française, le jour s'affiche! Si j'y remplace tout simplement le "Tuesday" par "Mardi" le jour ne s'affiche plus. Quelque chose m'échappe là aussi!

J'ai eu le même souci... après une petite investigation j'ai trouvé un bug report (http://drupal.org/node/388874) qui m'a pointé dans la bonne direction. $nav_title est harcodée tu peux toujours essayer !

Pour éditer le format de la date dans le titre de la vue calendrier il faut éditer modules/date/theme/theme.inc la fonction function theme_date_nav_title ligne 70 et suiv.

Voilà la fonction modifiée qui me permet d'afficher la date à la française (ex: Jeudi 26 Mars 2009), j'ai juste changé le format des dates et rien à la logique :

function theme_date_nav_title($granularity, $view, $link = FALSE, $format = NULL) {
  switch ($granularity) {
    case 'year':
      $title = $view->date_info->year;
      $url = $view->date_info->url .'/'. $view->date_info->year;
      break;
    case 'month':
      $format = !empty($format) ? $format : (empty($view->date_info->mini) ? 'F Y' : 'F');
      $title = date_format_date($view->date_info->min_date, 'custom', $format);
      $url = $view->date_info->url .'/'. $view->date_info->year .'-'. date_pad($view->date_info->month);
      break;
    case 'day':
      $format = !empty($format) ? $format : (empty($view->date_info->mini) ? 'l j F Y' : 'l j F ');
      $title = date_format_date($view->date_info->min_date, 'custom', $format);
      $url = $view->date_info->url .'/'. $view->date_info->year .'-'. date_pad($view->date_info->month) .'-'. date_pad($view->date_info->day);
      break;
    case 'week':
       $format = !empty($format) ? $format : (empty($view->date_info->mini) ? 'j F Y' : 'j F');
      $title = t('Week of @date', array('@date' => date_format_date($view->date_info->min_date, 'custom', $format)));
        $url = $view->date_info->url .'/'. $view->date_info->year .'-W'. date_pad($view->date_info->week);
       break;
  }

Pour info la localisation des dates passe par modules/date_locale/date_locale.module

Bonjour,
@davidm:j'ai fait exactement comme tu as dit mais j'ai 26 mars 2009 et pas jeudi 26 mars 2009
aurais-je loupé quelque chose

En plus dans le bloc calendar les jours ne sont pas traduits alors que je l'ai fait en passant par traduction de l'interface

Merci de ton aide
Aissatou

Tu parles de quel affichage exactement ?

Parceque si tu regardes bien pour l'affichage jour c'est paramétré pour afficher ce que tu souhaites :

case 'day':
      $format = !empty($format) ? $format : (empty($view->date_info->mini) ? 'l j F Y' : 'l j F ');

Sachant que la doc pour le format des date est celle de la fonction date() utilisé par le module : http://fr.php.net/date

Pour le bloc calendar depuis que j'ai mis à jour Date de la 2.0 RC6 -> 2.0 puis -> 2.0 dev j'ai remarqué que ces chaînes étaient effectivement seulement traduisible uniquement par l'interface... probablement un oubli du développeur...

Pour le moment il vaut mieux rester en 2.0 RC6

je te remercie pour ta disponibilité

c'est bon pour la traduction

Par contre,pour l'affichage,j'ai ça:

<pr

case 'day':
$format = !empty($format) ? $format : (empty($view->date_info->mini) ? 'l j F Y' : 'l j F ');
$title = date_format_date($view->date_info->min_date, 'custom', $format);
$url = $view->date_info->url .'/'. $view->date_info->year .'-'. date_pad($view->date_info->month) .'-'. date_pad($view->date_info->day);
break;

mais j'ai 26 mars 2009 alors que je veux jeudi 26 mars 2009
à quoi correspondent les l j F Y? je comprendrais mieux peut etre

Merci encore de ton si précieux pour un profane en dev comme moi

Regarde bien le lien que je t'ai donné sur la fonction date, tu as l'explication des l j F Y ;)

Par exemple :

l ('L' minuscule) : Jour de la semaine, textuel, version longue, en anglais

Ne pas oublier que le module utilise date() et que c'est date_locale/date_locale.module qui se charge de localiser la date par la suite.

Il y quand même peut être un autre problème. Car chez moi aussi le jour de semaine n'est pas affiché. Par contre si dans la la chaine de trad !day-name je remplace la trad du jour (Jeudi) par le "string" anglais (Thursday) alors le jour est bien affiché.

Oui c'est ce que je disai toute à l'heure, certaines chaînes nécessitent une traduction via l'interface depuis le passage au module Date 2.0 (avec la RC6 je n'avais pas ce problème, si je me souviens bien)

Le module s'appuie sur la date en anglais et passe ça à la moulinette de date_locale.module pour traduire donc si on traduit certains éléments, ça met le bazar... tout ça parcequ'il utilise la fonction date() et non strftime() mais je pense que c'est parceque le module date gère aussi les formats custom de date depuis la 2.0... une hypothèse.

Ceci dit il y a une remontée de bug je crois (je vais vérifier)...

Génial. La technique de DavidM, "éditer la fonction theme_date_nav_title" fonctionne à merveille.

Il est malheureux de voir qu'encore aujourd'hui, avec la version 6.x-2.4 du module Date, le problème est toujours présent.

Mais, étant donner que j'ai modifier le fichier theme.inc du module Date, ça veux dire que dès que je met à jour le module Date, la modif va sauter et je vais devoir refaire la manip à toutes les mises-à-jour... nah?

Il y aurais un moyen d'écrire par dessus la fonction theme_date_nav_title avec un module personnalisé ou alors avec le fichier template.php de notre thème?

Je me répond à moi-même... (question stupide, réponse facile)

Alors, le mieux afin de conserver les modifications de la fonction theme_date_nav_title est de modifier la fonction directement dans le fichier template.php de votre thème.

Ainsi, j'ai ajouter le code suivant dans mon fichier template.php

<?php
function NOMDEVOTRETHÈME_date_nav_title($granularity, $view, $link = FALSE, $format = NULL) {
  switch (
$granularity) {
    case
'year':
     
$title = $view->date_info->year;
     
$url = $view->date_info->url .'/'. $view->date_info->year;
      break;
    case
'month':
     
$format = !empty($format) ? $format : (empty($view->date_info->mini) ? 'F Y' : 'F');
     
$title = date_format_date($view->date_info->min_date, 'custom', $format);
     
$url = $view->date_info->url .'/'. $view->date_info->year .'-'. date_pad($view->date_info->month);
      break;
    case
'day':
     
$format = !empty($format) ? $format : (empty($view->date_info->mini) ? 'l j F Y' : 'l j F ');
     
$title = date_format_date($view->date_info->min_date, 'custom', $format);
     
$url = $view->date_info->url .'/'. $view->date_info->year .'-'. date_pad($view->date_info->month) .'-'. date_pad($view->date_info->day);
      break;
    case
'week':
   
$format = !empty($format) ? $format : (empty($view->date_info->mini) ? 'j F Y' : 'j F');
     
$title = t('Week of @date', array('@date' => date_format_date($view->date_info->min_date, 'custom', $format)));
   
$url = $view->date_info->url .'/'. $view->date_info->year .'-W'. date_pad($view->date_info->week);
    break;
  }
 
// TODO Update this.
 
if (!empty($view->date_info->mini) || $link) {
  
// Month navigation titles are used as links in the mini view.
  
$attributes = array('title' => t('View full page month'));
    return
l($title, $view->date_info->url, array('attributes' => $attributes));
  }
  else {
    return
$title;
  }
}
?>

Puisque la fonction theme_date_nav_title commence par theme, vous n'avez alors qu'à changer la valeur 'theme' de theme_date_nav_title par le nom de votre thème. Le tour est jouer. Vous n'avez plus à vous soucier des mises à jour du module Date.

Merci pour le feedback, effectivement c'est ce que j'ai fini par faire aussi en voyant que cet élément de date n'est pas encore localisé (même dans la 6.x-2.5 d'ailleurs)...

Je vais vérifier dans la issue queue d'ailleurs où en est ce point...

Bonjour,

Pour moi, j’exporte mon fichier .po, je le traduit, mais quand j’essaye de l’importer une autre fois, il me dit :

Warning : move_uploaded_file(temporary://date.fr_.po) [function.move-uploaded-file] : failed to open stream : «DrupalTemporaryStreamWrapper::stream_open» call failed in drupal_move_uploaded_file() (line 1599 of E:\wamp\www\drupal-7.10\includes\file.inc).
Warning : move_uploaded_file() [function.move-uploaded-file] : Unable to move ‘E:\wamp\tmp\php4474.tmp’ to ‘temporary://date.fr_.po’ in drupal_move_uploaded_file() (line 1599 of E:\wamp\www\drupal-7.10\includes\file.inc).
File upload error. Could not move uploaded file.
File to import not found.

donc, j’ai bien compris votre solution, mais je ne peux même pas vérifier !!

Merci pour votre aide…

Salut,
Merci pour votre aide, je me retrouve dans la meme situation que vous.
Seul petit bémole, j'ai un message d'erreur qui apparait.

Parse error: syntax error, unexpected $end in /home2/unacator/public_html/sites/all/themes/pixture/template.php on line 66

J'ai pourtant vérifier les acolades et elles ont l'air toutes d'etre là.
Si vous pouviez jetez un coup d'oeil.
Merci

un petit peu tard peut-être mais j'ai eu le même problème, il te manque la fin de la fonction :

// TODO Update this.
  if (!empty($view->date_info->mini) || $link) {
      // Month navigation titles are used as links in the mini view.
   $attributes = array('title' => t('View full page month'));
      return l($title, $view->date_info->url, array('attributes' => $attributes));
  }
  else {
    return $title;
  }
}

par contre, malgré que je n'ai plus de message d'erreur, il me reste deux problèmes :

ça ne change rien pour moi au niveau de l'affichage du calendrier semaine et jour : En fait si je change le theme.inc directement ça fonctionne mais pas dans le template.php de mon thème.. pourtant j'ai bien renommé la fonction en montheme_date_nav_title mais ça marche pas.. il suffit de rajouter cette fonction dans le template.php de mon thème ou bien j'ai loupé une étape ?

et sinon ça marche pour le format de date (de type jour mois année), y compris pour la traduction des jours et mois mais pas pour le titre "semaine du"..
pour semaine j'ai : "Week of 30 Novembre 2009"
ça se change où ça ? (j'ai bien traduit les !datetime et !datetime_plurial)
edit : pour le second point j'ai trouvé : il faut traduire la chaîne du "Week of @date " en "Semaine du @date"