Ver Mensaje Individual
  #1 (permalink)  
Antiguo 30/10/2014, 05:26
Dragown
 
Fecha de Ingreso: enero-2010
Ubicación: Madrid
Mensajes: 22
Antigüedad: 14 años, 4 meses
Puntos: 0
No funciona la traduccion (no coge _locale)

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 original
  1. framework:
  2.     #esi:             ~
  3.     translator:      { fallback: "en" }
  4.     secret:          "%secret%"
  5.     router:
  6.         resource: "%kernel.root_dir%/config/routing.yml"
  7.         strict_requirements: ~
  8.     form:            ~
  9.     csrf_protection: ~
  10.     validation:      { enable_annotations: true }
  11.     templating:
  12.         engines: ['twig']
  13.         #assets_version: SomeVersionScheme
  14.     trusted_hosts:   ~
  15.     trusted_proxies: ~
  16.     session:
  17.         # handler_id set to null will use default session handler from php.ini
  18.         handler_id:  ~
  19.     fragments:       ~
  20.     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
  1. <?php
  2.  
  3. namespace Mirame\Application\AppBundle\Controller;
  4.  
  5. use Symfony\Bundle\FrameworkBundle\Controller\Controller;
  6. use Symfony\Component\Security\Core\SecurityContext;
  7.  
  8. class IndexController extends Controller {
  9.    
  10.     public function indexAction() {
  11.     $this->get("session")->set('_locale', "es_ES");
  12.         //$this->getRequest()->setLocale("es_ES");
  13.  
  14.         $texto = "hola mundo";
  15.        
  16.         return $this->render('MirameAppBundle:Index:index.html.twig', array('texto' => $texto));
  17.     }
  18. }

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.