Stránka 1 z 1

[PHP] Názor na způsob překladu administrace

Odeslat příspěvekNapsal: 23. 10. 2014 10:37
od JimGvid
Ahoj, chtěl bych poprosit o názor zkušených PHPkařů na mé řešení překladu administrace.

Řešení:

cs.json (soubor s překlady)
Kód: Vybrat vše
{
    "Home": {
      "Accounts": "Seznam účtů"
    }
}


class.translator.php (překladač)
Kód: Vybrat vše
class translator
{
   
    public $sec; 
    public $exp;     
   
    public function __construct($sec)
    {
     
        $this->data = json_decode(file_get_contents(dirname(__FILE__).'/../../lang/'.$sec.'.json'),true);
   
    }     
   
    public function translate($sec,$exp)
    {
   
        return ($this->data[$sec][$exp]);
     
    }

}


php volání:
Kód: Vybrat vše

$lang = new translator($userdats['lang']); // Načtení jazyka

$lang->translate('Account','NotLab'); // Překlad potřebné části



Jde mi hlavně o náročnost načítání, protože to nechci tahat z DB (abych ji nezatěžoval jednotlivými dotazy) a záznamů k přeložení může být i 1000, tedy se musí načítat při každé stránce, kde je překlad soubor s tisíci záznamy. Samozřejmě soubor zmenším číselnými indexy místo používáním slovních indexů k překladu, ale i přesto mi to přijde celkem náročné.

Předem děkuji za názory :-)

Re: [PHP] Názor na způsob překladu administrace

Odeslat příspěvekNapsal: 23. 10. 2014 11:01
od karlos00x
Nez se do toho pustis a budes objevovat ameriku tak se zamysli nad pluralem :-)

Re: [PHP] Názor na způsob překladu administrace

Odeslat příspěvekNapsal: 23. 10. 2014 11:22
od JimGvid
Nechtěl bych objevovat Ameriku, jen jsem nenašel žádné řešení, které by mi vyhovovalo, pokud bys měl odkaz na nějaké, které doporučuješ, byl bych ti velice vděčný. :-)

Našel jsem gettext, ale přijde mi to zbytečné používat ve chvíli, kdy nepotřebuji využívat všechny funkce.

Spíše mi jde o práci se souborem cs.json, zda lze nějak eliminovat (kromě rozdělením) náročnost toho opětovného načítání.

Plural budu rozlišovat do třech kategorií a odlišovat indexem.

Re: [PHP] Názor na způsob překladu administrace

Odeslat příspěvekNapsal: 23. 10. 2014 15:02
od gandor
V principe ak nebudes mat nejaky obri portal, tak akekolvek riesenie (a ani pre DB to nieje az taka zataz - hlavne ak vies vytiahnut naraz vsetky zaznami 1 requestom. Ale je to o preferencii, ci chces editovat subory alebo zaznamy v DB) je fajn.

Jedinu vec, ktoru by som vylepsil je, ze translator by som definoval ako singleton (kludne mozes vyzadovat aj jeden parameter - ten moze vzdy prestavit aktualne pouzivany jazyk) s tym, ze pri jeho volani sa docita dany jazyk len vtedy, pokial si ho este nedocitaval (tym eliminujes X nasobne citanie jedneho suboru - co btw pri malom webe stale sotva spozorujes. Lebo je jedno, ci ti server odpovie za 15ms alebo 15,5 ms kvoli 20x citaniu toho isteho mini (na disku uz cachenuteho) suboru).

PS. tych hotovych rieseni je tak cca 1567845164 (kedze multijazycnostou sa zaobera dobra cast vsetkych webov)... Neverim, ze neexistuje nejake, ktore by ti vyhovovalo ;) Ale jasne, je jednoduchsie si nieco primitivne napisat (ak to na primitivny ucel staci), ako pohladat existujuce riesenie. Len potom necakaj robustnost...

Re: [PHP] Názor na způsob překladu administrace

