Communauté Elgg francophone

Créer un compteAide  
Connexion

Traduction FR du calendrier intégré à event_calendar

Bonjour à tous !

Ce n'est qu'une ébauche, mais c'est un bon début :)

Pour se servir du calendrier en FR, il faut remplacer 2 fichiers (en téléchargement dans les fichiers de ce groupe) et modifier 2 fichiers pour commencer à voir les dates en français.

Après plusieurs essais infructueux en utilisant setlocale(), strptime() et mktime() pour tenter de créer un timestamp à partir des chaîne données par le calendrier FR, je me suis finalement rabattu sur preg_replace().
La modif remplace les termes français en anglais avant de stocker dans la base, et fait l'inverse pour l'affichage d'un évènement.

TODO : trouver tous les endroits où s'affichent les évènement et y intégrer la routine. Pour l'instant, les dates courtes sont toujours en anglais. A priori cet affichage doit se trouver dans les views, mais je ne les ai pas encore parcourus.

Toutes les suggestions sont les bienvenues !

Modifications :

- télécharger ui.datepicker.packed.js ici et remplacer celui présent dans /mod/event_calendar/

- télécharger datepicker.css ici et remplacer celui présent au même endroit

- dans /mod/event_calendar/models/model.php, trouver (ligne 37) :

$event_data->start_date = get_input('start_date','');
if(get_input('end_date','')!=''){
$event_data->end_date = get_input('end_date','');
}else{
$event_data->end_date=get_input('start_date','');
}

remplacer par :

// Remplacement des termes français
// on récupère les valeurs du formulaire
$start_date_vf = get_input('start_date','');
$end_date_vf = get_input('end_date','');
// liste des mois et jours des 2 languages
$termes_vf = array('/Janvier/', '/Février/', '/Mars/', '/Avril/', '/Mai/', '/Juin/', '/Juillet/', '/Août/', '/Septembre/', '/Octobre/', '/Novembre/', '/Décembre/', '/Lundi/', '/Mardi/', '/Mercredi/', '/Jeudi/', '/Vendredi/', '/Samedi/','/Dimanche/');
$termes_vo = array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday');

// remplacement systématique des termes_vf trouvés en termes_vo
$start_date_vo = preg_replace($termes_vf, $termes_vo, $start_date_vf);
$end_date_vo = preg_replace($termes_vf, $termes_vo, $end_date_vf);

// s'il n'y a pas de date de fin, la date de début la remplace
$event_data->start_date = $start_date_vo;
if(get_input('end_date','')!=''){
    $event_data->end_date = $end_date_vo;
}else{
    $event_data->end_date = $start_date_vo;
}

// fini !

Convertir en UTF-8 sans BOM et sauver.

- dans //mod/event_calendar/views/default/event_calendar/forms/manage_event.php, trouver (ligne 25) :

$start_date = date("l j F Y",$event->start_date);
if ($event->end_date) {
$end_date = date("l j F Y",$event->end_date);
} else {
$end_date = $event->end_date;
}

remplacer par :

// Remplacement des termes anglais
// on récupère les valeurs stockées
$start_date_vo = date("l j F Y",$event->start_date);
$end_date_vo = date("l j F Y",$event->end_date);

// liste des mois et jours des 2 languages
$termes_vo = array('/January/', '/February/', '/March/', '/April/', '/May/', '/June/', '/July/', '/August/', '/September/', '/October/', '/November/', '/December/', '/Monday/', '/Tuesday/', '/Wednesday/', '/Thursday/', '/Friday/', '/Saturday/', '/Sunday/');
$termes_vf = array('Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin', 'Juillet', 'Août', 'Septembre', 'Octobre', 'Novembre', 'Décembre', 'Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi','Dimanche');

// remplacement systématique des termes_vo trouvés en termes_vf
$start_date_vf = preg_replace($termes_vo, $termes_vf, $start_date_vo);
$end_date_vf = preg_replace($termes_vo, $termes_vf, $end_date_vo);

