Forum CMS Made Simple FR

Version complète : Langue de la date dans cms_date_format
Vous consultez actuellement la version basse qualité d’un document. Voir la version complète avec le bon formatage.
Citation :#~~~~~ DEBUT BLOC A NE PAS SUPPRIMER ~~~~~
#~ Version du CMS: !1.9.4.1
#~ Url du site : http://www.seigneurs-du-rouergue.fr/cms/...?page=test
#~ Hébergeur / Soft : NFrance
#~ Informations Système :
#~ ----------------------------------------------
#~ Cms Version: 1.9.4.1
#~ Installed Modules:
#~ CMSMailer: 2.0.1
#~ FileManager: 1.1.0
#~ MenuManager: 1.7.6
#~ ModuleManager: 1.4.2
#~ News: 2.11.2
#~ nuSOAP: 1.0.2
#~ Printing: 1.1.2
#~ Search: 1.6.10
#~ ThemeManager: 1.1.4
#~ TinyMCE: 2.8.4
#~ CGExtensions: 1.25.4
#~ CGCalendar: 1.6.1
#~ Config Information:
#~ php_memory_limit:
#~ process_whole_template: false
#~ output_compression: false
#~ max_upload_size: 10000000
#~ default_upload_permission: 664
#~ url_rewriting: none
#~ page_extension:
#~ query_var: page
#~ image_manipulation_prog: GD
#~ auto_alias_content: true
#~ locale:
#~ default_encoding: utf-8
#~ admin_encoding: utf-8
#~ set_names: true
#~ Php Information:
#~ phpversion: 5.2.17
#~ md5_function: On (Vrai)
#~ gd_version: 2
#~ tempnam_function: On (Vrai)
#~ magic_quotes_runtime: Off (Faux)
#~ E_STRICT: 0
#~ memory_limit: 64M
#~ max_execution_time: 30
#~ output_buffering: On
#~ safe_mode: Off (Faux)
#~ file_uploads: On (Vrai)
#~ post_max_size: 12M
#~ upload_max_filesize: 10M
#~ session_save_path: Aucune vérification à cause de la restriction spécifiée par PHP open_basedir
#~ session_use_cookies: On (Vrai)
#~ xml_function: On (Vrai)
#~ Server Information:
#~ Server Api: cgi-fcgi
#~ Server Db Type: MySQL (mysql)
#~ Server Db Version: 5.1.51
#~ ----------------------------------------------
#~~~~~ FIN BLOC A NE PAS SUPPRIMER ~~~~~



Bonjour,

J'essaye de mettre en place CG Calendar
Le gabarit de la page détail évènement utilise (pour les évènements qui se tiennent sur 1 seule journée) la date cms_date_format (dont le format se renseigne dans Administration du site -> Paramètres globaux).
J'ai mis %e %B %Y, mais je voudrais bien les noms des mois en français et non pas en anglais.


A la lecture de différents posts du forum :

Langue par défaut de la partie publique du site : français.

Ma page de détail appelle {cms_module module='CGCalendar' display='list' limit='1' lang='fr_FR' inline='0'}

J'ai modifié config.php (avec $config['locale'] = 'fr_FR.utf8' et aussi essayé $config['locale'] = 'fr')

J'ai vidé le cache du serveur...

Mais bon, mon évènement test s'obstine à être daté du 3 May 2011 18:45

Merci d'avance de votre aide

Virginie

Virginie
Bonjour,
je ne connais le module, mais en PHP, on peut effectivement formater la date, mais pas traduire le nom des jours ou mois (sauf dans un cas bien précis qui ne concerne pas les hébergement Linux).
Si le développeur du module ne l'a pas prévu, on ne peut rien faire à moins de modifier ledit module.

Pour en être sûr, il faut regarder dans lang/ext/fr_FR.php de CGCalendar si tu vois une variable pour les mois et les jours.
Si comme je le pense, ça n'est pas le cas, il faut formater la date avec une préférence pour les mois au format numérique ou bien hacker le module.
As-tu essayé $config['locale'] = 'fr_FR'
C'est mon paramètre par défaut et ça fonctionne chez moi.
D'abord merci pour vos réponses.

kraygoon : je viens de faire le test avec $config['locale'] = 'fr_FR', mais ça ne change rien.


jissey :
Il y a bien des variables mois et jour dans lang/ext/fr_FR.php, mais celle-ci n'ont pas d'impact sur la date appelée par "cms_date_format".

Je ne "parle" pas bien PHP, mais, dans le gabarit de la page détail évènement, les formats dates des évènements ont l'ai d'être codées différemment selon que l'on affiche la date d'un évènement sur un seul jour (date début = date fin) ou un évènement sur plusieurs jours. Le fichier lang/ext/fr_FR.php semble définir les vocables des dates pour les évènements sur plusieurs jours seulement.

Voici le bout de code :
Code :
{assign var=month_number value=$event.event_date_start|date_format:"%m"}
{assign var=end_month_number value=$event.event_date_end|date_format:"%m"}
{if $event.event_date_start == $event.event_date_end || $event.event_date_end == 0}
  <div class="calendar-date-from"><span class="calendar-date-title">{$lang.date}: </span>{$event.event_date_start|cms_date_format} {$event.event_date_start|date_format:"%H:%M"}</div>

{else}
{if $event.event_date_start|date_format:"%d%m%Y" == $event.event_date_end|date_format:"%d%m%Y"}
  <div class="calendar-date-from"><span class="calendar-date-title">{$lang.date}: </span>{$event.event_date_start|cms_date_format} {$event.event_date_start|date_format:"%H:%M"} {$lang.to} {$event.event_date_end|date_format:"%H:%M"}</div>
{else}
  <div class="calendar-date-from"><span class="calendar-date-title">{$lang.date}: </span>{$event.event_date_start|date_format:"%e"} {$month_names[$month_number]} {$event.event_date_start|date_format:"%Y %H:%M"} {$lang.to} {$event.event_date_end|date_format:"%d"} {$month_names[$end_month_number]} {$event.event_date_end|date_format:"%Y %H:%M"}</div>
{/if}
{/if}

Donc je pense (et ça serait d'ailleurs logique) que le format date "cms_date_format" est traduit ailleurs... mais où ?

Jissey : selon ton idée, j'ai essayé de modifier le code du module et ça a l'air OK. Cependant, comme j'ai vraiment joué les apprenties sorcières, veux-tu bien jeter un oeil et me dire si ça a l'air pas trop "codé avec les pieds".

Dans la 1ère partie, j'ai remplacé :

Code :
{$event.event_date_start|cms_date_format} {$event.event_date_start|date_format:"%H:%M"}

par :

Code :
{$event.event_date_start|date_format:"%e"} {$month_names[$month_number]} {$event.event_date_start|date_format:"%Y %Hh%M"}

ce qui donne donc, pour le nouveau gabarit :

Code :
<div class="calendar-event">
<h1>{$event.event_title}<br><br></h1>
<strong>
{assign var=month_number value=$event.event_date_start|date_format:"%m"}
{assign var=end_month_number value=$event.event_date_end|date_format:"%m"}
{if $event.event_date_start == $event.event_date_end || $event.event_date_end == 0}
  <div class="calendar-date-from"><span class="calendar-date-title">{$lang.date}: </span>{$event.event_date_start|date_format:"%e"} {$month_names[$month_number]} {$event.event_date_start|date_format:"%Y %Hh%M"}</div>

{else}
{if $event.event_date_start|date_format:"%d%m%Y" == $event.event_date_end|date_format:"%d%m%Y"}
  <div class="calendar-date-from"><span class="calendar-date-title">{$lang.date}: </span>{$event.event_date_start|cms_date_format} {$event.event_date_start|date_format:"%Hh%M"} {$lang.to} {$event.event_date_end|date_format:"%Hh%M"}</div>
{else}
  <div class="calendar-date-from"><span class="calendar-date-title">{$lang.date}: </span>{$event.event_date_start|date_format:"%e"} {$month_names[$month_number]} {$event.event_date_start|date_format:"%Y %Hh%M"} {$lang.to} {$event.event_date_end|date_format:"%d"} {$month_names[$end_month_number]} {$event.event_date_end|date_format:"%Y %Hh%M"}</div>
{/if}
{/if}
</strong>
{if $event.event_summary !="" && $event.event_details ==""}
    <div class="calendar-summary"><span class="calendar-summary-title">{$lang.summary}: </span>{$event.event_summary}</div>
{/if}
{if $event.event_details !="" && $event.event_details != "<br />"}
<br><div class="calendar-details"><span class="calendar-details-title">{$lang.details}: </span>{eval var=$event.event_details}</div>
{/if}

{* Display custom fields
   There are two ways to address custom fields
   1) {$event.fields.fieldname}
   2) {foreach from=$event.fields key='fieldnamee' item='fieldvalue'}
        {$fieldname}: {$fieldvalue}
      {/foreach}
   You may want to use the former method with file upload fields.
*}
<div class="calendar-fields">
  {foreach from=$event.fields key='fieldname' item='fieldvalue'}
      {$fieldname}: {$fieldvalue}<br/>
  {/foreach}
<br>
</div>
<div class="calendar-returnlink">{$return_link}</div>
</div>


D'avance merci

Virginie
Virginie,
comme je te l'ai dis, je ne connais pas ce module.
Si ta solution fonctionne, c'est parfait, le smarty n'a pas du tout l'air codé avec les pieds Wink .
Je suppose que $month_names vient du fichier des langues?

Sinon, si ça ne te poses pas de problème pour d'autres utilisations, sans rien toucher, tu aurais pu modifier le format de la date "système" de CMSMS.
Citation :Je suppose que $month_names vient du fichier des langues?

Oui, en effet, du fichier langue de CGCalendar, mais je pensais pouvoir trouver un équivalent pour le système CMSMS "général".
J'ai bien trouvé quelques fichiers langues qui semblent concerner le CMS en général, mais il n'y a pas les mois dedans.

