Автор Тема: Как определить язык посетителя и отправить его на соответствующую страницу!??  (Прочитано 3829 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн advanced

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 22
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Кто знает как сделать скрипт, который устанавливается на главную страницу сайта и меняет выберает страницу в зависимости от вероятного языка посетителя. При первичном заходе на страницу анализируются: языки броузера (ACCEPT_LANGUAGE), с какой страницы пришел посетитель (HTTP_REFERER), язык поискового запроса (если он пришел с поисковика), в какой доменной зоне находится его компьютер (по REMOTE_ADDR).

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

Пожалуйста, помогите!!
Зарание благодарен! :)

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
Я так и не понял с чем у тебя проблемы. Ты в сабже задал вопрос а в тексте сообщения сам описал ответ на него.

В 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;
  }
}

это примерный код.
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн advanced

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 22
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Спасибо, но яхотел бы немного уточнить!
Я только начинаю изучать PHP, но мне срочно нужен этот скрипт!
Я понял так!
Скрипт определяет язык и перенаправляет в соответственную папку>>>index.php
А как он определяет язык!??? Вот этого я непойму!

Кстати:
if (in_array($lang, $langs) {
в этой строке выводит ошибку!
Я наверно что-то нетак создал! ??
Я создал папку в ней этот файл (index.php) и три папки (en,ru,de).
-----
Кстати, а если допусти человек из франции зайдёт, как отреагирует скрипт?
« Последнее редактирование: 08 Октября 2002, 03:33:56 от advanced »

Оффлайн Доктор

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 487
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Если не ошибаюсь, то языки в $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

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 22
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Вот что пишет:
--
Parse error: parse error in c:\\program files\\apache group\\apache\\htdocs\\lang\\index.php on line 5
--

5-ая СТРОКА
------
 if (in_array($lang, $langs) {
------
щяз попробую вторую версию!
А ты можешь описать немного скрипт, что он он делать?
Извени, за такие вопросы, я то осовное понимаю ну некоторые строки нет!
« Последнее редактирование: 08 Октября 2002, 04:17:54 от advanced »

Оффлайн GotZfild

  • Универсал
  • Старожил
  • ****
  • Сообщений: 456
  • +0/-0
  • 2
    • Просмотр профиля
    • http://myphp.dem.ru
Я бы вообще не стал разбивать $HTTP_ACCEPT_LANGUAGE, а брал бы только два первых символа.
После трех дней без программирования жизнь становится бессмысленной.

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
Цитировать
Я бы вообще не стал разбивать $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");
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн advanced

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 22
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Макс, извени, но пишет:
Parse error: parse error, unexpected \'}\' in /home/virtual/site89/fst/var/www/html/index.php on line 8

В этой строке
 $lng="de";
« Последнее редактирование: 08 Октября 2002, 21:44:11 от advanced »

Оффлайн Дмитрий Попов

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 264
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.programmist.spb.ru

$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");

В том смысле, что там лишняя "}" стояла (в пред. строке).
 За Родину! За Россию!
SendMail для любого хостинга.

Оффлайн advanced

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 22
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Дмитрий Попов, спасибо большое - вроде работает!

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28