2012-08-27 10 views
14

Attualmente sto cercando di abilitare il traduttore in Symfony 2.0. Symfony sta ignorando la variabile Header Accept-language e usa default_locale (e quando non è definito il fallback).Perché Symfony ignora l'impostazione della lingua del browser (intestazione HTTP-Request Accept-Language)?

La mia richiesta appare come:

Accept-Language de-DE,de;q=0.8,en-us;q=0.5,en;q=0.3 

ma $this->getRequest()->getLocale(); mi viene en con la stessa richiesta.

Qualcuno può dirmi cosa potrebbe essere sbagliato?

Sì, ho cercato di cancellare la cache ed eliminando i miei biscotti (omnomnom) :)

risposta

19

Questo è il comportamento previsto. Symfony non usa di default l'intestazione Accept Language e si affida invece alla configurazione di symfony per le impostazioni locali. In realtà, si consiglia di non utilizzare lo stesso URL per i contenuti in diversi locali, si veda questo documento:

Symfony 2 The Book - Translations - The Locale and the URL

Ma se si vuole ignorare questo consiglio e utilizzare l'intestazione lingua accetti, puoi farlo con questo codice nel controller:

$request = $this->getRequest(); 
$session = $this->get('session'); 

$session->setLocale($request->getPreferredLanguage(array('de', 'en'))); 
+2

c'è la possibilità di eseguire quel codice in ogni controller senza effettivamente scriverlo in ogni controller? Voglio dire con la scrittura solo una volta? – Senad

+1

È possibile scrivere un listener per l'evento kernel.request e farlo lì. –

+0

grazie ... ci sto già :) – Senad

Problemi correlati