ugrás a tartalomhoz

url átirányítás probléma

sitebuilder · 2010. Május. 10. (H), 14.00
Hello

4 nyelvválasztási lehetőség van: magyar, angol, német, spanyol
Mindegyik nyelvhez tartozik egy aldomain: pl angol -> angol.domain.hu stb...
.htaccesben be van állítva, hogy melyik mappából töltse be az adott nyelvnek megfelelően: nyelvvaltas/hu ....
Egy php fájlban swich elágazással meg van adva, hogy ha az angol nyelv van kiválasztva akkor irányítsa át a megfelelő aldomainra
case "en":

header("location: http://www.angol.domain.hu/fooldal");
exit;
break;

ez jól is működik: a kiválasztott nyelvnél átirányítja a megfelelő aldomainra, de nem a megfelelő nyelvet jeleníti meg.
Még egyszer kattintva a kívánt nyelvre akkor már jól jelenik meg.
Mitől van ez a probléma? Hogyan lehetne elérni, hogy az első kattintásnál a megfelelő nyelv jelenjen meg a hozzá tartozó aldomain-el?
 
1

Pontosan mi van a

Ifju · 2010. Május. 10. (H), 14.17
Pontosan mi van a .htaccess-ben?
2

RewriteRule

sitebuilder · 2010. Május. 10. (H), 14.33
RewriteRule ^nyelvvaltas/([a-z]+)$ /set_lang.php?lang=$1 [NC]
5

Ha jól értem, amikor nyelvet

Ifju · 2010. Május. 10. (H), 15.02
Ha jól értem, amikor nyelvet akarsz váltani, akkor a nyelvvaltas/$nyelvazonosító URL-re irányítod át a usert, amit az apache lefordít arra, hogy meghívja a /set_lang.php-t a megadott nyelvazonosító paraméterrel.

A set_lang.php-ban megtörténik a nyelv tényleges beállítása a session-be, vagy csak az al-domainre átirányítás van benne, ahol az első oldalmegjelenítés után történik meg a nyelvbeállítás?
6

Kb így van, a

sitebuilder · 2010. Május. 10. (H), 15.41
Kb így van, a set_lang.php-ban van átirányítva.
csak az a probléma, hogy ha kattintok az adott nyelvre, nem azon a nyelven jeleníti meg.

magyar, angol, német, spanyol ilyen sorrendben vannak és ha kiválasztom a németet, akkor nem az jelenik meg

itt a forrás

include_once($_SERVER['DOCUMENT_ROOT'].'/includes/site_config.inc.php');
if( isset( $_GET['lang'] )) {
$_SESSION['site_lang'] = $_GET['lang'];
}

switch ($_GET['lang']) {
case "hu":


header("location: http://www.domain.hu/fooldal");
exit;
break;
case "en":

header("location: http://www.angol.domain.hu/fooldal");
exit;
break;
case "de":


header("location: http://www.nemet.domain.hu/fooldal");
exit;
break;
case "es":


header("location: http://www.spanyol.domain.hu/fooldal");
exit;
break;
default:
header("location: http://www.domain.hu/fooldal");
}
7

A megjelenítés nyelve

Ifju · 2010. Május. 10. (H), 16.32
A megjelenítés nyelve jelenleg első körben a session változótól függ, és nem a domaintől. Ezen érdemes lenne változtatni: a domain legyen az irányadó, hogy mi a megjelenítés nyelve, és akkor az átirányítás után biztosan domain-helyesen fog megjelenni a nyelv. Mivel azt akarod elérni, hogy a megfelelő domainen jelenjen meg a megfelelő nyelv, ezért a domainhez érdemes kötni a nyelvet, és nem egy session változóhoz.

Tehát, ha pl valaki az angol.domain.hu oldalt nézi, akkor neki a frontcontroller (pl index.php)állítsa be explicit az angol nyelvet a session-be, és akkor ki is hagyhatod a set_lang.php-t.
8

Kicsit leírnád ezt

sitebuilder · 2010. Május. 11. (K), 08.07
Kicsit leírnád ezt pontosabban, kiegészítve forráskódrészletekkel.

Tehát, ha pl valaki az angol.domain.hu oldalt nézi, akkor neki a frontcontroller (pl index.php)állítsa be explicit az angol nyelvet a session-be, és akkor ki is hagyhatod a set_lang.php-t.

Köszönöm
9

Arról lenne szó, hogy nem a

Ifju · 2010. Május. 11. (K), 09.31
Arról lenne szó, hogy nem a set_lang.php lenne a felelős a nyelvi beállításért, hanem ha valaki az angol.domain.hu/fooldal linket nézi, akkor akármilyen nyelv is van beállítva neki, akkor is angolul fog megjelenni a tartalom.

