Stránky s více jazyky za použití cookies

Teď se snažím vytvořit pro jednu malou firmu stránky, kde krom jazyka českého bude němčina a anglina (zatím to zkouším pouze u menu). Rozhodl jsem se, že použiju Cookies, resp. v odkazu na angličtinu bude parametr s hodnotou dejme tomu "lang=eng". Klikne se na odkaz, nahoře v souboru bude:

if($_GET["lang"] == "eng"){
setcookie("lang", "eng", time() + 2592000); //angličtina
}
elseif($_GET["lang"] == "de"){
setcookie("lang", "de", time() + 2592000); //němčina
}

To potom ověřím u odkazu v menu:

if($_REQUEST["lang"] == "eng"){
//a místo české položky menu podstrčím anglickou
}
elseif($_REQUEST["lang"] == "de"){
//a místo české položky menu podstrčím německou
}

No a problém nastává, že z češtiny se třeba do němčiny dostanu v pohodě, ale jakmile chci kliknout na angličtinu, tak se mi cookies nepřepíše a stále to je v němčině, jestli mě chápete. Ten $_REQUEST[] tam používám proto, poněvadž cookies jsou přístupné až při dalším načtení stránky, takže $_REQUEST[] v sobě zahrnuje jak metodu $_GET ze které přijde požadavek, tak i $_COOKIES[].

Díky za každou radu.
Petre zkus tohle >

je to muj stoletyskript a funguje s cookieskama uplne v pohode, bez REQUESTU a hned pri prvnim nacteni stranek

-------------------------------------------------------------------
nastav_jazyk.php

<?
setcookie("jazyk", $_GET['lang'], time()+3600*24*7*4);
header("location:index.php");
?>
-------------------------------------------------------------------



-------------------------------------------------------------------
index.php


<?

$lang = $_COOKIE['jazyk'];
switch ($lang) {
case "cz":
$menu = "menu/menu_cz.php";
break;

case "eng":
$menu = "menu/menu_eng.php";
break;

default:
$menu = "menu/menu_cz.php";

}

include $menu;

?>

-------------------------------------------------------------------



a nemam problem. Zkus to
Díky moc, nemám to tady ale doma na localu, snad to bude fachčit.
ale ten tvuj skript si zkusim , zajima me proc to nefunguje. Jestli ten REQUEST neco neprepisuje ..dam pak vedet
Takze, me to funguje. Staci poprve susenku ulozit a refreshnout a uz si muzu preklikavat jak chci a funguje.

Mozna to bude nastavenim PHP, nevim... Kazdopadne ten REQUEST se mi fakt moc nelibi.

Radsi to posilej pres externi stranku viz. muj priklad


Nekdo zkusenejsi Ti rekne v cem je ta prava chybka, ja se loucim :)
>> Staci poprve susenku ulozit a refreshnout

Jo, už mi to taky došlo, že se to musí refreshnout. Tu podmínku jsem pak upravil na:

if($_GET["lang"] == "eng" or $_COOKIES["lang"] == "eng"){
//a místo české položky menu podstrčím anglickou
}

.. a nic se refreshovat nemusí. Ale asi fakt použiju to tvoje.
<HTML>Ale pres cookies bych to nedelal... to je tak tezke pouzit session a o nic se nestarat?</HTML>
No, abych řekl pravdu Richarde, sessions zde na WZ používám v nejnutnějším případě od té doby jak psal Marek z Markova, viz:

http://www.webzdarma.cz/forum/read.php?f=2&i=23375&t=23180

O tom, že to tak je jsem se přesvědčil sám, když jsem sessions přestal používat za normálního běhu mých stránek a session_start() dával jen při práci v administraci. Ono každýho nepotěší, když klikne a před ním se objeví "bílá obloha" a většinou toho dotyčnýho nenapadne, aby zmáčknul F5 a radši stránky opustí. IMHO!
Richard:

Tak ti asi přeci dám jen za pravdu, teď jsem to zkoušel. Bílá stránka se sice krom Opery občas zobrazí jak ve FF tak v IE, ale snad to nějak překousnu.
<HTML>Ja na webu ktery mam tu na wz a ktery je opravdu nabity po strance php,sql,sablonovych systemu a kde se pouziva session na kazdem pozadavku jsem white screen nikdy nevidel ani v FF ani IE.
Nezda se ti divne ze session ktere pracuje na serveru dela to, ze prohlizec IE a FF nevyhodi zadne data ale opera ano? sakra jak to ten session dela, nebo si opera udela projistotu sama refresh? :))))
Tohle mi nekdo dokaze tehdy, pokud ve scriptu bude
<?
session_start();
echo "ahoj";
?>
a nic vic a ja pri refreshovani uvidim obcas white screen...
Kdybych tomu ale castecne veril udelam si na to program nebo script ktery ty refreshe provede za me a zaroven bude kontrolovat vystup stranky, ja tomu ale neverim</HTML>
Richard:

Na základě usuzování více lidí, že používají session_start() a white screen se jim objeví, což se stalo BTW i mně, tomu věřím dost, nehledě na to když jsem session_start() odstranil, jak popisuju výše, tak je to čtrnáct dní a white screen jsem nezaznamenal.
Asi tě nepřesvědčím, je divný, že to Opera nedělá. Třeba to bude opravdu nějakej bug prohlížeč(e|ů).
no me se ta bila stranka zacala objevovat prave ve chvili, kdy sem rozbeh prihlasovani pomoci session... tak ja nevim, jak je to s prohlizecema, taky tu sly reci ze to dela jeno pri ISO, coz je taky pekna blbost a prece tomu kdekdo veri...
ta stranka se bila zobrazi jenom obcas, takze je fakt tezky najit chybu....
nemoh bys prosim trosku naznacit jak se dela ta kontrola vystupu(jak si psal ze by sis udelal, kdybys tomu veril...) staci naznacit, ze bych to treba zkusil...
Jo, tak to by mě taky zajímalo.
<HTML>No myslel jsem to tak, ze budto bych udelal nejaky jednoduchy program v C++ nebo snadneji na locale pustil ve smycce fread a nacital URL te stranky ktera to dela s tim, ze bych kontroloval velikost nactenych dat... pokud by byla promenliva tedy jednou napr. 10000b a obcas jen 100b pak tedy lze usoudit ze chyba prohlizecu to zrejme neni a dle daneho kodu by se zjistilo co to dela.
Dejte mi adresu webu kde se tohle deje a muzeme to teda zkusit</HTML>
tak deje se to napriklad na cadici.wz.cz/phorum, muzes se i prihlasit jako test, heslo test, mimo forum cookie_start nepouzivam
ale ja tam mam este asi i nakou dalsi chybu, protoze mi pri pravidelnym reloadu casem vyprsi sesion, coz by nemelo :-(
jinak nevim na jakym lokale to chces zkouset, ale na mym lokale se mi to myslim este nestalo
ja se priznam, ze se tej chybe moc nevenuju...
<HTML>Takze, provedl jsem 20 spojeni konkretne na: http://cadici.wz.cz/phorum/read.php?id=1378&view=all&style=0

a vysledek je nasledujici:
8460, 8460, 8460, 8460, 0, 8460, 8460, 8460, 4920, 8460, 8460, 8460, 8460, 8460, 8460, 8460, 8460, 5540, 0, 7840,

za 18,42246 sekund

kde skutecna velikost stranky je 8460b a jak je videt, server bohuzel ukoncuje spojeni nekdy driv nez odesle vsechno, nekdy odpovi ale neposle nic to je ta 0b a to je ono co hledame...

pro adresu: http://blahapet.wz.cz
to vypada nasledovne:

8607, 7147, 10067, 8607, 8607, 8607, 8607, 8607, 8607, 8607, 7147, 8607, 8607, 8607, 8607, 8607, 8607, 8607, 8519, 8607

coz je podstatne lepsi...
kdo z vas dvou pouziva session nebo mod_rewrite?</HTML>
hezky, diky za tvuj cas
priznavam oboji, mod_rewrite jenom trosku, tohle je muj .htacces
ErrorDocument 404 /index.php?jm=404
RewriteEngine on
RewriteRule ^nastenka\.html$ /index.php?jm=nastenka [L,QSA]
mam zkusit vytvorit soubor bez cookiestart, abys to moh otestovat bez ni?
ty dve radky z .htacces klidne smaznu, jestili to pomuze
No, přiznám se, v poslední době to moc nedělá. Viz fiestaclub.wz.cz, třeba forum.php.