Как заново создать URL-адрес с Accept-Language, + сплита?


у меня есть код в PHP созданный членом @Maia, он сообщает, язык браузера и возвращает перенаправления.

Код

<?php
$lang = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
header("Location: http://meusite.com/$lang" ) ;
?>

Он перенаправляет:

meusite.com/pt-BR,pt;q=0.8,en-US;q=0.6,en;q=0.4

уверен, он будет перенаправлять meusite.com/pt-BR, потому что мой веб-браузер с языка pt-BR.

, Будет, что создавая split решило бы?


член @Майя сделал так:

$lang = split(",", $_SERVER['HTTP_ACCEPT_LANGUAGE'])[0];

В случае, если URL-адрес будет только до первой запятой, таким образом оставляя только: meusite.com/pt-BR. Только что код, кажется, не так, не работает.

я Хотел бы сделать это с помощью URL-адреса, в результате чего до /pt-BR, или даже оставить:

meusite.com/pt

член предположил, что я переключал индекс [0] для 1 оставив так:

$lang = split(",", $_SERVER['HTTP_ACCEPT_LANGUAGE'])[1];

Только, что не работает, так что я хотел бы некоторые образцы, как сделать перенаправление для /ru-ru или как перенаправить на /ru

 1
php
Author: Comunidade, 2014-06-30

1 answers

Именно быстрое решение 1:

<?php

$langs = array();
if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {

   // Cá entre nós, usar regex pra isso é forçar a amizade, mas lá vai :)
   preg_match_all('/([a-z]{1,8}(-[a-z]{1,8})?)\s*(;\s*q\s*=\s*(1|0\.[0-9]+))?/i', $_SERVER['HTTP_ACCEPT_LANGUAGE'], $lang_parse);

   //Aqui vamos ordenar por preferência do usuário
   if (count($lang_parse[1])) {
      $langs = array_combine($lang_parse[1], $lang_parse[4]);
      foreach ($langs as $lang => $val) {
         if ($val === '') $langs[$lang] = 1;
      }
      arsort($langs, SORT_NUMERIC);
   }
}

// Aqui você põe apenas as linguagens que seu site REALMENTE tem:
foreach ($langs as $lang => $val) {
   if ( strpos($lang, 'pt') === 0) {
      header( "Location: http://meusite.com/pt/" ) ;
      exit();
   } else if (strpos($lang, 'en') === 0) {
      header( "Location: http://meusite.com/en/" ) ;
      exit();
   } 
}
// Se nao achar nenhuma:
header( "Location: http://meusite.com/pt/" ) ;
exit();

?>

Не нужно pt-BR, ни en-US, (если не хотите разделить, например pt-BR, pt-PT, и так далее.

1. поиск в Duck Duck Go, работает.

Fonte:http://www.thefutureoftheweb.com/blog/use-accept-language-header

 4
Author: Bacco, 2014-06-30 05:11:09