2012-08-27 15 views
14

Tôi hiện đang cố gắng kích hoạt dịch giả trong Symfony 2.0. Symfony bỏ qua biến Accept-Language Header và đang sử dụng default_locale (và khi nó không được định nghĩa là dự phòng).Tại sao Symfony bỏ qua cài đặt miền địa phương của trình duyệt (Tiêu đề chấp nhận ngôn ngữ HTTP-Request)?

Yêu cầu của tôi trông giống như:

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

nhưng $this->getRequest()->getLocale(); được tôi en với cùng yêu cầu.

Ai đó có thể cho tôi biết điều gì có thể sai?

Có, tôi đã cố gắng xóa bộ nhớ cache và xóa cookie của tôi (omnomnom) :)

Trả lời

19

Đây là hành vi mong đợi. Symfony không mặc định sử dụng tiêu đề Accept Language và thay vào đó dựa vào cấu hình symfony cho các thiết lập miền địa phương. Trong thực tế, nó được khuyên không nên sử dụng cùng một URL cho nội dung trong miền địa phương khác nhau, xem tài liệu này:

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

Nhưng nếu bạn muốn bỏ qua lời khuyên này và sử dụng Chấp nhận tiêu đề ngôn ngữ, bạn có thể làm điều đó với mã này trong bộ điều khiển của bạn:

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

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

có khả năng thực thi mã đó trong mọi bộ điều khiển mà không thực sự viết mã trong mọi bộ điều khiển không? Ý tôi là bằng cách viết nó chỉ một lần? – Senad

+1

Bạn có thể viết trình nghe cho sự kiện kernel.request và thực hiện nó ở đó. –

+0

cảm ơn bạn ... Tôi đã ở đó :) – Senad

Các vấn đề liên quan