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 :)
Sources
- https://coderwall.com/p/orvogq/symfony2-localized-date-string-in-twig-template
- https://www.jbnet.fr/developpement/symfony/symfony-only-the-locale-en-is-supported-please-install-the-intl-extension-for-full-localization-capabilities.html
- http://stackoverflow.com/questions/34294852/how-to-install-enable-intl-and-xsl-extensions-after-installing-php-7
- https://stackoverflow.com/questions/8684609/dude-wheres-my-php-ini
- https://mon-beulogue.com/2014/11/19/symfony-internationalisation-des-dates-pour-twig/
- -> http://userguide.icu-project.org/formatparse/datetime#TOC-Date-Time-Format-Syntax