[HTML, PHP] Bi-linguálna web stránka
[HTML, PHP] Bi-linguálna web stránka
Č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.
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
- 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
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
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:
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.
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";
}
}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";
}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.
Re: [HTML, PHP] Bi-linguálna web stránka
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
- Príspevky: 25958
- Registrovaný: 09 sep 2005, 18:39
- Kontaktovať používateľa:
Re: [HTML, PHP] Bi-linguálna web stránka
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ť
Re: [HTML, PHP] Bi-linguálna web stránka
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
- 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
Á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
language.php
Upravil som aj kód a pár viet v prvom príspevku.
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";
}
}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";
}-
audiotrack
VIP
- Príspevky: 25958
- Registrovaný: 09 sep 2005, 18:39
- Kontaktovať používateľa:
Re: [HTML, PHP] Bi-linguálna web stránka
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) 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: 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
Kód: Vybrať všetko
if(file_exists("locale/" . $_COOKIE['language'] . ".php")) include_once("locale/" . $_COOKIE['language'] . ".php");
else include_once("locale/english.php"); ukladanie detto:
Kód: Vybrať všetko
if ($_GET['language']) setcookie("language", $_GET['language'], time()+86400, "/");Re: [HTML, PHP] Bi-linguálna web stránka
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)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 podobneKód: Vybrať všetko
if(file_exists("locale/" . $_COOKIE['language'] . ".php")) include_once("locale/" . $_COOKIE['language'] . ".php"); else include_once("locale/english.php");
ukladanie detto: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ť blbostiKód: Vybrať všetko
if ($_GET['language']) setcookie("language", $_GET['language'], time()+86400, "/");
Kód: Vybrať všetko
include_once("locale/" . (file_exists("locale/".$_COOKIE["lang"].".php") ? $_COOKIE["lang"] : "en") . ".php");
-
audiotrack
VIP
- Príspevky: 25958
- Registrovaný: 09 sep 2005, 18:39
- Kontaktovať používateľa:
Re: [HTML, PHP] Bi-linguálna web stránka
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 veciamS-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?
Re: [HTML, PHP] Bi-linguálna web stránka
Je mi jasne ,že hodnota cookies sa dá meniť... Úplne som zabudol na "../"... chápem 
-
Michaelo
Hardcore addict
- 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
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).
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";
}