Comenzar con symfony me está costando la vida , más si cabe si no funcionan cosas tan básicas y faciles (sobre la teoría) como las traducciones en Symfony
Usando la versión 2.4.10 de Symfony, me encuentro con que, sobre la teoría y según los manuales que he seguido dicen mas o menos esto (ejemplo sacado de librosweb):
==================================================
La configuración regional o locale del usuario actual se almacena en la petición y se puede acceder a través del objeto Request:
// accediendo al objeto Request desde un controlador
$request = $this->getRequest();
$locale = $request->getLocale();
$request->setLocale('en_US');
También puedes almacenar el locale en la sesión del usuario (mediante la propiedad especial _locale) en vez de obtenerla cada vez de las peticiones. Si lo haces, las peticiones posteriores tendrán automáticamente el locale almacenado en la sesión.
$this->get('session')->set('_locale', 'en_US');
==================================================
Entonces yo digo cojonudo, pues voy a hacer lo que dice para que se almacene automáticamente.
Pues a eso voy:
Código config.yml:
Ver original
framework: #esi: ~ translator: { fallback: "en" } secret: "%secret%" router: resource: "%kernel.root_dir%/config/routing.yml" strict_requirements: ~ form: ~ csrf_protection: ~ validation: { enable_annotations: true } templating: engines: ['twig'] #assets_version: SomeVersionScheme trusted_hosts: ~ trusted_proxies: ~ session: # handler_id set to null will use default session handler from php.ini handler_id: ~ fragments: ~ http_method_override: true
Tengo mi config.yml con el translator activado y fallback: "en".
Y luego en mi controller tengo:
Código IndexController.php:
Ver original
<?php namespace Mirame\Application\AppBundle\Controller; use Symfony\Bundle\FrameworkBundle\Controller\Controller; use Symfony\Component\Security\Core\SecurityContext; class IndexController extends Controller { public function indexAction() { $this->get("session")->set('_locale', "es_ES"); //$this->getRequest()->setLocale("es_ES"); $texto = "hola mundo"; return $this->render('MirameAppBundle:Index:index.html.twig', array('texto' => $texto)); } }
Este es el controlador (simplificado su código) que recibe al usuario cuando se loguea. Aquí trato de definir el locale a es_ES (entre otros que he probado) para que se aplique el idioma español, diferente al fallback que es "en" (inglés).
Pues bien, tal y como está no me hace ni puxxxxx caso. La teoría dice que guarda en sesión ese valor (cosa que he comprobado y así es) y que coge ese valor como locale predeterminado, porque _locale es una variable especial, cosa que a mí no me hace en absoluto.
Si que me funciona si descomento la linea que está comentada que define el locale para esa petición, pero solo en esa petición, las siguientes ya vuelven a salir en el idioma definido por defecto... Y teniendo una manera supuesta de hacerlo automatico configurándolo solo una vez, entiendo estúpido tener que ir petición por petición definiendo el locale del Request.
¿Alguna solución, cosa a probar, consejo? No sé si se me escapa algo por desconocimiento o por omisión en los manuales que he leído.
Gracias por adelantado chicos.