je n'ai pas grand mérite, pour le smarty, j'ai pris celui du module, et je l'ai un peu "bidouillé" en tâtonnant jusqu'à ce que ça fasse à peu près ce que je voulais.

Pour ce qui est du format de la date système de CMSMS, le problème, c'est que je ne voulais pas un affichage type 14/06/2011, mais bien avec les noms des mois en entier.

J'avais déjà eu ce souci pour un autre site CMSMS (dans le module Album, ou News, je ne sais plus), et là, j'avais utilisé un format numérique.

Mais quand même, si quelqu'un sait où on peut choisir la langue de la date système de CMSMS... ce serait vraiment cool.
RE:
de mon point de vue, on ne peut pas pour la raison "PHP" décrite plus haut.
Mais si quelqu'un d'autre à une info, qu'il n'hésite pas.

Ce que l'on peut faire par contre, c'est créer un modificateur smarty.
Le principe serait de remplacer les textes anglais par ceux de notre si belle langue.
Un modificateur est un code PHP qui modifie la variable smarty, par exemple :
Code :
{assign var=end_month_number value=$event.event_date_end|date_format:"%m"}
date_format est le modificateur.

Donc, pour ne rien toucher à l'existant, j'ai étendu les fonctionnalités de CMSMS en passant par smarty.

Dans le dossier plugins, on a la possibilité de créer des modificateurs smarty(ou modifiers) grâce à une
convention de nommage.
Si je veux appeler mon modifier "cms_date_in_french", je dois créer un fichier modifier.cms_date_in_french.php dont voici le contenu:
Code :
<?php
function smarty_cms_modifier_cms_date_in_french($string)
{
$mois_long= array("Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre");
$mois_court= array("Jan", "Fév", "Mar", "Avr", "Mai", "Juin", "Juil", "Août", "Sep", "Oct", "Nov", "Déc");
$jour_long= array("Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi");
$jour_court= array("Dim", "Lun", "Mar", "Mer", "Jeu", "Ven", "Sam");

$month_long= array('January','February','March','April','May','June','July','August','September','October','November','December');
$month_short= array('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');
$day_long= array('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday');
$day_short= array('Sun','Mon','Tue','Wed','Thu','Fri','Sat');

$french_date=str_replace($month_long, $mois_long, $string);
$french_date=str_replace($month_short, $mois_court, $french_date);
$french_date=str_replace($day_long, $jour_long, $french_date);
$french_date=str_replace($day_short, $jour_court, $french_date);

  return $french_date;
}
?>

Le code est bien sûr sans doute perfectible, mais le principe est bien là.
Maintenant, je peux appliquer ce modificateur à n'importe quelle variable smarty dans tout les contenus possibles.
Ce qui donne :
Code :
{$event.event_date_start|date_format:"%A"|cms_date_in_french}

Remarque bien que le modifier s'applique après le formatage de la date puisqu'il remplace les termes anglophones générés par PHP.

Cette méthode est intéressante car elle est portable.

JC
@ Kraygoon
Citation :As-tu essayé $config['locale'] = 'fr_FR'
C'est mon paramètre par défaut et ça fonctionne chez moi.
Est-ce à dire que tu as les noms des mois et des jours en français???
Merci jissey,

Je pense avoir compris le principe de ta solution, qui semble en effet intéressante car "réutilisable".

Par contre, vu mon niveau de PHP, il va me falloir un peu de temps pour essayer de transposer tout ça chez moi. Je regarde ce WE.

Virginie
jissey a écrit :@ Kraygoon
Est-ce à dire que tu as les noms des mois et des jours en français???

Tout est en français. Ça passe même clairement de l'anglais au français en changeant cette variable.
Ha ben oui, la langue de la date est bonne avec la bonne config.

Si tu configures le mode debug ($config['debug']=trueWink et que le setlocale plante, tu auras le message:
Code :
IMPORTANT: SetLocale failed
sur la page.
Voilà, donc soit il y a un problème avec l'hébergement, soit il y a une faute de frappe dans la config.
Info sur setlocale utilisé par include.php.
kraygoon a écrit :
jissey a écrit :@ Kraygoon
Est-ce à dire que tu as les noms des mois et des jours en français???

Tout est en français. Ça passe même clairement de l'anglais au français en changeant cette variable.

Voilà une bonne nouvelle ... !
Mais heu ... tu implantes ce
Code :
$config['locale'] = 'fr_FR'
à quel endroit ?
Merci.
Dans le config.php tu as déjà la variable, il suffit de modifier sa valeur.
kraygoon a écrit :Dans le config.php tu as déjà la variable, il suffit de modifier sa valeur.

Oui, j'avais vu et déjà testé ..., infructueux sur l'affichage de mes dates qui sont stockées en bd en format anglais !

Je finirai par trouver !
Et en attendant, continuer à utiliser la manipulation de chaîne de caractère ...
@ kraygoon : merci, je cherchais justement à le faire !