// S'il n'y a pas de date de fin, on laisse la valeur de $event->end_date
$start_date = $start_date_vf;
if ($event->end_date) {
$end_date = $end_date_vf;
} else {
$end_date = $event->end_date;
}

// fini !

convertir aussi en UTF-8 sans BOM et aller ajouter un évènement !

Il faut maintenant aller adapter les css à votre thème, et chasser les apparitions des dates en version courte pour leur réserver le même sort :)

Commentaires

  • Fabrice Collette le 28 juillet 2009

    Hello,

    je suis en vacances et je ne peux pas vérifier, mais à priori dans le dossier event_calendar tu dois avoir un views/default/object/event_calendar.php qui est la vue générale appeleé par elgg chaque fois qu'un objet event calendar est affiché.
    c'est ce fichier que tu dois travailler pour définir ton affichage.
    un conseil, fait le dans un plugin different dans lequel tu créer un event_calendar.php asous la même arborescence et que tu placera en dessous du plugin event_calendar dans la liste des plugin. De cette manière ta vue spécifique sera prise en compte au lieu de la vue standard :)

  • Mato le 29 juillet 2009

    Merci pour tes conseils : toute l'interface est maintenant en français !
    J'ai aussi fait en sorte qu'on ne puisse pas mettre une date de fin antérieure à celle de début. Si c'est le cas, cette dernière la remplace automatiquement.

    En ce qui concerne le plugin, j'ai commencé à le faire, mais comment déclarer que je veux overrider uniquement les fichiers que j'ai modifié ? dans le xml ? que mettre dans mon start.php ? Ce serait stupide de devoir remettre tous les fichiers, y compris ceux qui sont identiques au plugin originel : bonjour les mises à jour !

    Si c'est possible de faire des override de certains fichiers, je ferai un plugin.

    ++
    M.

  • david le 13 novembre 2009

    Bonjour, ce plugin m'intéresse fortement toutefois j'ai quelques problèmes lors de la mise en oeuvre de ta solution :
    le calendrier est bien remplacé par le nouveau en français mais j'ai un problème lors de la création d'un nouvel évènement j'ai une erreur et l'évènement n'est pas créé.

    Vois tu d'ou pourrait venir l'erreur ?
    Merci

     

  • Mato le 14 novembre 2009

    @david : Peux-tu le donner le message d'erreur exact ? A quoi ressemble la date (dans le champ, en toutes lettres) une fois que tu as cliqué dans le calendrier (avant d'enregistrer l'évènement) ?

  • david le 14 novembre 2009

    Alors pour la date dans le champ une fois que j'ai cliqué sur le calendrier , elle est sous la forme suivante : Dimanche, Novembre 15, 2009

    Et pour le message d'erreur j'ai ceci :
    Une erreur s'est produite lors de l'enregistrement de votre évènement. Assurez vous que tout les champs spécifiés ont bien été remplis.

    stdClass Object ( [form_data] => stdClass Object ( [event_id] => 0 [access] => 2 [title] => test [description] => [venue] => test [fees] => [contact] => [organiser] => [event_tags] => [long_description] => ) [success] => )

    Pourtant j'ai bien renseigné les champs obligatoire, à savoir nom, lieu et date de l'évènement.
    Merci d'avance

  • Mato le 1 février 2010

    Désolé de ne pas être intervenu plus tôt... Avec la version 1.6.1, le nombre de transformations nécéssaires est supérieur, et elles sont légèrement différentes. Je n'ai pas pris le temps de faire un plugin spécifique...

    Aujourd'hui, ma version fonctionne correctement mais j'ai dû modifier les css et ajouter quelques lignes pour afficher ce que je voulais. Je ne pense donc pas qu'elle satisfera d'autres que moi...

    Pour la version 1.7 j'essaierai de revenir ici et de faire un véritable plugin francisé. Pour l'instant les modifications au dessus sont assez barbares...