Hola buenas, ¿cómo se puede configurar Silex para mostrar las fechas en español? Por ejemplo para mostrar la fecha tipo "hoy es lunes 23 de diciembre de 2013" o mostrarla en un formulario.
$form = $app['form.factory']->createBuilder('form') ->add('fecha_de_nacimiento','date', array( 'required' => true, 'format' => 'dd-MMMM-yyyy', )) ;
Gracias.
Respuestas
La traducción de las fechas siempre se realiza a nivel de plantilla, así que el responsable de todo esto en el caso de Symfony/Silex es Twig. Se que suena extraño, pero Twig por defecto no soporta la traducción de fechas.
Para activar la traducción de fechas, tienes que hacer uso de las extensiones de Twig. Primero añade la dependencia twig/extensions
en tu archivo composer.json
:
{ ... , "require": { "twig/twig" : "~1.14", <-- Twig "normal" "twig/extensions" : "1.0.1", <-- Añade esto } }
Entre otras cosas, las extensiones de Twig añaden el filtro localizeddate
para traducir fechas. El primer argumento del filtro es el formato de la parte de la fecha (puede ser short
, medium
, long
y none
), el segundo argumento es el formato de la parte de la hora (mismas opciones que antes) y el tercer parámetro es el código del idioma al que quieres traducir la fecha (soporta prácticamente todos los idiomas del mundo).
Como ejemplo, este es el código que utilizo para traducir fechas en la plantilla Twig que se encarga de generar la página que estás leyendo ahora mismo:
{{ comment.created_at|localizeddate('medium', 'short', 'es') }}
@javiereguiluz
Hola buenas.
He intentado hacer lo que dices pero no me va. Este es mi composer.json
:
"require": { "php": ">=5.3.3", "silex/silex": "~1.1", "silex/web-profiler": "~1.0", "symfony/class-loader": "~2.3", "symfony/yaml": "~2.3", "symfony/debug": "~2.3", "symfony/browser-kit": "~2.3", "symfony/console": "~2.3", "symfony/config": "~2.3", "symfony/css-selector": "~2.3", "symfony/dom-crawler": "~2.3", "symfony/filesystem": "~2.3", "symfony/finder": "~2.3", "symfony/form": "~2.3", "symfony/locale": "~2.3", "symfony/process": "~2.3", "symfony/security": "~2.3", "symfony/serializer": "~2.3", "symfony/translation": "~2.3", "symfony/validator": "~2.3", "symfony/monolog-bridge": "~2.3", "symfony/twig-bridge": "~2.3", "twig/extensions" : "1.0.1", "doctrine/dbal": ">=2.2.0,<2.4.0-dev", "swiftmailer/swiftmailer": "5.*" }
Modificado a partir de skeleton de Fabien Potencier y me salta este error:
Twig_Error_Syntax: The filter "localizeddate" does not exist in ...
@Yercapa
@Yercapa, después de ejecutar el composer install
, no olvides activar la nueva extensión de Twig tal y como haces con cualquier otra extensión de Twig. En el caso de Silex, abre el archivo src/app.php
y añade lo siguiente:
$app['twig'] = $app->share($app->extend('twig', function($twig) { // enable this for the localizeddate filter $twig->addExtension(new Twig_Extensions_Extension_Intl()); return $twig; }));
@javiereguiluz
Ok, ese era el error.
Ahora si va perfecto.
Muchas gracias.
@Yercapa