Nette Translation Panel – překlady přímo v prohlížeči

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

Zdravím všechny,
mám odmaturováno, tak jsem nyní kompletně přepsal TranslationClient. Nyní využívá Nette Debugbar a vypadá asi takto:

Fešák, co? :-)

Rozhraní se IEditableTranslator nezměnilo, použití je podobně jednoduché:

$translator = Environment::getService('ITranslator');
Debug::addPanel(new TranslationPanel($translator));

Testováno v: FF 3.6.3, Chrome 6.0.401.1 dev, IE8 (tam to má nějaké drobné mušky, zdá se), Opera 10.53. Zatím nefunguje přepínání do externího okna a ani nevím, jestli to vůbec bude možné zrealizovat. Ještě jsem také nedělal upozornění na nepřeložené řetězce, přibude v některém z pozdějších commitů.

Byl bych rád, kdyby si někdo našel chvilku panel otestovat a případně mi ho pořádně zkritizovat. :-)

Zdrojáky naleznete na Githubu: Nette Translation Panel.

// Doplnění: kdyby měl někdo problémy se stažením: nette-translation-panel.zip.

Editoval Panda (9. 6. 2010 9:18)

Mikulas Dite
Člen | 756
+
0
-

Moc se mi to líbí. Podporuje i inline editaci? Tzn. přímo odkazovat z textu na editační dialog kliknuté fráze?

Panda
Člen | 569
+
0
-

Nepodporuje, ono by to ani pořádně nešlo – text ve stránce může být vložený v podstatě kdekoliv a obalení nějakým HTML kódem nebo navěšení akce onclick by nemuselo dělat dobrotu.

Honza Kuchař
Člen | 1662
+
0
-

A co onlick na body a sledovat target? :-) To jepodle mě jediné správné řešení na tuhle situaci. A pak to samozřejmě fungovat bude. Případně udělat něco jako CTRL+doubleclik.

Panda
Člen | 569
+
0
-

A jak pak poznáš, který řetězec máš v translatoru vyhledat? Řetězec obsahovat HTML tagy, být začleněn do textu bez jakéhokoliv ohraničení, může vypadat úplně jinak (sprintf)…

//Doplnění: neberte to prosím tak, že bych se bránil návrhům a podnětům, ale zrovna toto mi připadá opravdu velmi, velmi komplikované.

Editoval Panda (20. 5. 2010 9:03)

Honza Kuchař
Člen | 1662
+
0
-

@Panda: Ha máš pravdu, to máš tedy pravdu. To by si musel TranslationPanel přepsat makro _ pro překlady a obalit ten text nějakou značkou. Ale máš pravdu, zbytečně komplikované a nepraktické.

Panda
Člen | 569
+
0
-

Několik drobných změn:

  • v případě, že panel ví o nepřeložených řetězcích, jeho ikonka zčervená
  • výška panelu je nastavitelná
  • opravena chybka v IE (testováno jen na IE8)
  • v seznamu řetězců jsou ty nepřeložené vždy nahoře

TODO:

  • verze pro PHP 5.3 (Vrtak-CZ, díky, „Vrtáku“ :-) )
  • u ikonky počet nepřeložených řetězců (facebook-style)
  • dořešit podporu pro překlad více jazyků zároveň

Jen tak mimochodem: zkoušel už to někdo rozjet?

Editoval Panda (23. 5. 2010 12:23)

Mikulas Dite
Člen | 756
+
0
-

Ještě ne, ale už se tešim až se naskytne první příležitost. A mám nápad na design: bylo by lepší postavit panel na výšku, zmizí prázdný obdélník v IV. kvadrantu a bude vidět víc frází.

(content aware fill to úplně nezvládnul : )

dotTwelve
Člen | 167
+
0
-

Vypisuje mi to chybu Service 'ITranslator' not found. pri vlozeni

<?php
$translator = Environment::getService('ITranslator');
Debug::addPanel(new TranslationPanel($translator));
?>

