Определение языка браузера с PHP - PullRequest
3 голосов
/ 19 ноября 2009

Я пытаюсь реализовать этот код, чтобы загружать разные файлы для браузеров на немецком, испанском или английском языках.Дело в том, что с моим испанским IE я все еще получаю английский файл.

<?php 
if (is_home()) {
  if (preg_match('/de-DE/i', $_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
    include(TEMPLATEPATH . '/german-navbar.php' );
  }
  elseif (preg_match('/es-ES/i', $_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
    include(TEMPLATEPATH . '/spanish-navbar.php' );
  }
  else {
    include(TEMPLATEPATH . '/english-navbar.php' );
  }
}

Я использовал и HTTP_ACCEPT_LANGUAGE, и HTTP_USER_AGENT.

Это тест сайта,если кто-то хотел проверить это, выбрав немецкий или испанский язык в браузере: http://paragraphe.org/janette/

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

Я нашел фрагмент в этой SO-теме , но сейчас я немного растерялся.

Большое спасибо за любыеinput,

EDIT: код работает в Firefox (но не в IE).

Ответы [ 2 ]

3 голосов
/ 19 ноября 2009

Прежде всего, вы можете использовать расширение User Agent Switcher для firefox, чтобы подделывать пользовательские агенты и проверять его, хотя вам придется подделывать заголовки запросов для HTTP_ACCEPT_LANGUAGE, например с помощью Изменить заголовки * Расширение 1004 * (которое также позволяет изменять как пользовательские агенты, так и заголовок)

о, и это не работает на немецком языке:

Warning: include(/home/paragrap/public_html/janette/wp-content/themes/Janette/german-home.php) [function.include]: failed to open stream: No such file or directory in /home/paragrap/public_html/janette/wp-content/themes/Janette/home.php on line 4

Warning: include() [function.include]: Failed opening '/home/paragrap/public_html/janette/wp-content/themes/Janette/german-home.php' for inclusion (include_path='.:/usr/lib/php:/usr/local/lib/php') in /home/paragrap/public_html/janette/wp-content/themes/Janette/home.php on line 4
2 голосов
/ 19 ноября 2009

попробуйте, пожалуйста:

Просто укажите $ availableLanguages ​​в виде массива ('en', 'de', 'es')

функция get_client_language ($ availableLanguages, $ default = 'en') {

if (isset($_SERVER['HTTP_ACCEPT_language'])) {

    $langs=explode(',',$_SERVER['HTTP_ACCEPT_language']);

    //start going through each one
    foreach ($langs as $value){

        $choice=substr($value,0,2);
        if(in_array($choice, $availableLanguages)){
            return $choice;

        }

    }
} 
return $default;

}

...