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

Webdesign, HTML, CSS, Flash, PHP, ASP, .NET, JavaScript. Kritika www stránek na Smetišti.

Moderátor: Moderátoři Živě.cz

Odeslat příspěvekod JimGvid 23. 10. 2014 10:37

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 :-)
JimGvid
Kolemjdoucí

Odeslat příspěvekod karlos00x 23. 10. 2014 11:01

Nez se do toho pustis a budes objevovat ameriku tak se zamysli nad pluralem :-)
Upgrade který má smysl: SSD. Zažijete svižný počítač.
karlos00x
Pokročilý

Odeslat příspěvekod JimGvid 23. 10. 2014 11:22

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.
JimGvid
Kolemjdoucí

Odeslat příspěvekod gandor 23. 10. 2014 15:02

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...
gandor
Mírně pokročilý

Odeslat příspěvekod Ageran 23. 10. 2014 16:16

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...
Ageran
Mírně pokročilý
Uživatelský avatar

Odeslat příspěvekod silenyJohn 23. 10. 2014 16:24

podobne, zjistim jazyk a pak vyberu vse z db, ulozim do pole, a pak jednoduse nactu z pole hodnotu pro danou promennou
silenyJohn
Junior

Odeslat příspěvekod JimGvid 23. 10. 2014 17:00

Singleton jsem dodělal a zbytek návrhů odzkouším...

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

Odeslat příspěvekod sparkoV 7. 11. 2014 19:44

co pouzit nejakou cache? http://www.phpfastcache.com/
sparkoV
Junior

Odeslat příspěvekod remet 7. 11. 2014 20:19

Ja na preklady menu a tlacitek (ne blokovych textu) soubor s definicemi ( define("L_SETUP","Nastaveni"); ), ktery se includuje.
Linux? Nein, danke.
remet
Junior

Odeslat příspěvekod Nargon 10. 11. 2014 08:14

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.
Desktop: Ryzen 7 1800X (3.95GHz, 1.35V), Asus Crosshair VI Hero, 16GB DDR4 Ram (3200MHz), 128GB SSD + 3TB HDD, Nvidia GTX 1080
Notebook: Asus UL50VT 15.6" (SU7300@1.7GHz, 4GB ram, 500GB HDD, Intel GMA 4500MHD + nVidia G210M, dlouha vydrz cca 7+ hod)
Nargon
Moderátor

Odeslat příspěvekod gandor 10. 11. 2014 10:44

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...
gandor
Mírně pokročilý


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 0 návštevníků