ugrás a tartalomhoz

Országfelismerő script

Don Oden · 2007. Jan. 27. (Szo), 19.10
Üdv!
A jelenlegi problémám a következő: Ugyebár a honlapot amit csinálok, két nyelvűre szeretném, és a terv az hogy ha magyarországról jön látogató egyszerre a magyar tartalomra ugrik át, ha külföldről jön a látogatás akkor pedíg az angol tartalomra ugrik. Erre készítettem is egy scriptet de valahogy nem úgy működik mint ahogy én azt elképzeltem. Átléni átlép a hu mappába de az en szóval angol mappára sehogy nem akar. (Ezt külföldi ismerőssel teszteltük)

<?php
$lang = $temp[count($temp)-1];
$orszagok = array('hu', 'en');
if(IsSet($_GET['orszag']) && In_array($_GET['orszag'], $orszagok)) {
	$lang = $_GET['orszag'];
	$_SESSION['orszag'] = $_GET['orszag'];
	}
elseif(IsSet($_SESSION['orszag']) && In_array($_SESSION['orszag'], $orszagok)) {
	$lang = $_SESSION['orszag'];
	}
else {
	$lang = 'en';
	}
if($orszagok == 'en') {
	echo "<script language=\"JavaScript\">document.location.href = \"http://hu.hu/en\";</script>";
}
elseif($orszagok == 'hu') {
	echo "<script language=\"JavaScript\">document.location.href = \"http://hu.hu/hu\";</script>";
}
else {
	echo "<script language=\"JavaScript\">document.location.href = \"http://hu.hu/hu\";</script>";
} ?>
Én is töröm majd a fejem, de azért egy kis szikrát tehetnétek a fejembe.
Kösz bye
 
1

Autómata nyelvváltás

Max Logan · 2007. Jan. 27. (Szo), 19.24
Én a céges honlapnál találkoztam a problémával. Nemtom, hogy neked mire van szükséged. Az én megoldásom akkor jó, ha nem a lokalitás szerint szeretnéd a nyelvet váltani. Tehát nem az a fontos, hogy éppen, hol van a világban a user, hanem, hogy milyen nyelvű. Az egész script azon alapszik, hogy feltételezzük, hogy egy magyar user-nek magyar az elsődleges nyelve a böngészőjében, egy angol-nak angol, egy németnek német és így tovább.

<?php

 $referer = $_SERVER["HTTP_REFERER"];

 # Ha nyelválasztás történt a honlapon
 switch ( $_GET["change_lang"] )  
 {
    case "magyar" :
    {
      setcookie("site_lang", "magyar", mktime(0,0,0,1,1,2010));
      header("Location: $referer");
    }
    break;

    case "szlovak" :
    {
      setcookie("site_lang", "slovak", mktime(0,0,0,1,1,2010));
      header("Location: $referer");
    }
    break;

    case "cseh" :
    {
      setcookie("site_lang", "czeh", mktime(0,0,0,1,1,2010));
      header("Location: $referer");
    }
    break;
 }

 # Ha még nincsen nyelv COOKIE beállítva, akkor létrehozzuk a böngésző elsődleges nyelve alapján
 if ( !$_COOKIE["site_lang"] ) 
 {
    # Kinyerjük a böngészőben beállított elsődleges nyelvet
    $lang_id = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);

    # A böngésző elsődleges nyelve alapján COOKIE létrehozása és az oldal nyelvének beállítása
    switch ( $lang_id )
    {
      case "sk" : 
      { 
         setcookie("site_lang", "slovak", mktime(0,0,0,1,1,2010));
         $site_lang = "slovak"; 
      }
      break;

      case "cs" :
      {
         setcookie("site_lang", "czeh", mktime(0,0,0,1,1,2010));
         $site_lang = "czeh";
      }
      break;
     
      default :
      {
         setcookie("site_lang", "magyar", mktime(0,0,0,1,1,2010));
         $site_lang = "magyar";
      }
      break;
    }
 }
 else
 {
   $site_lang = $_COOKIE["site_lang"];
 }

?>
A megoldás lényege, hogy első látogatás alkalmával egy cookie-t hozunk létre ami tárolja a nyelvet. Ha a honlapon elhelyezett nyelvváltást használja a user, akkor a cookie értékét megváltoztatjuk és a REFERER-t felhasználva ugyanaz az oldal fog visszatöltődni, mint ahol a nyelvet változtatta.

A megoldás előnye, hogy kikapcsolt JS mellett is működik, valamint bárhol is váltson nyelvet a kedves látogató nem kell az oldal elejéről kezdenie a navigálást.
2

off

Szekeres Gergő · 2007. Jan. 28. (V), 22.01
kicsit off, de van valami módszer arra, hogy lekédezzük a felhasználó oprendszerének nyelvét, vagy esetleg a karakterkészletét?
3

nem az oprendszer számít

Táskai Zsolt · 2007. Jan. 29. (H), 10.11
...hanem az, hogy mit adott meg a felhasználó böngészőben, hogy milyen nyelv(ek)en szeretne olvasni (ez persze alapesetben azonos az oprendszer 'lokáljával', de nem a nyelvével). erre való a fent említett HTTP_ACCEPT_LANGUAGE, és hasonlóképp létezik HTTP_ACCEPT_CHARSET.