do bootstrapu. To musim nekde tu sluzbu zaregistrovat, treba v configu? Proc se tato sluzba neregistruje automaticky?

Panda
Člen | 569
+
0
-

No protože si tu třídu, která implementuje ITranslator (resp. IEditableTranslator), musíš napsat sám. Toto je pouze interface, který k té třídě bude přistupovat, nikoliv kompletní řešení překladů.

Registraci je pak možno provést v config.ini:

[common.service]
ITranslator = MyTranslator

Svůj translator, který je založený na JSONu, také zveřejním, ale to až se dostane do takového stádia, kdy bude dle mého soudu zveřejnění hoden.

Panda
Člen | 569
+
0
-

Mikulas Dite napsal(a):

Ještě ne, ale už se tešim až se naskytne první příležitost. A mám nápad na design: bylo by lepší postavit panel na výšku, zmizí prázdný obdélník v IV. kvadrantu a bude vidět víc frází.

Takhle?

Mezi oběma layouty lze přepínat pomocí druhého parametru v konstruktoru (mě osobně prázdný obdélníček nevadí a lépe se mi pracuje s horizontálním uspořádáním).

Debug::addPanel(new TranslationPanel($translator, TranslationPanel::LAYOUT_VERTICAL));
Mikulas Dite
Člen | 756
+
0
-

Panda napsal(a):

Takhle?

Jo, bezva, to je parádní žes na to myslel : )

Panda
Člen | 569
+
0
-

Mikulas Dite napsal(a):

Jo, bezva, to je parádní žes na to myslel : )

Nemyslel, je to čerstvý commit. Děkuji za nápad. :-)

iguana007
Člen | 970
+
0
-

Moc hezké, už se těším na final ;)

nAS
Člen | 277
+
0
-

Honza Kuchař napsal(a):

… To by si musel TranslationPanel přepsat makro _ pro překlady a obalit ten text nějakou značkou …

To mi přijde jako docela dobrý nápad a tak složité na implementaci by to nemuselo být.

Honza Kuchař
Člen | 1662
+
0
-

A co třeba v <title> nebo mezi <script></script> Já bych to nedělal.

Editoval Honza Kuchař (23. 5. 2010 2:45)

Panda
Člen | 569
+
0
-

Tak už máme i číslíčko s počtem nepřeložených řetězců:

Zatím se ale stydí v IE, zobrazuje se jen jako tečka 2×2 pixely.

iguana007
Člen | 970
+
0
-

Panda napsal(a):

Tak už máme i číslíčko s počtem nepřeložených řetězců:

Zatím se ale stydí v IE, zobrazuje se jen jako tečka 2×2 pixely.

Je to lepší a lepší ;) Jdu to zkusit.

Honza Kuchař
Člen | 1662
+
0
-

Taky se mi to začíná líbit více a více. Prostě vývoj s takovýmito nástroji už začíná být radost. Asi se mě to donutí pochopit, jak funguje GetText a vůbec překlady webů. :-)

Editoval Honza Kuchař (24. 5. 2010 15:59)

nAS
Člen | 277
+
0
-

Honza Kuchař napsal(a):

A co třeba v <title> nebo mezi <script></script> Já bych to nedělal.

Pravda, pravda.

despiq
Člen | 320
+
0
-

mel bych jeste jedno prani, pokud menim jiz prelozene retezce pak trochu badam co je co, slo by do vypisu zdrojovych zprav pridat i prelozeny singular? resp ja vim ze slo jen sem na to koukal a sem uz asi vymastenej, mozna na to juknu rano znova a docvakne mi to

Panda
Člen | 569
+
0
-

Jak přesně by sis to představoval? Oba řetězce vedle sebe se tam asi vejít nebudou, mohu ale přeložený řetězec (pokud je) zobrazit v seznamu místo zdrojového.

despiq
Člen | 320
+
0
-

dobry napad!

despiq
Člen | 320
+
0
-

jeste jedna vec by me zajimala, snazim se udelat gettexttranslator s podporou translationpanelu a vsechno je v pohode az na to ze me zarazi ze sem nenasel zadnou php knihovnu na po ⇒ mo
takze sem nasel jen pouziti msgfmt.py coz ale vyzaduje exec a prijde mi to nepekne, nevite o necem?

Panda
Člen | 569
+
0
-

Je to tam.

despiq
Člen | 320
+
0
-

dekuju pekne

norbe
Backer | 405
+
0
-

Převod přímo z PO na MO nemám, ale už delší dobu se mi válí na disku scriptík pro převod z pole řetězců do MO souboru. Jeho funkčnost jsem zatím neměl čas otestovat.

despiq
Člen | 320
+
0
-

tak presne tohle sem potreboval ale nenasel,dik

Panda
Člen | 569
+
0
-

Experimentálně jsem přidal odkládání nepřeložených řetězců do session (pokud je k dispozici – při renderování debugbaru je na její startování pozdě), takže lze nyní překládat i flash zprávičky. Vedlejším efektem je, že je možno si v klidu webem procházet a až pak přeložit vše nepřeložené.

despiq
Člen | 320
+
0
-

dekuju

tenhle panel me proste bavi

GettextTranslator s podporou Translation Panelu, chce to nekdo?(je to zavisle na exec(‚msgfmt‘))

norbe
Backer | 405
+
0
-

Ta funkce co jsem tu daval nefunguje nebo s ní byl nějakej problém?

despiq
Člen | 320
+
0
-

no to ja popravde nevim jestli funguje, resp funguje, jestli ten soubor vypisuje spravne to nevim protoze zapisuje pole prekladu ale ne hlavicku, noa bez hlavicky to nejde, jenze ja sem takova hlava ze ani nevymyslim jak tu hlavicku zapsat a nejak sem tim uz prozatim nemohl ztracet cas

iguana007
Člen | 970
+
0
-

Nešlo by to prosím nahrát někam jinam než na GitHub? Mě se to z tama nedaří stáhnout. Vždycky mi to před stahováním vytuhne … díky moc ;)

despiq
Člen | 320
+
0
-

ve vsech prohlizecich?

iguana007
Člen | 970
+
0
-

Tak už není třeba … nechal jsem to bežet a po x minutách mi nakonec vyskočilo Save as… okno.

Díky ;)

Panda
Člen | 569
+
0
-

Přidal jsem do úvodního příspěvku zdrojáky v ZIPu.

Panda
Člen | 569
+
0
-

Pokud tento panel používáte, narazili jste při používání na nějaký problém? Je vše stabilní, nedošlo někdy ke ztrátě dat? Pokud vše bylo v pořádku, zařadil bych tento panel mezi rozšíření na addons, ať se o něm ví trochu víc.

Máte nějaký nápad, co přidat/zlepšit/odebrat/upravit/zkrášlit? Já osobně bych rád dodělal podporu pro rozčlenění řetězců do kategorií (například podle souboru s překladem) a podporu pro překlad více jazyků současně. Jaký je Váš názor?

despiq
Člen | 320
+
0
-

zatim je to v poradku,
co by se mi jeste libilo:
nejaky zpusob filtrace nebo vyhledavani, k nalezeni jiz prelozeneho slova je treba pouzit hledani v prohlizeci jelikoz se to radi podle originalnich slow, neni to problem ale bylo by to hezke

taky by se mi libilo upozorneni na pluraly k prelozeni ktere nemaji zadane vsechny nutne pluraly

moc ty moje vety nedavaj smysl ale snad to pochopis

rozcleneni do kategorii moc nerozumim a preklad vice jazyku soucasne nepotrebuji, prijde mi logicke aktualni jazyk – aktualni preklad, vlastne si ani nevybavim situaci kdy by to bylo jinak

iguana007
Člen | 970
+
0
-

Ja bych uvital nejaky lepsi navod, jak to rozjet. Vcera jsem to zkousel a nepovedlo se mi to. Porad to po me chce ITranslator tridu (nebo sluzbu, ted z hlavy presne nevim) a nevim kde ji spravne zapnout

Editoval iguana007 (10. 6. 2010 8:07)

norbe
Backer | 405
+
0
-

Tu si musíš vytvořit :-) Jestli používáš Gettext pro překlad, požádej despiq-a, jestli nezveřejní svůj výtvor. Tobě bych zatím doporučil si pořádně prostudovat objektový programování a hlavně význam rozhraní

Panda
Člen | 569
+
0
-

Je to tam, despiqu, díky za nápady!

// Doplnění: koukám, že jsou problémy s rozběháním… Během dneška zveřejním svůj JsonTranslator.

Editoval Panda (10. 6. 2010 9:07)

dotTwelve
Člen | 167
+
0
-

Tak to vypada, ze ‚despiq‘ to vsechno brzdi ;-) nechces to zverejnit? Pouzivat GetText a GetTextExtractor ale nevim jak to zprovoznit s timto panelem.

despiq
Člen | 320
+
0
-

no teda, ale jak sem rikal je to zavisly na exec a msgfmt takze nevim jestli je to na beznem hostingu pouzitelne
https://gist.github.com/432842
neni to okomentovane, neni to hezke ale je to tak nejak funkcni, translationpanel se musi pridat uz v bootstrapu, pluraly si to bere z jiz existujiciho mo souboru, takze na zacatku je vzdy treba vytvorit alespon prazdny soubor s nastavenim pluralu, gettextextractor uz by nemel byt potreba na nic

skoda jen ze tu neni Roman, ten by vedel jak to udelat bez zavislosti na msgfmt, nebo nekdo jinej, nevite jak zapsat hlavicky do binarniho mo souboru?

a dik pando za upravy to se moc hodi

Editoval despiq (10. 6. 2010 13:35)

despiq
Člen | 320
+
0
-

TranslationPanel.panel.phtml:374
 – if (stringData[i].match(filter))
+ if (typeof(stringData[i]) == String && stringData[i].match(filter))

neco takoveho bych tam jeste udelal, narval sem tam spatny data, hodilo to js error a bylo po vyhledavani

iguana007
Člen | 970
+
0
-

despiq napsal(a):
skoda jen ze tu neni Roman, ten by vedel jak to udelat bez zavislosti na msgfmt, nebo nekdo jinej, nevite jak zapsat hlavicky do binarniho mo souboru?

Co toto? http://wordpress-soc-2007.googlecode.com/…/php-msgfmt/

despiq
Člen | 320
+
0
-

zas tam nevidim ty hlavicky

Panda
Člen | 569
+
0
-

despiq napsal(a):

TranslationPanel.panel.phtml:374
 – if (stringData[i].match(filter))
+ if (typeof(stringData[i]) == String && stringData[i].match(filter))

neco takoveho bych tam jeste udelal, narval sem tam spatny data, hodilo to js error a bylo po vyhledavani

U plurálů je stringData pole. Jaký error Ti to hodilo? Můžeš mi poskytnout výstup z IEditableTranslator::getStrings(), který chybu způsobil?

// Pardon, díval jsem se na jinou podmínku, máš pravdu. :-)

Editoval Panda (10. 6. 2010 20:23)

Patrik Votoček
Člen | 2221
+
0
-

Necheš k tomu udělat nějáké hezčí HowTo na addons?

iguana007
Člen | 970
+
0
-

vrtak-cz napsal(a):

Necheš k tomu udělat nějáké hezčí HowTo na addons?

+1

Patrik Votoček
Člen | 2221
+
0
-

Protože se mě to hodí tak jsem na tom trochu zamakal. :-) https://github.com/…lation-Panel