Ezen logika mentén, ha a spanyol.domain.hu/fooldal linket nézi, akkor meg spanyolul.

Amikor meg valaki nyelvet akar váltani, akkor csak annyi dolgod van, hogy a másik nyelvnek megfelelő aldomain-re irányítod a usert.

Ezzel a megoldással nyugodtan elhagyhatod a SESSION-ben tárolt nyelvi beállítást, vagy csak arra érdemes használni, hogy a megfelelő aldomain-re átirányítsd.

Pl az aldomain szerinti nyelvi beállításra:
$domain_explode = explode('.', str_replace('www.', '', $_SERVER['HTTP_HOST']); // leszedjuk a domain elejerol a www.-t es a visszakapott stringet tombbe tesszuk a .-k menten szetvagva

$aldomain = $domain_explode[0]; // az aldomaint kivalasztjuk a tombbol

switch($aldomain)
{
  default:
  case 'domain': // ez akkor lesz, ha valaki a www.domain.hu-t vagy a domain.hu-t nezi
    $_SESSION['site_lang'] = 'hu';
    break;
  case 'angol':
    $_SESSION['site_lang'] = 'en';
    break;
  case 'spanyol':
    $_SESSION['site_lang'] = 'es';
    break;
}


A lényeg igazából az lenne, hogy ne a SESSION-től függjön a megjelenítés nyelve, hanem az aldomaintől.
11

helyezzem el az index.php-ban

sitebuilder · 2010. Május. 11. (K), 10.53
helyezzem el az index.php-ban az általad leírt kódot?
különben úgy gondoltam, hogy készítek egy másik session-t az index.php-ban és megvizsgálom, hogy mi az érteke, milyen nyelvet választott a felhasználó és még egyszer átirányítom a nyelvnek megfelelő domainra. Ez úgy működne mintha még egyszer kattintana (pont ez a probléma, ha kattint a nyelvre jó domainra irányítja, csak nem jó a hozzá tartozó tartalom és ha még egyszer kattintok akkor már igen), de a akkor már nem a felhasználó kattint.
13

Isten ments, hogy ezt a kódot

Ifju · 2010. Május. 11. (K), 11.27
Isten ments, hogy ezt a kódot helyezd a saját kódodba, csak érzékeltetni szerettem volna a koncepciót.

Persze valami hasonlót kell majd írnod, hogy megvalósítsd azt a követelményt, hogy az aldomainnek megfelelő nyelven jelenjen meg a tartalom. A lényeg az, hogy a követelmény az aldomaintől teszi függővé a nyelvet, ezért a kódban is érdemes ehhez igazodni, mert kevesebb hibalehetőséget rejt ez magában.
3

Kezelés

Poetro · 2010. Május. 10. (H), 14.36
Nem lehet, hogy nem jó helyen kezeled a tartalom megjelenítését X nyelven? Az nem derült ki, hogy jeleníted meg X nyelven a tartalmat, mert valószínűleg ott van a probléma.
4

Egy saját fejlesztésű cms

sitebuilder · 2010. Május. 10. (H), 14.46
Egy saját fejlesztésű cms kezeli a tartalmat
10

session

Poetro · 2010. Május. 11. (K), 10.44
Amennyiben nem állítod át a cookie_domain-t, akkor a session változó csak az adott aldomainen lesz érvényben, mivel a cookie arra vonatkozik. Ennek következtében a $_SESSION['site_lang'] nem lesz elérhető az átirányított domainen, ami okozza, hogy kétszer kell megtenned a nyelvváltást.
Első körben beállítódik az éppen aktuális domainre, majd átirányítás után ugye nem látszik a session változó, majd ha újra kattintasz a nyelvváltásra, akkor már a jó domainre állítja be a változót.
Amennyiben a session változókat el akarod érni az összes aldomainen, akkor a cookie domain-t vagy az Apache-ban, vagy .htaccess-ben, vagy ini_set-tel be kell állítanod.
ini_set('session.cookie_domain', '.domain.hu');
# PHP 4, Apache 2.
<IfModule sapi_apache2.c>
php_value session.cookie_domain .domain.hu
</IfModule>
# PHP 4, Apache 1.
<IfModule mod_php4.c>
php_value session.cookie_domain .domain.hu
</IfModule>
# PHP 5, Apache 1 and 2.
<IfModule mod_php5.c>
php_value session.cookie_domain .domain.hu
</IfModule>
12

.htaccesben elhelyeztem az

sitebuilder · 2010. Május. 11. (K), 11.10
.htaccesben elhelyeztem az általad leírt részt, de nem változott semmi, illetve elhelyeztem a ini_set('session.cookie_domain', '.domain.hu');

sort is a forrásban.( ezt az ini_set-et nem ismerem, jó helyre raktam?)