Viac jazykova stranka

Programovacie jazyky, rady, poradňa...
lamborghini
Light Expert
Light Expert
Príspevky: 56
Registrovaný: 07 jún 2008, 14:41

Viac jazykova stranka

Príspevok od používateľa lamborghini »

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
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

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
lamborghini
Light Expert
Light Expert
Príspevky: 56
Registrovaný: 07 jún 2008, 14:41

Príspevok od používateľa lamborghini »

ehh asi ta sklamem :D
tak porposim o trosku podrobnejsi navod :D
A strasne dakujem za ochotu... ked tak tak si to uz z toho co si napisal niekde nastudujem a snad pochopimm.. :)
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

jazykové súbory by vypadali asi takto:
slovak.php:

Kód: Vybrať všetko

<?php
$lang = array(
"s" => "slnko";
"d" => "pes";
"h" => "dom"; 
);
?>
english.php:

Kód: Vybrať všetko

<?php
$lang = array(
"s" => "sun";
"d" => "dog";
"h" => "home"; 
);
?>
nastavovanie jazyku:

Kód: Vybrať všetko

//z get parametra (kliknuté na ikonku) si uložím jazyk do session
$_SESSION["lang"] = $_GET["lang"];
vypisovanie tohto jazyku na stránke:

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
Medium Expert
Príspevky: 101
Registrovaný: 13 mar 2007, 21:40
Bydlisko: Malacky, Praha
Kontaktovať používateľa:

Príspevok od používateľa JanJanuska »

:!: :!: :!:
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ť.
lamborghini
Light Expert
Light Expert
Príspevky: 56
Registrovaný: 07 jún 2008, 14:41

Príspevok od používateľa lamborghini »

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?
Snacker
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 362
Registrovaný: 08 jún 2009, 22:42
Kontaktovať používateľa:

Príspevok od používateľa Snacker »

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ť.
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.
JanJanuska
Medium Expert
Medium Expert
Príspevky: 101
Registrovaný: 13 mar 2007, 21:40
Bydlisko: Malacky, Praha
Kontaktovať používateľa:

Príspevok od používateľa JanJanuska »

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.
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ť.
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?
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:
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
      } 
  }
Čo sa týka toho zoraďovania, to môže fungovať na rovnakom princípe, napr.:
www.stranka.com/melony.php?zoradenie=farba (zoradenie melónov podľa farby)
www.stranka.com/melony.php?zoradenie=velkost (podľa veľkosti)
Snacker
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 362
Registrovaný: 08 jún 2009, 22:42
Kontaktovať používateľa:

Príspevok od používateľa Snacker »

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 
      } 
  }
Naco toto cele takto robis? Nema to vobec dobru strukturu ten kod a neni ani efektivny.

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"; 
} 
?>
premennu $id si potom includujes kde chces
JanJanuska
Medium Expert
Medium Expert
Príspevky: 101
Registrovaný: 13 mar 2007, 21:40
Bydlisko: Malacky, Praha
Kontaktovať používateľa:

Príspevok od používateľa JanJanuska »

Snacker napísal:Naco toto cele takto robis? Nema to vobec dobru strukturu ten kod a neni ani efektivny.
Načo? Kvôli zrozumiteľnosti. S efektivitou to nemá absolútne nič spoločné.
Snacker napísal:Dalej tam nemas ani miesto pre stranku ked je v premennej hodnota, ktora by sa tam nemala nachadzat.
Presne tak. Neurobí to nič, veď načo aj :)
Snacker napísal:A naco tam mas File_Exists, ved je to uplne zbytocne.
Nie je to nevyhnutné, ale ani zbytočné. Skrátka som "obalil" warning o existencii súboru.

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");
...ale to by bolo asi k ničomu...
Snacker
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 362
Registrovaný: 08 jún 2009, 22:42
Kontaktovať používateľa:

Príspevok od používateľa Snacker »

Načo? Kvôli zrozumiteľnosti. S efektivitou to nemá absolútne nič spoločné.
Praveze su tam nezmyselne veci a tie nie su zrozumitelne. Efektivne navyky su tie najlepsie na naucenie sa.

Nie je to nevyhnutné, ale ani zbytočné. Skrátka som "obalil" warning o existencii súboru.
Este stale to include mozes umlcat :) takze je
A opakujem, kód som písal polopatisticky, aj keď som to mohol napísať jednoduchšie,
Nejde o polopatickost ale zly, neefektivny kod, kde zbytocne veci duplikujes. Ale to tu asi malo kto vie pochopit :roll:
ppt
Darca
Darca
Používateľov profilový obrázok
Príspevky: 1920
Registrovaný: 27 máj 2006, 11:24
Kontaktovať používateľa:

Príspevok od používateľa ppt »

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? :roll: uuuuffff
Snacker
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 362
Registrovaný: 08 jún 2009, 22:42
Kontaktovať používateľa:

Príspevok od používateľa Snacker »

Audiotrack tam hore naznacoval session ale ja by som bol asi skor za cookies, je to predsa len pohodlnejsie ked si uzivatel vyberie jazyk raz a nemusi pri stale prepinat z default.
JanJanuska
Medium Expert
Medium Expert
Príspevky: 101
Registrovaný: 13 mar 2007, 21:40
Bydlisko: Malacky, Praha
Kontaktovať používateľa:

Príspevok od používateľa JanJanuska »

Snacker napísal:Nejde o polopatickost ale zly, neefektivny kod, kde zbytocne veci duplikujes. Ale to tu asi malo kto vie pochopit :roll:
Zlý?
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 :D .
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 )
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? :roll: uuuuffff
Ak sa používa jeden zdrojový súbor na obe jazykové verzie, tak áno.
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ď...
Snacker
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 362
Registrovaný: 08 jún 2009, 22:42
Kontaktovať používateľa:

Príspevok od používateľa Snacker »

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, '/'); 

} 
Napísať odpoveď