Viac jazykova stranka
-
lamborghini
Light Expert
- Príspevky: 56
- Registrovaný: 07 jún 2008, 14:41
Viac jazykova stranka
Zdravim...
Rad by som vedel ci niekto vie pomoct stym ked chcem spravit stranku v dvoch jazykoch, no nechcem aby sa menila url stranky... takze... www.stranka.com (bude napr po svk)
a ked si prekliknem tak stranka bude po anglicky, no stale bude www.stranka.com
Vie niekto??? moc by to pomohlo. dik
Rad by som vedel ci niekto vie pomoct stym ked chcem spravit stranku v dvoch jazykoch, no nechcem aby sa menila url stranky... takze... www.stranka.com (bude napr po svk)
a ked si prekliknem tak stranka bude po anglicky, no stale bude www.stranka.com
Vie niekto??? moc by to pomohlo. dik
-
audiotrack
VIP
- Príspevky: 25958
- Registrovaný: 09 sep 2005, 18:39
- Kontaktovať používateľa:
zmení sa hodnota v sessions, napríklad $_SESSION["lang"] = "slovencina" a potom includneš príslušný súbor (include("lang_dir/"+$_SESSION["lang"]+"/.php") v ktorom budú jednotlivé reťazce (napríklad ako pole). Potom všade kde ideš niečo vypisovať vypisuješ z toho pola, teda $lang["nieco"] alebo $lang["nieco_ine"]
ak si nepochopil tak rozpíšem podrobnejšie
ak si nepochopil tak rozpíšem podrobnejšie
-
lamborghini
Light Expert
- Príspevky: 56
- Registrovaný: 07 jún 2008, 14:41
-
audiotrack
VIP
- Príspevky: 25958
- Registrovaný: 09 sep 2005, 18:39
- Kontaktovať používateľa:
jazykové súbory by vypadali asi takto:
slovak.php:
english.php:
nastavovanie jazyku:
vypisovanie tohto jazyku na stránke:
slovak.php:
Kód: Vybrať všetko
<?php
$lang = array(
"s" => "slnko";
"d" => "pes";
"h" => "dom";
);
?>Kód: Vybrať všetko
<?php
$lang = array(
"s" => "sun";
"d" => "dog";
"h" => "home";
);
?>Kód: Vybrať všetko
//z get parametra (kliknuté na ikonku) si uložím jazyk do session
$_SESSION["lang"] = $_GET["lang"];
Kód: Vybrať všetko
//najprv includnem jazykový súbor
include($_SESSION["lang"]);
//vypisujem už podľa jazyku, vložilo sa mi správne pole $lang
echo $lang["d"];
echo $lang["h"];
echo $lang["s"];
-
JanJanuska
Medium Expert
- Príspevky: 101
- Registrovaný: 13 mar 2007, 21:40
- Bydlisko: Malacky, Praha
- Kontaktovať používateľa:
-
lamborghini
Light Expert
- Príspevky: 56
- Registrovaný: 07 jún 2008, 14:41
To je pekne, ze napises, ze je to najhorsie riesenie ake moze spravit v danej situacii ale on sa pyta ako to ma spravit a ked uz reagujes napis aspon ten tvoj lepsi sposob.JanJanuska napísal:![]()
![]()
![]()
V žiadnom prípade nič také nerob. Dve jazykové verzie, resp. rozdielny obsah na rovnakej URL je to najhoršie riešenie, aké môžeš v danej situácii urobiť.
Podla mna podla poziadaviek ake chcel mu audiotrack dal dobre riesenie.
-
JanJanuska
Medium Expert
- Príspevky: 101
- Registrovaný: 13 mar 2007, 21:40
- Bydlisko: Malacky, Praha
- Kontaktovať používateľa:
V noci som si prečítal len prvý príspevok a napísal som to, aby autor neurobil čo zamýšľa predtým, než niekto napíše, že sa to tak nemá robiť.Snacker napísal:To je pekne, ze napises, ze je to najhorsie riesenie ake moze spravit v danej situacii ale on sa pyta ako to ma spravit a ked uz reagujes napis aspon ten tvoj lepsi sposob.
Podla mna podla poziadaviek ake chcel mu audiotrack dal dobre riesenie.
Ak chceš jeden súbor s kódom a dva jazyky, najjednoduchšie to urobíš predávaním GET premenných v URL adrese, napr:lamborghini napísal:tak potom ako to mam spravit?
lebo ja toto iste potrebujem spravit aj pri tom ked sa meni poradie veci.. povedzme ze mam list veci a ked ich niekto chce zmenit poradnie podla napr velkosti, ceny a pod tiez sa nemoze menit link...
ci to sa robi zas inak?
www.stranka.com/index.php?jazyk=sk (prípadne iba www.stranka.com)
www.stranka.com/index.php?jazyk=en (anglicka verzia)
To urobíš takmer rovnako ako písal Audiotrack. Vytvoríš si tie súbory english.php a slovak.php. Do index.php zadáš:
Kód: Vybrať všetko
if ((isset($_GET["lang"]) && $_GET["lang"] == "sk") || !isset($_GET["lang"])){ // "lang" existuje a ma hodnotu "sk" alebo lang neexistuje
if (File_Exists("slovak.php")) { //overenie existencie suboru
include("slovak.php"); // ak existuje, vlozi slovencinu
}
}
if (isset($_GET["lang"]) && $_GET["lang"] == "en"){ // lang existuje a ma hodnotu "en"
if (File_Exists("english.php")) {
include("english.php"); // vlozi anglictinu
}
}
www.stranka.com/melony.php?zoradenie=farba (zoradenie melónov podľa farby)
www.stranka.com/melony.php?zoradenie=velkost (podľa veľkosti)
Kód: Vybrať všetko
if ((isset($_GET["lang"]) && $_GET["lang"] == "sk") || !isset($_GET["lang"])){ // "lang" existuje a ma hodnotu "sk" alebo lang neexistuje
if (File_Exists("slovak.php")) { //overenie existencie suboru
include("slovak.php"); // ak existuje, vlozi slovencinu
}
}
if (isset($_GET["lang"]) && $_GET["lang"] == "en"){ // lang existuje a ma hodnotu "en"
if (File_Exists("english.php")) {
include("english.php"); // vlozi anglictinu
}
}Ved predsa najprv overim ci extistuje superglobalna premenna $_GET["lang"]. Ak ano dalej sa rozhodujem medzi jazykmi podla hodnoty ulozenej v premennej aj nie vyberiem defaultnu hodnotu. Dalej tam nemas ani miesto pre stranku ked je v premennej hodnota, ktora by sa tam nemala nachadzat. Tebe sa kod strasne kopiruje a mnozia sa tam veci. A naco tam mas File_Exists, ved je to uplne zbytocne.
Ja si ten kod predstavujem nejak takto :
Kód: Vybrať všetko
<?php
if(isset($_GET['lang'])) {
switch($_GET['lang']) {
case "sk": {
$id = "slovak.php";
break;
}
case "cz": {
$id = "czech.php";
break;
}
}
} else {
$id = "slovak.php";
}
?>-
JanJanuska
Medium Expert
- Príspevky: 101
- Registrovaný: 13 mar 2007, 21:40
- Bydlisko: Malacky, Praha
- Kontaktovať používateľa:
Načo? Kvôli zrozumiteľnosti. S efektivitou to nemá absolútne nič spoločné.Snacker napísal:Naco toto cele takto robis? Nema to vobec dobru strukturu ten kod a neni ani efektivny.
Presne tak. Neurobí to nič, veď načo ajSnacker napísal:Dalej tam nemas ani miesto pre stranku ked je v premennej hodnota, ktora by sa tam nemala nachadzat.
Nie je to nevyhnutné, ale ani zbytočné. Skrátka som "obalil" warning o existencii súboru.Snacker napísal:A naco tam mas File_Exists, ved je to uplne zbytocne.
A opakujem, kód som písal polopatisticky, aj keď som to mohol napísať jednoduchšie, no chcel som, aby videl súvislosti. Mohlo sa rovno napísať:
Kód: Vybrať všetko
if ($_GET["lang"] == "en")
include("english.php");
else
include("slovak.php");
Praveze su tam nezmyselne veci a tie nie su zrozumitelne. Efektivne navyky su tie najlepsie na naucenie sa.Načo? Kvôli zrozumiteľnosti. S efektivitou to nemá absolútne nič spoločné.
Este stale to include mozes umlcatNie je to nevyhnutné, ale ani zbytočné. Skrátka som "obalil" warning o existencii súboru.
Nejde o polopatickost ale zly, neefektivny kod, kde zbytocne veci duplikujes. Ale to tu asi malo kto vie pochopitA opakujem, kód som písal polopatisticky, aj keď som to mohol napísať jednoduchšie,
-
JanJanuska
Medium Expert
- Príspevky: 101
- Registrovaný: 13 mar 2007, 21:40
- Bydlisko: Malacky, Praha
- Kontaktovať používateľa:
Zlý?Snacker napísal:Nejde o polopatickost ale zly, neefektivny kod, kde zbytocne veci duplikujes. Ale to tu asi malo kto vie pochopit
Vidíš tam logické chyby, syntaktické chyby alebo deravý kód?
Keď tak amatérsky, no predpokladám, že autor je amatér a lepšie porozumie takému kódu.
Nefektívny?
Tu sa nehráme na efektivitu. V PHP kóde je to úplne zanedbateľná strata. Ak by záležalo na takýchto miniatúrnych veciach, nepoužíva sa PHP.
Áno zbytočne to duplikujem, použil som 2x rovnaké overenie. Mal som to obaliť do jednej veľkej podmienky, odpustte mi prosím, môže to mať zásadný vplyv ma beh celej aplikácie
Naozaj mi je smiešne, ako sa chytáš za maličkosti a riešiš tu môj z hlavy narýchlo napísaný kód. Tento off topic autora len zmetie. Radšej keby si mu napísal nejaké jednoduchšie a ľahšie pochopiteľné riešenie.
Pretože v tom tvojom kóde je taký zmätok, že ho len popletieš. Mútiť mu hlavu s nejakým error.php, čo nemá hlavu ani pätu a komplikovať to case-om, ktorému autor možno ani nerozumie a ešte predávať názov súboru cez premennú $id...
Opakujem to naposledy: Ide tu o to, aby autor pochopil princíp fungovania viacerých jazykových verzií. Nie o to, aby sme sa tu predháňali, kto napíše "lepších" 5 riadkov kódu, na ktorých v konečnom dôsledku absolútne nezáleží a na vysvetlenie daného problému je to navyše absolútne zbytočné.
//autoeditácia príspevku ( 04 Dec 2009, 11:03 )
Ak sa používa jeden zdrojový súbor na obe jazykové verzie, tak áno.ppt napísal:JanJanuska:
a co sa stane v pripade, ze premennu GET['lang'] nebudem nastavovat a chcem na inych podstrankach zobrazovat stranku v anglickom jazyku? Budem musiet na kazdy jeden odkaz nastavovat GET?uuuuffff
Inak by boli obe verzie na rovnakej URL adrese a ako som písal hneď na začiatku, to je najväčšia chyba, akej sa dá dopustiť.
Je to tak riešené takmer všade, len v "zamaskovanej" forme.
URL adresa máva tvar: www.stranka.com/en/, www.stranka.com/cz/ a podobne... Prípadne www.en.stranka.com, atď...
Tu prikladam nejaku tu verziu s cookies
Kód: Vybrať všetko
$jazyky = array("sk", "cz", "en"); // prvy je default
if (isset($_GET["jazyk"])) {
if (in_array($_GET["jazyk"], $jazyky)) {
require $_GET["jazyk"].".php";
setcookie("jazyk", $_GET["jazyk"], time()+3600*24*30, '/'); // cookie expiruje za 1 mesiac
} else {
// Tu mozes na to upozornit
}
} else if(isset($_COOKIE["jazyk"])) {
if (in_array($_COOKIE["jazyk"], $jazyky)) {
require $_COOKIE["jazyk"].".php";
setcookie("jazyk", $_COOKIE["jazyk"], time()+3600*24*30, '/'); // cookie expiruje za 1 mesiac
} else {
// Tu mozes na to upozornit
}
} else {
require $jazyky[0].".php";
setcookie("jazyk", $jazyky[0], time()+3600*24*30*12, '/');
}