Este foro ya no está activo, así que no puedes publicar nuevas preguntas ni responder a las preguntas existentes.

Fechas en español Silex y symfony

23 de diciembre de 2013

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

#1

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

26 diciembre 2013, 22:46
#2

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

23 enero 2014, 17:22
#3

@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

27 enero 2014, 8:53
#4

Ok, ese era el error.

Ahora si va perfecto.

Muchas gracias.

@Yercapa

27 enero 2014, 23:47