Autor Zpráva
majo80
Profil *
Zdravím,
riešim viacjazyčný web a zaujímala by ma možnosť, kam ukladať prekladaný text spolu s preloženým.

1) pri otvorení každej stránky na začiatku načítať všetky texty z DB do array a v stránke už s nimi pracovať
alebo
2) raz za čas (napr. raz denne) načítať prekladané texty z DB a uložiť ich do súboru a potom pri otvorení každej stránky načítavať tento súbor a spracovávať z neho texty

Ide mi hlavne o to, čo je rýchlejšie, menej zaťažuje server a pod. Nie že by tých textov bolo veľa.

Štruktúra DB bude približne takáto:
ID / original / preklad / jazyk
1 / ahoj / hello / en
2 / ahoj / hallo / de
3...
Euroblb
Profil
Pokud dále zpracováváš data, seřazuješ, vyhledáváš, tak je lepší DB, kde jsou již různé funkce pro to určené, napřiklad pro vyhledávání, smazání atp.
Nemusíš pak přepisovat celý TXT, a různě dolovat data ze souboru, což ušetří na výkonu serveru hodně při velkém objemu dat.
majo80
Profil *
Euroblb:
Nič také nebudem potrebovať, či už pri načítaní z DB alebo zo súboru, všetky texty uložím do poľa a z toho potom budem ťahať preklady.
yFang
Profil
majo80:
všetky texty uložím do poľa a z toho potom budem ťahať preklady
Podle mě je teda rychlejší řešit tyhle věci na úrovni databáze.
majo80
Profil *
yFang:
Ako napr. v tele stránky narazím na text, ktorý treba preložiť, tento text vyhľadám v DB a zobrazím jeho preklad?
A toto robiť pre každý text resp. každé slovo, ktoré treba preložiť?
Nie je lepšie všetky texty uložiť do poľa a potom k nim pristupovať?
Alphard
Profil
majo80:
Začal bych řešením 1, můžete si měřit a logovat potřebný čas, ale myslím, že to bude ok. Jestli bude problém, přejdete k řešení 2 tak, že do souboru budete ukládat serializované pole v původní podobě. Pár řádků navíc, logicky další krok v původním řešení, není problém implementovat později.

yFang:
Není úplně šťastné hledat jednotlivě každý překlad v db, vedlo by to na desítky až stovky dotazů, podle webu, jen na překlad. Samozřejmě je potřeba zvážit paměťovou náročnost a a případně si do db ještě nacachovat, co je potřeba na jaké stránce.
Micruss
Profil
majo80:
pokud text uložíš do pole a to pole bude velký, tak se bude déle načítat stránka (zabírá celkem dost paměti)...
majo80
Profil *
Micruss:
pri akej veľkosti DB, resp. textu by už bolo poznať spomalenie načítania webu?
yFang
Profil
Asi to úplně nechápu, ale proč by se to mělo dělat pro každé slovo? To přeci ani nejde dělat překlad slovo od slova. Z databáze si načtu variantu stránky v daném jazyce. A co se týče menu a podobných věcí, tak se načtou z databáze stejně jako by to byl normální web, akorát se vyberou pouze příslušné jazykové varianty.
Alphard
Profil
Já jsem pochopil, že jde o něco v tomto stylu doc.nette.org/cs/default-macros#toc-preklady
V šabloně se do příslušného makra obalí každý textový celek, translator se předá templatovacímu systému a ten jednotlivě přeloží každé slovo/frázi/větu. Pokud se změní šablona, nové výrazy se automaticky přidají do db a v adminu je někdo přeloží.

Původně je to GetTextový způsob, ten měl vlastní binární soubory s překlady. Práce s ním ale přinášela určité problémy, takže se někteří lidé rozhodnou, že si raději vytvoří vlastní implementaci čistě v php.
majo80
Profil *
Áno, presne ako píše Alphard, tak je to myslené...
Amunak
Profil
Pokud jde o víceméně statické stránky, nejrychlejší (a paměťově nenáročné) je kešovat kompletní HTML výstup (nebo alespoň jeho podstatnou část). Keš pak načítáte přes readfile(). Šlo by tedy např. kešovat každou variantu stránky (v každém jazyce) a při změně překladu by se keš zneplatnila.
majo80
Profil *
Amunak:
Práveže nie, ide o dynamické stránky...
Amunak
Profil
majo80:
Ono záleží jak moc dynamické. Nějak inteligentně jde kešovat skoro všechno. Ale pokud se stejně spousta věcí tahá z DB, nějaký dotaz navíc by neměl vadit. Ale udělejte to nějak rozumně - hlavně ne pro každý řetězec jeden dotaz. Ale stejně tak je špatný nápad (obzvlášť pokud je web rozsáhlejší) načítat všechny přeložené stringy na každé stránce. Napadá mě třeba mít funkci, co se v šabloně zavolá, aby přitáhla nějaký text. Ta na své místo doplní jen pro překlad/stránku unikátní řetězec, a někam se uloži, jaký řetězec chceme z DB a na jaké místo ho budeme nahrazovat. Po složení šablony, těsně před zobrazením, se zavolá jeden dotaz na DB s požadovanými řetězci, DB je vrátí, a ty se v šabloně nahradí na ta místa identifikátorů přes str_replace. Asi to obvykle bude rychlejší (a hlavně méně paměťově náročné) než načítat všechny stringy.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: