[HTML, PHP] Bi-linguálna web stránka

Programovacie jazyky, rady, poradňa...
Hensym
VIP
VIP
Používateľov profilový obrázok
Príspevky: 6978
Registrovaný: 24 apr 2011, 0:53
Bydlisko: Zvolen

[HTML, PHP] Bi-linguálna web stránka

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

Čaute, viete mi napísať, ako je možné implementovať do už hotovej webstránky druhý jazyk (angličtinu) bez toho, aby som manuálne klonoval každú jednu stránku? Teda nejak cez PHP. Na nete som našiel kopu príkladov, ale pre mňa príliš zložitých, keďže zahrňovali detekciu systémového jazyka, uloženie voľby, ak už užívateľ jazyk vyberal, atď.

Ja prosto potrebujem stránku, ktorá je defaultne slovenčine, ale hore v pravo budú na výber dve vlajočky. Ak návštevník klikne na anglickú, surfuje v angličtine, a opačne. To je všetko, vďaka.
Michaelo
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 6177
Registrovaný: 16 júl 2008, 20:29
Bydlisko: Pri PC
Kontaktovať používateľa:

Re: [HTML, PHP] Bi-linguálna web stránka

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

Spraviť nové locale a po kliknutí na vlajočku, používateľa hodí na stránku language.php?planguage=english
Kód zistí že chce stránku v EN jazyku, uloží to do cookies a presmeruje ho s5 na stránku kde bol, no tá už bude EN.
Alebo bez stránky language.php a kód by si mal v headri (nie medzi tagmi <head> ... </head>). No ak chceš mať kód čím kratší, samotná stránka je lepšia možnosť.

Potom niekde v kóde niečo ako

Kód: Vybrať všetko

if (isset($_COOKIE['language'])) {
    if ($_COOKIE[['language'] == "english"){
        include "locale/english.php";
    if ($_COOKIE[['language'] == "slovak"){
        include "locale/slovak.php";
    }
}
Podobný kód používam na http://www.zmaturujem.sk pri výbere mobilnej alebo normálnej verzie stránky (samozrejme to mám aj automatizované, no vľavo dole sa to dá stále prepnúť).
Všimni si odkaz na platform.php?platform=mobile
Btw.: pri prepnutí jazyka samozrejme vymažeš všetky ostatné možné cookies (napr.: ak prepnem na EN, vymažeš SK, GER, CZ etc.)

Ukážka kódu:

Kód: Vybrať všetko

if ($_GET['language'] == 'english' ){
   setcookie("language", "english", time()+86400, "/");
   ('Location:'.$_SERVER['HTTP_REFERER']);
} elseif ($_GET['language'] == 'slovak' ){   
   setcookie("language", "slovak", time()+86400, "/");
   ('Location:'.$_SERVER['HTTP_REFERER']);
}else{
   echo "ERROR HAPPENED";
}
Toto je dobré pre statickú stránku bez DB.

Ak máš DB, budeš musieť vytvoriť nové tabuľky napr.: 1584_clanky pre slovenčinu (dajme tomu, že tak sa tabuľka volá teraz) a 1584_clanky_en pre angličtinu (tú by si musel vytvoriť a nahodiť do nej všetky texty prepísané do EN).
Potom by si v kóde dodával koncovky k názvom tabuliek podľa toho, aký má daný človek vybraný jazyk.

Ďalšia možnosť by bola pridať len stĺpec do pôvodnej tabuľky, ktorý by obsahoval anglický text, ďalší pre nemecký text atď.
Postup je podobný, len by si nedodával koncovky, ale menil názvy stĺpcov z ktorých by si bral texty.

Toto je samozrejme len obšírne, keďže neviem či používaš DB, alebo je to len statická stránka a nechcem sa veľmi rozpisovať.

Snáď som to nenapísal nijako zložito.
S-player
Light Star
Light Star
Príspevky: 277
Registrovaný: 23 júl 2011, 22:30

Re: [HTML, PHP] Bi-linguálna web stránka

Príspevok od používateľa S-player »

Nejako mi nedochádza prečo zasielaš všetky možne variácie. Nestačí zaslať len konkrétny jazyk a následne meniť hodnotu tohto Cookie? +odporúčil by som nastaviť na SS nejaký defaultný jazyk ,ak niekto napríklad zašle zmenené-nesprávne Cookie/žiadne Cookie.
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: [HTML, PHP] Bi-linguálna web stránka

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

pretože ich ukladá do cookies s platnosťou, tak zmena znamená vymazanie predošlých. krajšie by to bolo jednou premennou a tej nastavovať hodnotu jazyka ako 10 premenných a nastavovať ano/nie. Ale keď sa rozhodol takto, tak si to musí komplikovane mazať
S-player
Light Star
Light Star
Príspevky: 277
Registrovaný: 23 júl 2011, 22:30

Re: [HTML, PHP] Bi-linguálna web stránka

Príspevok od používateľa S-player »

Veď to som spomenul vyššie... ,že sa to dá poriešiť jedným Cookie tak prečo nato šiel takto. Ešte ani tá deklarácia (Nastavovanie hodnot Cookie) nieje nejaká tip-top... keď tam bude mať desať jazykov tak tie podmienky budú vyzerať úplne brutálne.
Michaelo
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 6177
Registrovaný: 16 júl 2008, 20:29
Bydlisko: Pri PC
Kontaktovať používateľa:

Re: [HTML, PHP] Bi-linguálna web stránka

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

Áno ja viem, písal som dosť unavený a nenapadlo ma to, len som skopčil môj starý kód. Tam to bolo takmer jedno, keďže to pridalo navyše len dva riadky, no tuto by ich to pridalo aj 10 a viac (podľa počtu jazykov).

Upravený kód:

header.php

Kód: Vybrať všetko

if (isset($_COOKIE['language'])) {
    if ($_COOKIE['language'] == "english"){
        include "locale/english.php";
    if ($_COOKIE['language'] == "slovak"){
        include "locale/slovak.php";
    }
}
language.php

Kód: Vybrať všetko

if ($_GET['language'] == 'english' ){
   setcookie("language", "english", time()+86400, "/");
   ('Location:'.$_SERVER['HTTP_REFERER']);
} elseif ($_GET['language'] == 'slovak' ){   
   setcookie("language", "slovak", time()+86400, "/");
   ('Location:'.$_SERVER['HTTP_REFERER']);
}else{
   echo "ERROR HAPPENED";
}
Upravil som aj kód a pár viet v prvom príspevku.
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: [HTML, PHP] Bi-linguálna web stránka

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

máš tam syntaktické chyby, a stále je to zbytočne zložité. Úplne stačí niečo takéto (a pridanie nového jazyka nevyžaduje pridávať novú vetvu do kodu)

Kód: Vybrať všetko

if(file_exists("locale/" . $_COOKIE['language'] . ".php")) include_once("locale/" . $_COOKIE['language'] . ".php"); 
     else include_once("locale/english.php"); 
prípadne ešte ošetriť protii includnutiu iného súboru, nakoľko cookies si vie zmeniť. Tak overiť či tam nie je bodka, lomítko a podobne

ukladanie detto:

Kód: Vybrať všetko

if ($_GET['language']) setcookie("language", $_GET['language'], time()+86400, "/");
a nemusíš upravovať kod pre každý nový jazyk. Ten redirect by som neriešil, radšej pridať tieto nastavovania jazyka do nejakého configu ktorý includuje na každú stránku na začiatku. Referal sa dá vypnúť, alebo zmeniť a potom ti to bude robiť blbosti
S-player
Light Star
Light Star
Príspevky: 277
Registrovaný: 23 júl 2011, 22:30

Re: [HTML, PHP] Bi-linguálna web stránka

Príspevok od používateľa S-player »

Spoiler
audiotrack napísal:máš tam syntaktické chyby, a stále je to zbytočne zložité. Úplne stačí niečo takéto (a pridanie nového jazyka nevyžaduje pridávať novú vetvu do kodu)

Kód: Vybrať všetko

if(file_exists("locale/" . $_COOKIE['language'] . ".php")) include_once("locale/" . $_COOKIE['language'] . ".php"); 
     else include_once("locale/english.php"); 
prípadne ešte ošetriť protii includnutiu iného súboru, nakoľko cookies si vie zmeniť. Tak overiť či tam nie je bodka, lomítko a podobne

ukladanie detto:

Kód: Vybrať všetko

if ($_GET['language']) setcookie("language", $_GET['language'], time()+86400, "/");
a nemusíš upravovať kod pre každý nový jazyk. Ten redirect by som neriešil, radšej pridať tieto nastavovania jazyka do nejakého configu ktorý includuje na každú stránku na začiatku. Referal sa dá vypnúť, alebo zmeniť a potom ti to bude robiť blbosti
Niečo podobné som chcel postnúť včera len som bol na iPade... napadla ma ešte táto alternatíva... inač čo sa týka toho includnutia iného súboru tak v "locale/" by mal mať len dané variácie jazykov čiže to je asi jedno alebo?

Kód: Vybrať všetko

include_once("locale/" . (file_exists("locale/".$_COOKIE["lang"].".php") ? $_COOKIE["lang"] : "en") . ".php");
// Inač Michaelo vo svojom kóde máš preklepy kde kontroluješ Cookies... je tam o jednu hranatú zátvorku naviac.
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: [HTML, PHP] Bi-linguálna web stránka

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

S-player napísal:... inač čo sa týka toho includnutia iného súboru tak v "locale/" by mal mať len dané variácie jazykov čiže to je asi jedno alebo?
nie je to jedno, lebo keď si do cookies nastavím (cookies si viem sám meniť) hodnotu ../config tak sa includne súbor config.php z nadradeného adresára (rootu?). Prípadne poskúšam kombinácie ako ../include/config alebo ../include/config.ini a podobne. A zachvílu mám prístup do jeho databázy a plno iným veciam
S-player
Light Star
Light Star
Príspevky: 277
Registrovaný: 23 júl 2011, 22:30

Re: [HTML, PHP] Bi-linguálna web stránka

Príspevok od používateľa S-player »

Je mi jasne ,že hodnota cookies sa dá meniť... Úplne som zabudol na "../"... chápem ;)
Michaelo
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 6177
Registrovaný: 16 júl 2008, 20:29
Bydlisko: Pri PC
Kontaktovať používateľa:

Re: [HTML, PHP] Bi-linguálna web stránka

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

Jo chyba opravena.

Ano, ten kod je kratsi, hold, ja si vacsinou najprv spravim funkcny kod a potom ho skracujem na minimum.
Suhlas s tym vyssie uvedenym kodom, je ro tozhodne kratsie a plni rovnaky ucel.

Vlastne tento kod pouzivam v mojich pluginoch pre php-fusion (neviem preco ma nenapadlo pouzit tento styl, len to upravit na cookies).

Kód: Vybrať všetko

if (file_exists(INFUSIONS."nazov_pluginu/locale/".$settings['locale'].".php")) {
	include INFUSIONS."nazov_pluginu/locale/".$settings['locale'].".php";
} else {
	include INFUSIONS."nazov_pluginu/locale/English.php";
}
Napísať odpoveď