Twig

FORMATER UNE DATE EN FRANÇAIS AVEC TWIG

D

Vendredi 2 juin 2017

Mis à jour le jeudi 5 avril 2018

Formater une date en français avec Twig

Pour afficher des dates avec Twig dans ce format :
dimanche 5 février 2017
Il suffit d'installer les extensions Twig (disponible ici : http://twig-extensions.readthedocs.io/en/latest/index.html#extensions-install;) avec Composer :
composer require twig/extensions

Ensuite, comme expliqué dans la documentation des extensions Twig, il faut enregistrer l'extension. Pour cela, il faut rajouter le bloc suivant dans le fichier /app/config/services.xml :
services:
#    service_1:
#        ...

    twig.extension.intl:
        class: Twig_Extensions_Extension_Intl
        public: false
        tags:
            - { name: twig.extension }

Pour finir, vous pouvez afficher vos date en utilisant le nouveau filtre disponible comme ceci :
{{ article.date_de_publication|localizeddate('none', 'none', 'fr', null, 'EEEE d MMMM Y') }}
Ce qui vous affichera :
dimanche 5 février 2017

Attention au troisième paramètre « locale », si on le met à NULL, Twig utilisera à sa place la valeur de Locale::getDefault() en PHP. Je cite la documentation de PHP :
Au moment de l'initialisation de PHP, cette valeur est extraite de la directive 'intl.default_locale' dans php.ini, si cette valeur existe, et de la fonction ICU uloc_getDefault() autrement.
Par défaut, dans votre php.ini, cette directive est commentée et donc n’existe pas aux yeux de PHP. Vous pouvez la fixer pour ne pas avoir à le faire à chaque appel de la fonction. Pour savoir où se trouve son fichier php.ini, il suffit d'exécuter un script qui contient phpinfo(); :
<?php phpinfo(); ?>

Attention à bien avoir activé/installé l'extension "intl" de PHP sinon, on aura des erreurs du type :
request.CRITICAL: Uncaught PHP Exception Twig_Error_Runtime: "An exception has been thrown during the rendering of a template ("Unimplemented date character "Y" in format "EEEE d MMMM Y à H'h'mm" Please install the "intl" extension for full localization capabilities.") …
ou
request.CRITICAL: Uncaught PHP Exception Twig_Error_Runtime: "An exception has been thrown during the rendering of a template ("The Symfony\Component\Intl\DateFormatter\IntlDateFormatter::__construct() method's argument $locale value 'fr' behavior is not implemented. Only the locale "en" is supported.  Please install the "intl" extension for full localization capabilities.")." at …
Si vous utilisez PHP 5, il faut installer php5-intl :
apt-get install php5-intl
Si vous utilisez PHP 7, il faut installer php7.0-intl :
sudo apt-get install php7.0-intl
Puis redémarrer Apache si vous l’utilisez :
service apache2 restart

Vous devriez pouvoir afficher des dates en français en environnement de développement comme en environnement de production :)



Une erreur ? une question ? une critique ? une faute ? un conseil ? ou tout simplement un merci ?

Lâche ton commentaire