NetteTranslator + SQL + Plural forms

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
tany
Člen | 31
+
0
-

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í ?

  1. Nečekaně překládat
  2. 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.

  1. Zachytávací mód pro sběr nepřeložených řetězců (přímo dané sing/plu formy)
  2. 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
+
0
-

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
+
0
-

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
+
0
-

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.