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

Автоматическое определение языка и перенаправление пользователя

Я делаю свой собственный веб-сайт, и мне удалось написать код, который позволяет пользователю перейти к языковой версии в соответствии с языком браузера. Вот script:

<?php
  if ($_SERVER["HTTP_ACCEPT_LANGUAGE"] == "sv")
    header("location: index.php");
  if ($_SERVER["HTTP_ACCEPT_LANGUAGE"] == "pt")
    header("location: pt/index.php");
  else 
    header("location: en/index.html");
?>

Я поставил это в index.php перед. Кажется, он работает, потому что я не в англоговорящей стране, но мой браузер на английском языке, и меня перенаправляют на английскую версию.

Это правильно? Есть ли лучший/более чистый способ сделать это?

4b9b3361

Ответ 1

Ну, я столкнулся с некоторыми проблемами с моим кодом, что неудивительно из-за того, что я не эксперт по PHP. Поэтому я продолжал искать возможное решение, и я нашел следующий код на другом сайте:

<?php
    // Initialize the language code variable
$lc = ""; 
    // 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: index_french.php");
    exit();
} else if($lc == "de"){
    header("location: index_german.php");
    exit();
}
else{ // don't forget the default case if $lc is empty
    header("location: index_english.php");
    exit();
}
?>

Это отлично работало! У меня осталась проблема. Невозможно изменить язык, даже с прямыми ссылками на другой язык, потому что, как только страница загружается, блок php перенаправляет меня на язык borwser. Это может быть проблемой, если вы живете в другой стране и имеете, например, шведский язык как родной язык, но у вас есть ваш браузер на английском языке, потому что вы купили свой компьютер в Великобритании.

Итак, мое решение для этой проблемы состояло в том, чтобы создавать папки с дублирующейся версией для каждого языка (даже для основного языка) без этого php-кода в index.html(и, следовательно, не index.php). Итак, теперь мой сайт автоматически обнаруживает язык, и пользователь также имеет возможность изменить его вручную в случае необходимости!

Надеюсь, что это поможет кому-то другому с той же проблемой!

Ответ 2

PHP 5.3.0+ поставляется с locale_accept_from_http(), который получает предпочтительный язык из заголовка Accept-Language.

Вы всегда должны использовать этот метод для самозаписываемого метода, поскольку поле заголовка более сложное, чем можно было бы подумать. (Это список взвешенных настроек.)

Вы должны получить такой язык:

$lang = locale_accept_from_http($_SERVER['HTTP_ACCEPT_LANGUAGE']);

Но даже тогда у вас будет не только en для каждого английского пользователя, а es для испанских. Это может стать намного сложнее, а такие вещи, как es-ES и es-US, являются стандартными.

Это означает, что вы должны перебирать список регулярных выражений, которые вы пытаетесь, и определить язык страницы таким образом. См. PHP-I18N для примера.

Ответ 3

Думаю, твоя идея замечательная. Может помочь вам кратчайший код:

$lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
header("location: ".$lang."/index.php");

Ответ 4

Это должно работать нормально. Вы также можете использовать http_negotiate_language и обсуждать здесь

Ответ 5

Самый полезный этот код

    $lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
if(file_exists('system/lang/'.$lang.'.php'))
{
    include('system/lang/'.$lang.'.php');
}else{
    include('system/lang/en.php'); //set default lang here if not exists translated language in ur system
    }