2013-07-15 2 views
0

Моя цель - распознать браузер локального пользователя и автоматически установить язык.Автоматическое определение локали пользователя

Затем разрешите пользователю изменять язык и хранить его на других страницах.

В то время я установил маршруты таким образом:

# homepage not localized: load the homepage with default language 
index_not_localized: 
    path: /
    defaults: { _controller: "AcmeSiteBundle:Default:index", _locale: %locale% } 


acme_site: 
    resource: "@AcmeSiteBundle/Controller/" 
    type:  annotation 
    prefix: /{_locale} 
    defaults: { _locale: %locale% } 
    requirements: 
     _locale: %route_locale_requirements% 

Когда пользователь заходит на страницу example.com без указания языка в локальном маршруте устанавливается по умолчанию, а страница есть коммутатор, который позволяет вам сменить язык:

<ul class="dropdown-menu"> 
    {% for locale in ['en', 'it'] %} 
     <li> 
      <a href="{{ path('homepage', {'_locale': locale}) }}"> 
     </li> 
    {% endfor %} 
</ul> 

Как мне сделать то, что я хочу?

Мне нужно создать слушателя? Я поставил местную сессию?

Я в замешательстве, я прочитал несколько ответов, но не нашел четкого ответа!

+0

Что-то вроде этого: http://symfony.com/doc/current/cookbook/session/locale_sticky_session.html –

+0

Да, спасибо, но отвечает только на часть проблема. Как автоматически определить локаль пользователя? –

+0

Вы не должны этого делать, даже если вы реализовали обнаружение по IP, потому что англоговорящий может открыть ваш сайт из России. Просто сделайте переключатель языка. –

ответ

0

Существует по крайней мере два пути, но оба они не дают вам 100% гарантии обнаружить локаль и обнаружить ее правильно.

Первый - использовать переменную $_SERVER['HTTP_ACCEPT_LANGUAGE']. Он получен через HTTP-заголовки и даже не существует.

Второе - использовать службы третьей стороны для определения страны по IP-адресу, а затем сравнить название страны с местной таблицей стран и их локалей. Например:

http://api.hostip.info/get_html.php?ip=127.0.0.1

Для получения дополнительной информации и комментариев посмотреть на этот вопрос: Simplest way to detect client locale in PHP

И конечная точка интеграции языкового обнаружения в проект Symfony2. Это самая простая часть. Вам просто нужно использовать kernel.request event listner. Здесь все объяснено (с примерами): Symfony 2.1 set locale

Смежные вопросы