Odeslat příspěvekNapsal: 23. 10. 2014 16:16
od Ageran
Já to řeším přes pole (načtené z DB, ale klidně ho můžeš načítat ze souboru), kde český výraz je zároveň index... A pokud ti jde o to opětovné načítání, teoreticky to můžeš načíst jednou a pak záznam držet v SESSION...

Re: [PHP] Názor na způsob překladu administrace

Odeslat příspěvekNapsal: 23. 10. 2014 16:24
od silenyJohn
podobne, zjistim jazyk a pak vyberu vse z db, ulozim do pole, a pak jednoduse nactu z pole hodnotu pro danou promennou

Re: [PHP] Názor na způsob překladu administrace

Odeslat příspěvekNapsal: 23. 10. 2014 17:00
od JimGvid
Singleton jsem dodělal a zbytek návrhů odzkouším...

Děkuji moc za Vaše názory a tipy.

Re: [PHP] Názor na způsob překladu administrace

Odeslat příspěvekNapsal: 7. 11. 2014 19:44
od sparkoV
co pouzit nejakou cache? http://www.phpfastcache.com/

Re: [PHP] Názor na způsob překladu administrace

Odeslat příspěvekNapsal: 7. 11. 2014 20:19
od remet
Ja na preklady menu a tlacitek (ne blokovych textu) soubor s definicemi ( define("L_SETUP","Nastaveni"); ), ktery se includuje.

Re: [PHP] Názor na způsob překladu administrace

Odeslat příspěvekNapsal: 10. 11. 2014 08:14
od Nargon
A co na to jít obráceně.
Do zdrojového souboru si napsat nějaký zástupný text, dejme tomu třeba
Kód: Vybrat vše
<a href="account.php">#ACCOUNT#</a>
a pak mít druhý soubor s překlady, kde budeš mít
Kód: Vybrat vše
#ACCOUNT#CZ#Můj účet
#ACCOUNT#EN#My Account
...

A k tomu malý skriptík/prográmek (překladač), co ti vygeneruje dvě verze webu ve různých složkách a ty zástupné texty to nahradí textem z druhého souboru. Tj vygeneruje to tyto dva soubory.
/CZ/index.php:
Kód: Vybrat vše
<a href="account.php">Můj účet</a>

/EN/index.php:
Kód: Vybrat vše
<a href="account.php">My Account</a>


Výhoda je, že je tam nulová režije při čtení různých jazyků, jen se stačí odkazovat na stránku ve správné složce. Jako nevýhoda je samozřejmě větší velikost, protože je tam celý web několikrát, podle počtu jazyků. A složitější úprava, kdy musíš upravit zdroj a nechat z toho přeložit jednotlivé jazykové verze.

Re: [PHP] Názor na způsob překladu administrace

Odeslat příspěvekNapsal: 10. 11. 2014 10:44
od gandor
Vysoko nedoporucujem Nargonove riesenie, aj ked casto funguje dobre. Problem je v tom, ze obcas tomu tak nieje. Problem je v tom, ze akym sposobom budes vytahovat tie texty? Pravdepodobne pouzijes nejaky regexp - ale ako vies zarucit, ze v obsahu nebudu ziadne mriezky, ktore nebudu znacit preklad? (Poznamka, nijako - nech das akukolvek kombinaciu, tak sa v HTML dokumente moze vyskytnut. A mriezky su obzvlast neprijemne, lebo sa v obsahu nachadzaju len obcas - napriklad v anchor linkach.) Alebo, ze ci budes mat napisany spravny regexp a zastupny text ti to sparuje?
Ako samozrejme, ze sa to v konecnom dosledku bude dat nejak tak vymysliet, ze k tomu v praxi nebude prichadzat. Ale naco to robit, ked uz existuje spolahliva, zabudovana, standardizovana escape sekvencia na ktoru ta upozorni aj editor, s ktorym dany obsah menis? (poznamka - ide o volanie prekladovej funkcie. Takze potencialne nieco taketo:
Kód: Vybrat vše
<?= _('ACCOUNT'); ?>
Potom ci uz to budes mat v subore, alebo hocikde inde, je v zasade uplne jedno...