Редирект по странам по языку браузера

J
На сайте с 06.07.2011
Offline
169
1249

Подскажите пожалуйста, будет ли правильным такой код для редиректа по странам:


if($_SERVER['HTTP_ACCEPT_LANGUAGE'] = 'ru,ch,in,pk,bg,vn,lk,ua') {

header('Location: http://www.mysite.com'); }

Языки нужно указывать через запятую(ru,ch,in,pk,bg,vn,lk,ua) или как-то иначе?

Какой код нужно использовать что бы боты google не натыкались на редирект.

Mad_Man
На сайте с 10.11.2008
Offline
162
#1

Страну юзверя условно (среди прочих считаем искомой первую в списке) можно получить следующим образом:

public static function lang()
{
return strtolower(substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2));
}

Список кодов стран можно найти на http://www.iana.org/assignments/language-subtag-registry/language-subtag-registry

Станислав
На сайте с 27.12.2009
Offline
258
#2

Я этим не разу не занимался, но данный код работать не будет.

Вам нужно создать массив из ru,ch,in,pk,bg,vn,lk,ua и привязать к ним URL

Ну к примеру

$array = array("ru" => "domen.ru", "au" => "domen.ua");

Затем делаем поиск


$lang = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
$url = $array[$lang]; // Выведет домен, а дальше уже делать редирект

А вобще вот что нашел http://habrahabr.ru/post/159129/

Мы там, где рады нас видеть.
Mad_Man
На сайте с 10.11.2008
Offline
162
#3
Ms-Dred:
$lang = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
$url = $array[$lang]; // Выведет домен, а дальше уже делать редирект

Курите матчасть.

J
На сайте с 06.07.2011
Offline
169
#4
Ms-Dred:
Я этим не разу не занимался, но данный код работать не будет.
Вам нужно создать массив из ru,ch,in,pk,bg,vn,lk,ua и привязать к ним URL
Ну к примеру
$array = array("ru" => "domen.ru", "au" => "domen.ua");

Затем делаем поиск

$lang = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
$url = $array[$lang]; // Выведет домен, а дальше уже делать редирект


А вобще вот что нашел http://habrahabr.ru/post/159129/

Может есть у кого-нибудь рабочий код? Нашёл этот:

<?

$lang = strtolower(substr($HTTP_ACCEPT_LANGUAGE,0,2));
$array = array("zh", "ru", "kr", "pl", "ar", "et", "hr", "ja", "ko", "az", "uk", "hy", "be", "kk", "kz");
if(isset(array_search($lang,$array))) header("Location: http://domain.com/hui.html");
?>

но он не работает (

---------- Post added 09-01-2015 at 18:53 ----------

Нашёл готовое решение:

<?php

$lc = ""; // Initialize the language code variable
// Check to see that the global language server variable isset()
// If it is set, we cut the first two characters from that string
if(isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])){
$lc = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
}
// Now we simply evaluate that variable to detect specific languages
if($lc == "fr"){
header("location: http://domain.com");
exit();
} else if($lc == "de"){
header("location: http://domain.com");
exit();
}
?>
HiNeX
На сайте с 12.12.2011
Offline
24
#5

Есть более верный вариант:


$lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);

switch ($lang) {
case 'ru':
header('location: http://123.ru');
break;

case 'ua':
header('location: http://123.ua');
break;

default:
header('location: http://123.com'); // Действие если язык не определен
break;
}

exit;
J
На сайте с 06.07.2011
Offline
169
#6
HiNeX:
Есть более верный вариант:

$lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);

switch ($lang) {
case 'ru':
header('location: http://123.ru');
break;

case 'ua':
header('location: http://123.ua');
break;

default:
header('location: http://123.com'); // Действие если язык не определен
break;
}

exit;

Спасибо! :)

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий