Autor | Zpráva | ||
---|---|---|---|
majo80 Profil * |
#1 · Zasláno: 7. 9. 2011, 17:40:46
Zdravím.
Chcel by som vytvoriť viacjazyčný web pomocou jednoduchej funkcie a DB. V databáze bude tabuľka s prekladmi a tá bude mať stĺpce: ID, TEXT_SVK, TEXT_CZE, TEXT_ENG - každý riadok bude obsahovať slovenskú, českú a anglickú verziu textu. A samotný script: <? include ("config.php"); function preloz($prekladany_text,$do_jazyka) { $sql2 = "SELECT * FROM texty WHERE text_svk='$prekladany_text'"; mysql_query("SET NAMES 'cp1250'"); mysql_set_charset("cp1250"); $vysledek2 = mysql_query("$sql2"); while($riadok2 = mysql_fetch_array($vysledek2)) { $prelozeny_text = $riadok2["text_".$do_jazyka]; } while (false); if ($prelozeny_text<>""){return $prelozeny_text;}else{return $prekladany_text;} } echo preloz('Dnes bol veľmi krásny a výnimočný deň.','eng'); ?> čo znamená, že pomocou funkcie preloz vyberiem z databázy anglický preklad slovenskej vety (alebo český, podľa druhého parametru vo funkcii) a zobrazím ho. Ak sa v DB nebude nachádzať riadok s prekladom tejto vety, zobrazí sa veta v pôvodnom slovenskom jazyku. Chcem sa opýtať, je takéto riešenie vhodné, prípadne bezpečné? Aké úpravy by ste prípadne navrhli? |
||
Michal Benda Profil |
#2 · Zasláno: 7. 9. 2011, 18:28:03
Tu databázi bych si navrhl trochu jinak:
tabulka jazyky (sloupec id, sloupec nazev) - sloupec id může být integer s auto_incrementem nebo bych tam ukládal jazykové zkratky (např. cz, en, apod.) tabulka texty (sloupec id, sloupec jazyk, sloupec text) - sloupec jazyk je cizí klíč k tabulce jazyky Funkci preloz() bych akorát pak předělal na tento návrh databáze, ale jako její použití a parametry bych nechal, jak jsou. Jinak já používám kódování UTF-8, které doporučuji, kde mohu, ale to už je na tobě. |
||
Mastodont Profil |
#3 · Zasláno: 7. 9. 2011, 19:39:39
Doporučil bych podívat se na to, co je gettext. Ony totiž ty překlady je třeba taky nějak vytvořit a dostat do DB. Gettext je celkově velmi elegantní řešení.
|
||
Ben Profil * |
#4 · Zasláno: 7. 9. 2011, 19:54:58
Pokud se bude tato tvoje funkce opakovat několikrát za sebou, dal bych toto:
<?php mysql_query("SET NAMES 'cp1250'"); mysql_set_charset("cp1250"); ?> uz do souboru config.php, aby se zbytecne nekolikrat nanastavoval to same |
||
majo80 Profil * |
#5 · Zasláno: 7. 9. 2011, 20:49:55
Mastodont:
o tom viem, ja som si chcel niečo vytvoriť sám - preto chcem rady, či to tak môže byť a prípadne nejaké odporúčania... Ben: aha, no nad tým som neuvažoval, ďakujem.... |
||
DJ Miky Profil |
#6 · Zasláno: 7. 9. 2011, 21:22:40
Tohle řešení má nevýhodu v tom, že počet SQL dotazů je roven počtu překládaných textů. Pokud jich bude na stránce více (desítky, stovky), povede to k celkem zbytečnému bombardování databáze.
|
||
CZechBoY Profil |
#7 · Zasláno: 8. 9. 2011, 22:37:43 · Upravil/a: CZechBoY
no ale načítat to všechno u každý stránky je taky neefektivní když je na stránce většinou jen pár vět překládaných :(
ideální by bylo na začátku skriptu zjistit jaký věty budeš vypisovat a dostat je z DB, přiřadit do pole a potom je obyčejným echem vypsat (třeba) já mám překlad řešený přes soubor /jazyk/složka.php a v tom skriptu mám pole $lng (globální) které rozšiřuju a překlady mám napevno takhle to má řešené phpBB (tam jsem to okoukal : - ) |
||
Časová prodleva: 3 dny
|
|||
scrand Profil * |
#8 · Zasláno: 11. 9. 2011, 12:22:54
CZechBoY, CZechBoY:
To je docela dobré :) Takhle by se to dalo udělat i na tu DB né? Že by se tam ještě přidal do DB sloupec, který by označoval, stránku, na které se má jaký text překládat. Podle toho by se pak na začátku skriptu vypsali všechny potřebné překlady do pole, které jsou potřeba pro tu stránku a nic víc :) A pak by se jen použilo $preklad['prekladany_text'] |
||
Nox Profil |
#9 · Zasláno: 11. 9. 2011, 23:00:49
Tak si udělej prostě jednoduchý soubor (soubory), kde bude PHP array s textama...problém vyřešen (samozřejmě gettext, ale toto je jednodušší)
|
||
Spectator Profil |
#10 · Zasláno: 12. 9. 2011, 07:35:48
Nebo soubory
text_en.php text_cs.php text_sk.php do nich ukládej přeložené části stránek (menu, chyby, oznamovací texty, ...) jako konstanty a podle parametru v URL je načítej. require 'text_'. $_GET['jazyk'] .'.php'; Pro texty pro články bych použil řešení pomocí db jako u tebe popř. [#2] Michal Benda. Řekl bych, že tím omezíš již zmiňované bombardování databáze |
||
hexcross.. Profil * |
#11 · Zasláno: 12. 9. 2011, 13:20:17
Já to mám vyřešené tak že mám v tabulce v db 3 sloupce : id, cs, en
ID je zpravidla český název bez diaktritiky. Potom si načtu celou tabulku do pole (může tam být maximálně cca. 100 záznamů takže bych zatížení nějak neřešil) : $sql = mysql_query("SELECT id, $lang FROM translation"); while ($res = mysql_fetch_array($sql)){ $preklad[$res['id']] = $res["$lang"]; } Kde v $lang Pak kdekoliv na stránce použiju jen např. print($preklad[uvodni_stranka]); Nevím zda to je nejlepší řešení, každopádně je funkční a mně stačí. |
||
1Pupik1989 Profil |
#12 · Zasláno: 12. 9. 2011, 17:30:24
Já si zjistím jazyk, třeba cs a podle něj includuji soubor v adresáři lang. Příklad "cs.php". no a jednoduchost spočívá v tom, že pole mají jen číselné klíče. Např "$land[1]". V databázi bych to vyřešil na 4 sloupce. "id,text,jazyk,strana", možná bych místo id dal zkratku.
|
||
Časová prodleva: 13 let
|
0