NetteTranslator + SQL + Plural forms
- tany
- Člen | 31
Napsal jsem si jednoduchý Translator, který používá jako storage Databázi + Cache. Proč to sem píšu ? Když na něm trochu zapracuju, tak jsem ochotný zveřejnit pro použití ostatním.
O co přesně jde ?
Gettext translator od Patrika Votočka mi přijde na malé projekty zbytečně
robusní. (Navíc tam není řešené překládaní v administraci).
Napsal jsem proto menší řešení, které používá jako storage MySQL
(Ostatní databáze by neměli být problém)
Při použití cache, nebude zpomalení aplikace téměř znát, cache se
načítá jednou, navíc u malých projektů se prakticky na překlady
nesahá.
Co to umí ?
- Nečekaně překládat
- Plural forms
Ty jsou zde pro jednoduchost kódu řešené jako filtr implementující ITranslateFilter, kterému se předávají zdrojová data překladu a řeší samotný překlad.
- Zachytávací mód pro sběr nepřeložených řetězců (přímo dané sing/plu formy)
- Překlady pro administraci (ty jsou v raném stádiu)
Kdyby byl zájem, můžu tento Translator dokopat do releasovatelné podoby.
- Tomáš Votruba
- Moderator | 1114
Co se týče registrace, můžeš se inspirovat návodem v Kuchařce, resp. jestli to bude ještě kratší, tím lépe :).
Hodím ti pár myšlenek:
- Bylo by fajn, kdyby to umělo projít i presentery a zachytit všechny flashMessage (v současné verzi NetteTranslator nejdříve tyto stavy musí nastat). Tedy ad 3., jestli tím myslíš, nějaký parametr a pak „projdu všechny soubory, kde by mohlo být něco pro překlad, včetně presenterů a uložím“, tak zupa!
- 4. tj?
- Možnost zpřístupnit někomu online, třeba když překlad dělá vzdálený kolega (jednoduše!), možná bude fungovat přes admin jak zmiňuješ.
Zájem určitě bude, když to bude rychlejší, schopnější, lepší. Těším se na demo.
- tany
- Člen | 31
Ad: Schmutzka
Procházet presentery asi ne, flashe by jsem spíše řešil jako obal nad danou metodu. Nejspíš něce ve smyslu:
<?php
protected function sendFlashMessage($message,$replaces = array())
{
foreach($replaces as $pattern => $replace)
{
str_replace($pattern, $replace,$message);
}
$this->flashMessage($this->getTranslator()->__($message));
}
?>
a pok to lze jednoduse volat:
<?php
$this->sendFlashMessage('Item %s% was neco ..',array('%s%' => 'Nadpis'));
?>
K bodu 4 :
Jedná se překladování v administraci .. čili kompletní správa jazyků a překladů.
Rychlejší to určitě nebude, je to pro jiný segment webů, než je Gettext .. Dělám to spíše jako alternativu pro malé projekty ..
- Tomáš Votruba
- Moderator | 1114
Pěkná funkce, ještě kdyby zachovala možnost css třídy, stejný název a přidání do BasePresenter, bude perfektní.
Rychlost je pomíjivá. Těším se na výsledek.