Existuje nějaký ucelený způsob správy jazykových mutací?
- castamir
- Člen | 629
Říkám si, zda neexistuje nějaký lepší systém na správu textů různých jazykových mutací (nikde jsem nic komplexního nenašel). Sám používám systém jedné třídy Resources přístupné přes services, jejíchž metody volají třídy konkrétních překladů. Zkusím to popsat hierarchií souborů tříd pro registrační formulář:
/app
--/models
--/--/Resources
--/--/--Resources.php (hlavní služba)
--/--/--/Registration
--/--/--/--/IRegistration.php (rozhraní pro registrační formulář a stránku
s registrací)
--/--/--/--/En
--/--/--/--/--/Registration.php (konkrétní texty v anglickém jazyce)
--/--/--/--/Cz
--/--/--/--/--/Registration.php (konkrétní texty v českém jazykce)
metoda pak vyhledává stejnojmennou třídu podle parametrem specifikovaného jazyka (pokud neexistuje, nastaví se defaultní jazyk, pokud ani ten, vyhodím výjimku)
public function Registration($lang = "En") {
return $this->getResource($lang, __FUNCTION__);
}
Samotný formulář pak
$resource = $this->context->resources->Registration("En");
...
$form->addText("name", $resource->name())
->addRule(Form::FILLED, $resource->filled())
->addRule(Form::MAX_LENGTH, $resource->max_lenght(25), 25)
->setAttribute("placeholder", "John")
->setAttribute("tooltip", $resource->info_name());
...
EDIT: ještě mě napadá, že bych mohl rozhraní dát do úplně jiného jmenného prostoru (složky) pod /Resources a přidávat konkrétní jednu jazykovou složku (Cz, En,…), která bude implementovat všechny překlady – pro vložení dalšího překladu pak bude stačit vložit jednu složku se všemi překlady a mělo by to fungovat bez zásahu do původního kódu…
/app
--/models
--/--/Resources
--/--/--Resources.php (hlavní služba)
--/--/--/Interfaces
--/--/--/--/IRegistration.php (rozhraní pro registrační formulář a stránku
s registrací)
--/--/--/En
--/--/--/--/Registration.php (konkrétní texty v anglickém jazyce)
--/--/--/Cz
--/--/--/--/Registration.php (konkrétní texty v českém jazykce)
Editoval castamir (13. 5. 2012 13:23)
- Elijen
- Člen | 171
Nette již vlastní rozhraní na překlady integrované má. To co děláš, je tak trochu masochysmus :)
Popravndě jsem ale stále nenarazil na implementaci, která by fungovala na 100%. Zkus pohledat googlem, zatím jsem namátkou narazil na toto: