2012-08-27 14 views
14

Obecnie próbuję włączyć translatora w Symfony 2.0. Symfony ignoruje zmienną Accept-Language Header i używa default_locale (a gdy nie jest zdefiniowany fallback).Dlaczego Symfony ignoruje ustawienie regionalne ustawień przeglądarki (HTTP-Request Accept-Language Header)?

Moja prośba wygląda następująco:

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

ale $this->getRequest()->getLocale(); dostaje mi en z tego samego wniosku.

Czy ktoś może mi powiedzieć, co może być nie tak?

Tak, próbowałem wyczyścić pamięć podręczną i usuwając pliki cookie (omnomnom) :)

Odpowiedz

19

Jest to oczekiwane zachowanie. Symfony domyślnie nie używa nagłówka Accept Language, a zamiast tego wykorzystuje konfigurację symfony do ustawień regionalnych. W rzeczywistości, zaleca się, aby nie używać tego samego adresu URL dla treści w różnych lokalizacjach, zobacz ten dokument:

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

Ale jeśli chcesz, aby zignorować tę radę i korzystać z Zebrane nagłówek język, można to zrobić z tym kodem w kontrolerze:

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

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

Czy istnieje możliwość wykonania tego kodu w każdym sterowniku bez faktycznego zapisania go w każdym sterowniku? Mam na myśli pisanie tego tylko raz? – Senad

+1

Możesz napisać detektor zdarzenia kernel.request i tam to zrobić. –

+0

dziękuję ... już jestem na tym :) – Senad

Powiązane problemy