Autor | Zpráva | ||
---|---|---|---|
candiess Profil |
#1 · Zasláno: 24. 2. 2011, 17:25:17 · Upravil/a: candiess
Dobrý, chtěl bych po Vás názory, co je lepší.. jesti mutací udělat přes Pole, nebo DB..
Globální nastavení jazyka je pro oba způsoby stejné --> $_SESSION['lang'] = "cz"; Mám oba způsoby: 1) Pole include "jazyky/".$_SESSION['lang'].".php"; jazyky/cz.php $pole = array( "Domů", "Kontakt", "Panenky", "Ostatní hračky" ); jazyky/en.php $pole = array( "Home", "Contact", "Dolls", "Other toys" ); a menu by vypadalo <a href='index.php'><php echo $pole[0]; ?></a> <a href='kontakt.php'><php echo $pole[1]; ?></a> <a href='/produkty/panenky/'><php echo $pole[2]; ?></a> <a href='/produkty/ostatni/'><php echo $pole[3]; ?></a> 2) přes DB: tabulka: ID|idcko|value|lang ------------------ 1 | 1|Domů|cz ------------------------ 2 | 1|Home|en ------------------------ 3 | 2| Kontakt| cz --------------------------- 4| 2|Contact| en <?php function mutace($idcko) { $query = mysql_query(" SELECT value FROM mutace WHERE idcko = '$idcko' and lang = '".$_SESSION['lang']."'"); $V = mysql_fetch_array($query); echo $V['value']; } ?> a menu by vypadalo <a href='index.php'><php mutace(1); ?></a> <a href='kontakt.php'><php mutace(2); ?></a> <a href='/produkty/panenky/'><php mutace(3); ?></a> <a href='/produkty/ostatni/'><php mutace(4); ?></a> .... Uvítám veškeré nápady a vylepšení, hotová řešení nebo odkazy na články, děkuji všem :) |
||
snake.aas Profil * |
#2 · Zasláno: 24. 2. 2011, 17:50:42
ok.. ani jedno...
první způsob je neuvěřitelně nepřehledný... v 1000 řádcích, až budeš hledat jaký je význam hlášky $pole[425] a druhý způsob je strašně náročný na db... pro každý kousek textu dělat výběr z databáze není zrovna košér... doporučil bych tedy buď jak to má phpMyAdmin - každý jazyk = jeden soubor s logicky pojmenovanými proměnnými a hodnotami... takže cz.php $strContact = "Kontakt"; $strDolls = "Panenky" a menu <a href='kontakt.php'><php echo $strContact; ?></a> <a href='/produkty/panenky/'><php echo $strDolls; ?></a> a nebo ještě lépe použít gettext, případně jeho náhradu phpGettext... velice jednoduchá správa překladů, člověk si nemusí hlídat jestli nezapomněl někde něco přeložit, prostě zdrojáky prožene PoEditem a vidí... |
||
snake.aas Profil * |
#3 · Zasláno: 24. 2. 2011, 17:54:30
ještě doplním, že v gettextu jsou množné tvary naprostá hračka...
angličtina má totiž jen jeden tvar množného čísla čísla (You have 1 new message | You have 3 new messages), kdežto čeština 3 ( Máš 1 novou zprávu | Máš 3 nové zprávy | Máš 6 nových zpráv) pokud tohle budeš potřebovat řešit, tak to polem, proměnnými, ani databází úplně jednoduše neuděláš... |
||
snake.aas Profil * |
#4 · Zasláno: 24. 2. 2011, 17:55:37
za chybky se omlouvám, píšu a nečtu po sobě
|
||
candiess Profil |
#5 · Zasláno: 24. 2. 2011, 17:59:44
gettext... nějak sem nepochytil jeho funkci, fakt není lepší si to udělat handmake.? Nebo, jako mužu zkusit ten gettext() ale mohl bys mě ním "provést"? jako nějak nechápu jeho funkce:
putenv('LC_ALL=de_DE'); setlocale(LC_ALL, 'de_DE'); bindtextdomain("myPHPApp", "./locale"); textdomain("myPHPApp"); prosím |
||
snake.aas Profil * |
#6 · Zasláno: 24. 2. 2011, 18:16:30
no problemo :)
gettext sám o sobě má 2 vady - první, že musí být na serveru zapnutá podpora (viz. phpinfo()) - druhá, že na serveru musí být nainstalovány jazyky, do kterých budeš chtít mít aplikaci přeloženou proto radši používám phpgettext který obojí odstraňuje (ale přináší do aplikace mírně vyšší režii, protože se jedná o php skripty) základ je nastavení jazyka putenv('LC_ALL=de_DE'); setlocale(LC_ALL, 'de_DE'); pak určíš, ke se nachází binární soubory s překladem bindtextdomain("myPHPApp", "./locale"); textdomain("myPHPApp"); a samotné texty pak zobrazíš lehce <a href='kontakt.php'><php echo _('Contact'); ?></a> výhodou je, že pokud nemáš něco přeložené, zobrazí se to v původním tvaru malý úvod by mohl poskytnout Interval jsou tam i další navazující články |
||
candiess Profil |
#7 · Zasláno: 24. 2. 2011, 18:36:36
takže na serveru je gettext povolený a zálkadní jazyky jako je: čeština, němčina, angličtina a slovenština tam budou ne.? :)
a skript by měl vypadat if($_SESSION['lang']) { $jazyk = $_SESSION['lang']; } else { $jazyk = "de_DE"; } putenv('LC_ALL=$jazyk'); setlocale(LC_ALL, '$jazyk'); bindtextdomain("myPHPApp", "./locale"); textdomain("myPHPApp"); noo a pak už jen echo _('Contact'); ale stejnak sem z toho jelen, newím zdali je mi pomoci :) jak vypadá ten binární soubors překlady, když mám wamp server (localhost) tak kde ho najít, nebo ho vytvořit.. vytvořil sem soubor v localhostu: <?php putenv('LC_ALL=de_DE'); setlocale(LC_ALL, 'de_DE'); bindtextdomain("myPHPApp", "./locale"); textdomain("myPHPApp"); echo _('Contact'); ?> ,,Fatal error: Call to undefined function bindtextdomain() in C:\wamp\www\text.php on line 5" |
||
snake.aas Profil * |
#8 · Zasláno: 24. 2. 2011, 18:48:04
binární soubor s překlady se dá vytvořit pomocí PoEditu
na první pohled je to trochu složitý ten program, ale dá se na to zvyknout... vím, že na to byl tutoriál někde, ale za boha ho nemůžu najít... ve zkratce vytvoříš katalog, nastavíš kde(cesta) a co(funkce - např. _() ) má hledat a ono ti to projede zdrojáky a ukáže všechny texty, ty si v tom přeložíš a po uložení vznikne ten *.mo soubor a to že neexistuje bindtextdomain je divné, to by měla být součást gettextu... |
||
candiess Profil |
#9 · Zasláno: 24. 2. 2011, 18:55:47
už to fara, měl sem to zakomentovane v php.ini
dobrá, stáhnu si poedit a zkusím se sním naučit.. je to vaše poslední definitivní slovo, že je gettext lepší než moje $pole? :D ale zase se alejspoň něco naučím no.já jen že už tu mutaci mám skoro celou hotovou... dobrá no, děkuju moc za pomoc, vážím si takových lidí :)) |
||
Časová prodleva: 13 let
|
0