Forum Webscript.Ru

Программирование => PHP => Тема начата: advanced от 08 Октября 2002, 01:48:21

Название: Как определить язык посетителя и отправить его на соответствующую страницу!??
Отправлено: advanced от 08 Октября 2002, 01:48:21
Кто знает как сделать скрипт, который устанавливается на главную страницу сайта и меняет выберает страницу в зависимости от вероятного языка посетителя. При первичном заходе на страницу анализируются: языки броузера (ACCEPT_LANGUAGE), с какой страницы пришел посетитель (HTTP_REFERER), язык поискового запроса (если он пришел с поисковика), в какой доменной зоне находится его компьютер (по REMOTE_ADDR).

Пример:
Существует три папки(eng/rus/ger), как вы поняли каждая папка относится к своему языку!
Вот допустим заходит посетитель, а скрипт считывает его язык по умолчанию, доустим это английский и отправляет пользователя вот сюда eng/index.html

Пожалуйста, помогите!!
Зарание благодарен! :)
Название: Как определить язык посетителя и отправить его на соответствующую страницу!??
Отправлено: Макс от 08 Октября 2002, 02:32:04
Я так и не понял с чем у тебя проблемы. Ты в сабже задал вопрос а в тексте сообщения сам описал ответ на него.

В php есть $HTTP_ACCEPT_LANGUAGE
Правда оно может принимать значение типа en-us (насколько я помню)
То есть нужно это значение разбивать на языки и каждое проверять.
Только папки назови по нормальному:

$langs = array("en","ru","de");
$cur_langs = explode("-",$HTTP_ACCEPT_LANGUAGE);
foreach ($cur_langs as $lang) {
  if (in_array($lang, $langs) {
    header("Location: ./".$lang."/index.php");
    exit;
  }
}
это примерный код.
Название: Как определить язык посетителя и отправить его на соответствующую страницу!??
Отправлено: advanced от 08 Октября 2002, 02:39:43
Спасибо, но яхотел бы немного уточнить!
Я только начинаю изучать PHP, но мне срочно нужен этот скрипт!
Я понял так!
Скрипт определяет язык и перенаправляет в соответственную папку>>>index.php
А как он определяет язык!??? Вот этого я непойму!

Кстати:
if (in_array($lang, $langs) {
в этой строке выводит ошибку!
Я наверно что-то нетак создал! ??
Я создал папку в ней этот файл (index.php) и три папки (en,ru,de).
-----
Кстати, а если допусти человек из франции зайдёт, как отреагирует скрипт?
Название: Как определить язык посетителя и отправить его на соответствующую страницу!??
Отправлено: Доктор от 08 Октября 2002, 03:32:18
Если не ошибаюсь, то языки в $HTTP_ACCEPT_LANGUAGE идут через запятую... Но проверить не могу, так как у меня там только "ru"
С ошибкой - что пишет?

Вообще, сделай так:

$langs = array("en","ru","de");
$default_lang="ru";
$cur_langs = explode("-",$HTTP_ACCEPT_LANGUAGE);

if (is_array($cur_langs))
  foreach ($cur_langs as $lang)
    if (in_array($lang, $langs) {
      header("Location: ./".$lang."/index.php");
      exit;
    }

header("Location: ./".$default_lang."/index.php");
Название: Как определить язык посетителя и отправить его на соответствующую страницу!??
Отправлено: advanced от 08 Октября 2002, 03:37:11
Вот что пишет:
--
Parse error: parse error in c:\\program files\\apache group\\apache\\htdocs\\lang\\index.php on line 5
--

5-ая СТРОКА
------
 if (in_array($lang, $langs) {
------
щяз попробую вторую версию!
А ты можешь описать немного скрипт, что он он делать?
Извени, за такие вопросы, я то осовное понимаю ну некоторые строки нет!
Название: Как определить язык посетителя и отправить его на соответствующую страницу!??
Отправлено: GotZfild от 08 Октября 2002, 09:34:39
Я бы вообще не стал разбивать $HTTP_ACCEPT_LANGUAGE, а брал бы только два первых символа.
Название: Как определить язык посетителя и отправить его на соответствующую страницу!??
Отправлено: Макс от 08 Октября 2002, 14:55:14
Цитировать
Я бы вообще не стал разбивать $HTTP_ACCEPT_LANGUAGE, а брал бы только два первых символа.
ну а вдруг первые 2 символа - язык, который не подерживается сайтом?


Доктор да, только что посмотрел NN через запятую возвращает en,ru .Хотя помоему я все-таки видел en-us (год назад, иогу ошибаться). en-us - это американский английски и возможно так разделяются "родственные" языки (типа "en-us","en-gb", "en-au"). А может я вообще что-то перепутал.
Тогда можно седлать скрипт примерно так:

$lang = $_SERVER[\'HTTP_ACCEPT_LANGUAGE\'];
if (stristr($lang,"ru")){
$lng="ru";
} elseif (stristr($lang,"en")){
$lng="en";
}
} elseif (stristr($lang,"de")){
$lng="de";
} else{
$lng="en"; // язык по умолчанию
}
header("Location: ./".$lng."/index.php");
Название: Как определить язык посетителя и отправить его на соответствующую страницу!??
Отправлено: advanced от 08 Октября 2002, 21:38:34
Макс, извени, но пишет:
Parse error: parse error, unexpected \'}\' in /home/virtual/site89/fst/var/www/html/index.php on line 8

В этой строке
 $lng="de";
Название: Как определить язык посетителя и отправить его на соответствующую страницу!??
Отправлено: Дмитрий Попов от 08 Октября 2002, 21:47:56

$lang = $_SERVER[\'HTTP_ACCEPT_LANGUAGE\'];
if (stristr($lang,"ru")){
$lng="ru";
} elseif (stristr($lang,"en")){
$lng="en";
}
elseif (stristr($lang,"de")){
$lng="de";
} else{
$lng="en"; // язык по умолчанию
}
header("Location: ./".$lng."/index.php");

В том смысле, что там лишняя "}" стояла (в пред. строке).
Название: Как определить язык посетителя и отправить его на соответствующую страницу!??
Отправлено: advanced от 08 Октября 2002, 22:12:36
Дмитрий Попов, спасибо большое - вроде работает!