Hola de nuevo chicos.
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 originalframework:
#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.