Quick links: Content - sections - sub sections
EN FR
Quick Search Advanced search
 
Page

  [Opened] ou mettre setlocale(LC_TIME, "FR")

Posted by RaphaelW on 05/15/2007 17:44

Bonjour

Ou faut il spécifier setlocale(LC_TIME, "FR") (ou "fr_FR") pour avoir toutes les dates affichées en français par la suite avec date_format et ce sur tout le site ? J'ai vu qu'il y avait defaultLocale = "fr_FR" dans le fichier de config mais cela permet seulement de sélectionner le fichier de langue .properties

Je peux spécifier cela dans mes controleurs mais est ce le bon endroit ?

Et puis surtout est ce la bonne méthode ?

Merci d'avance

  [Opened] Re: ou mettre setlocale(LC_TIME, "FR")

Reply #1 Posted by laurentj on 05/16/2007 04:05

Bonjour,

dans jelix, il n'est pas fait usage de setlocale pour deux raisons :

  1. cette fonction peut provoquer des disfonctionnements (voir l'avertissement sur la documentation de cette fonction)
  2. les serveurs ne sont pas toujours bien configuré (locales non déclarée etc), ce qui laisse un fonctionnement aléatoire de l'application

Bref, pas de setlocale dans jelix, et pas d'utilisation des fonctions reposants sur setlocale.

Aussi jelix a sa propre gestion des locales. le parametre defaultLocale n'est pas utilisé seulement pour les fichiers de langues, mais est utilisé dans la génération des contenus, dans la gestion des dates etc. La gestion des dates se fait soit par l'objet jDateTime, soit via le plugin de template jdatetime.

  [Opened] Re: ou mettre setlocale(LC_TIME, "FR")

Reply #2 Posted by RaphaelW on 05/16/2007 17:39

Oui mais d'après ce que j'ai pu voir dans les options de jdatetime cela ne sert que pour une date en chiffres. Je n'obtient la date en lettre (mois et jour de la semaine) qu'avec date_format, et en anglais si je ne mets pas setlocale.

Ou sinon je traduit les noms anglais->français dans le fichier properties et je rajoute une méthode qui turbine tout ça dans le controlleur mais c'est dommage.

  [Opened] Re: ou mettre setlocale(LC_TIME, "FR")

Reply #3 Posted by RaphaelW on 05/18/2007 17:57

J'y pense, j'y pense... ce qui est dur pour moi :-)

  [Opened] Re: ou mettre setlocale(LC_TIME, "FR")

Reply #4 Posted by RaphaelW on 05/18/2007 18:28

Alors si je comprend bien la façon dont est construit jdatetime, tout est fait pour que le créateur de template n'ait le droit que d'utiliser une liste bien précise de formats et ne puisse pas proposer son propre format. J'ai donc deux options

  • allonger la liste des formats avec des truc du genre lang_litt_date pour une date littérale par exemple
  • ajouter un mécanisme pour que l'utilisateur puisse proposer son propre format (au format de la fonction PHP date)

Qu'en pense notre reviewer ?

  [Opened] Re: ou mettre setlocale(LC_TIME, "FR")

Reply #5 Posted by RaphaelW on 05/20/2007 19:45

Bon j'ai réussi à faire un truc qui me permet de préciser un format spécial avec la traduction des noms des jours, des mois, y compris les abrégés, ainsi : {$myDate|jdatetime:'l jS F Y'} ce qui afficherait dimanche 21 mai 2007 La traduction est assurée dans le fichier jelix\lib\jelix-modules\jelix\locales\fr_FR\format.UTF-8.properties (et iso)

D'autre part j'ai ajouté des paramètres optionnels :

  • 'ucfirst' pour mettre la première lettre en majuscule (je rappelle qu'en typo française les mois et jours ne prennent normalement pas de majuscule sauf en début de phrase)
  • 'supsufix' pour mettre le suffixe du jour, s'il existe, en exposant (1<sup>er</sup>)
  • 'nolocale' pour ne pas faire de traduction mais utiliser quand même le format spécifié ( pas encore implémenté)

En revanche j'ai un problème si je veux ajouter deux points comme ici : {$myDate|jdatetime:'l jS F Y à H:i'} pour afficher dimanche 21 mai 2007 à 19:30. On ne peux tout simplement pas utiliser les deux-points dans les plugins de template apparemment...

  [Opened] Re: ou mettre setlocale(LC_TIME, "FR")

Reply #6 Posted by AdrienC on 08/24/2008 15:41

Bonjour, j'ai eu aussi besoin de dates en francais, j'ai donc modifie jelix/plugins/tpl/common/modifier.date_format.php :

 function jtpl_modifier_common_date_format( $string, $format="%b %e, %Y", $default_date=null) {
 
    if (substr(PHP_OS,0,3) == 'WIN') {
        $_win_from = array ('%e',  '%T',	   '%D');
        $_win_to   = array ('%#d', '%H:%M:%S', '%m/%d/%y');
        $format	= str_replace($_win_from, $_win_to, $format);
        $i18nIso3166 = new I18N_ISO_3166(jLocale::getCurrentCountry());
        $localeAlpha3 = $i18nIso3166->getThreeLetterCode();
        setlocale(LC_TIME, $localeAlpha3, $localeAlpha3 . '.' . $GLOBALS['gJConfig']->charset);
    } else {
		setlocale(LC_TIME, $GLOBALS['gJConfig']->locale, $GLOBALS['gJConfig']->locale . '.' . $GLOBALS['gJConfig']->charset);
    }
 
    if($string != '') {
        return mb_convert_encoding(strftime($format, strtotime($string)), $GLOBALS['gJConfig']->charset);
    } elseif (isset($default_date) && $default_date != '') {
        return mb_convert_encoding(strftime($format, strtotime($default_date)), $GLOBALS['gJConfig']->charset);
    } else {
        return '';
    }
 }

I18N_ISO_3166.class.php est a rajouter dans jelix/utils, et disponible ici : http://www.appelsiini.net/projects/i18n_(..)

 
Page
  1. ou mettre setlocale(LC_TIME, "FR")