Mazagran – translation toolkit pre nette aplikacie
- bazo
- Člen | 620
Ahojte,
cez vikend som spiskal http://mazagran.eu (verzia alpha1), aplikaciu na preklad inych aplikacii. Pouziva sa spolu s Mazagran translation kitom https://github.com/…/translation
princip je podobny ako u gettextu, povodne som tvoril riesenie na zaklade gettextu, ale neslo mi zo skompilovaneho .mo vycitat kontexty, tak namiesto studia formatu som sa rozhodol vytvorit vlastne riesenie.
vela veci v interface chyba, este to planujem zwebsocketovat, namiesto ajaxu.
co to vie:
- automaticky extrahovat retazce na preklad zo zdrojakov(vdaka http://packagist.org/…xt-extractor)
- vytvorit sablonu na preklad, ktora sa da nahrat do Mazagranu
- vytvorit jazykovu verziu na preklad, da sa prekladat rucne, v Mazagrane, compiler automticky doplni pocet pluralov a pluralove pravidlo
- skompilovat subor jazykovej verzie do slovnika pre pouzitie s translatorom
toto vsetko zvlada aj online appka, ktora ma rozhranie velmi podobne poeditu.
co chyba
- skratky do nette a latte na oznacovanie prekladov
- moznost prekladov v kontexte
- spravne naformatovane pluralove pravidla, aby im rozumelo php(viac ternarnych vyrazov potrebuje doplnit zatvorky)
co to bude vediet(mozno :D)
- extrahovane retazce nahrat priamo do Mazagranu
- commenty pre pri prekladoch
- sprava dalsich spolupracovnikov a prekladatelov, moznost obmedzit pristup len na konkretny preklad
- preklad stahovany priamo zo servera(samozrejme cachovany na klientovi)
- automaticke upozornenie klienta o novej verzii prekladu – postback na custom url
format sablon, prekladov je zalozeny na neone.
bugy:
- urcite vela
- skompilovany slovnik zo servera nie je totozny so slovnikom vytvorenym pomocou compilera(neviem preco)
slovnik je len serializovana trieda translator s prekladmi a indexom contextovych sprav
co si o tom myslite?
Editoval bazo (19. 8. 2012 14:13)
- Filip Procházka
- Moderator | 4668
Chtěl bych vidět nějaké screeny. Regl jsem se a při přidávání
překladu cs
mi to hodilo 500 :)
Vytvořil jsem novou zprávu. Ta se přidala 2x – jako translated a untranslated a pak když jsem u té prvni odeslal něco do formuláře, tak se to uložilo do té druhé.
Každopádně je to zajímavý počin a to webové rozhraní je příjemné. Chtělo by to na tom webu nějaký „článek“ se screeny kde bys popsal (očekávané) workflow.
Má to ovšem celé jeden zásadní háček. Konkrétně Extractor. Vytahovat texty z kódu je hodně špatný nápad. Jeden příklad za všechny:
"text" . $text . "text";
Daleko lepší přístup je „extrahovat“ tyhle slovníky „za běhu“. Zkrátka pustíš aplikaci a všechny požadavky na překlad, které nemají odpovídající záznam, se někam uloží bez překladu.
Stejně musíš všechny stavy aplikace otestovat. Ať už ručně nebo automatizovaně. Takže všechny texty ti musí projít přes translator.
Pak už je to hračka.
Editoval HosipLan (19. 8. 2012 14:49)
- bazo
- Člen | 620
HosipLan napsal(a):
Chtěl bych vidět nějaké screeny. Regl jsem se a při přidávání překladu
cs
mi to hodilo 500 :)
to bude sposobene tymi pravidlami, plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2; takuto rovnicu php nevie spravne vyhodnotit. priznam ze cs som nefixoval :D tych jazykov je strasne vela, asi odtial vyberiem nejake najpouzivanejsie a tie poriadne otestujem. alebo teda prijimam pull requesty na opravu :)
Vytvořil jsem novou zprávu. Ta se přidala 2x – jako translated a untranslated a pak když jsem u té prvni odeslal něco do formuláře, tak se to uložilo do té druhé.
toto je velmi zaujimave. tuto bude nejaky skaredy bug.
Každopádně je to zajímavý počin a to webové rozhraní je příjemné. Chtělo by to na tom webu nějaký „článek“ se screeny kde bys popsal (očekávané) workflow.
diky. ked to este trosku odladim pridam screeny.
Má to ovšem celé jeden zásadní háček. Konkrétně Extractor. Vytahovat texty z kódu je hodně špatný nápad. Jeden příklad za všechny:
"text" . $text . "text";
Daleko lepší přístup je „extrahovat“ tyhle slovníky „za běhu“. Zkrátka pustíš aplikaci a všechny požadavky na překlad, které nemají odpovídající záznam, se někam uloží bez překladu.
Stejně musíš všechny stavy aplikace otestovat. Ať už ručně nebo automatizovaně. Takže všechny texty ti musí projít přes translator.
Pak už je to hračka.
vytahovanie texty za behu je rozhodne dobry napad. takto by slo prekladat aj
texty vynimiek.
neviem aky je problem v tvojom pripade, ani jeden z tych textov by nebol
vyextrahovany. texty musia byt oznacene na preklad teda
{_"text" . $text . "text"}
neviem ako toto skonci, ale je to chyba programatora ked to tak zapise. extractor je presne ten isty gettext extractor ktory tu uz dost dlho koluje v doplnkoch. toto este uvediem v readme a v prislusnych triedach.
inak diky, slo mi hlavne o zhodnotenie napadu.
- bazo
- Člen | 620
ok, opravil som tie 500ky.
HosipLan napsal(a):
Vytvořil jsem novou zprávu. Ta se přidala 2x – jako translated a untranslated a pak když jsem u té prvni odeslal něco do formuláře, tak se to uložilo do té druhé.
toto fakt neviem ako sa ti podarilo. pri pridani rovnakeho textu vyskoci vynimka
- Teyras
- Člen | 81
Má to ovšem celé jeden zásadní háček. Konkrétně Extractor. Vytahovat texty z kódu je hodně špatný nápad. Jeden příklad za všechny:
"text" . $text . "text";
Daleko lepší přístup je „extrahovat“ tyhle slovníky „za běhu“. Zkrátka pustíš aplikaci a všechny požadavky na překlad, které nemají odpovídající záznam, se někam uloží bez překladu.
Pokud chci tohle překládat, použiju sprintf(). Když překládáš „za běhu“, těžko získáš definitivní šablonu překladu, což je pro lokalizaci docela užitečná věc. Teda, zíksat tu šablonu můžeš, ale vznikne jako vedlejší produkt testů – není to trochu nechutný?
- Filip Procházka
- Moderator | 4668
Pokud chci tohle překládat, použiju sprintf().
Pravda. To ale můžu v obou případech.
Když překládáš „za běhu“, těžko získáš definitivní šablonu překladu, což je pro lokalizaci docela užitečná věc. Teda, zíksat tu šablonu můžeš, ale vznikne jako vedlejší produkt testů – není to trochu nechutný?
Ne, proč? V praxi to funguje perfektně.
- pekelnik
- Člen | 462
Sorry ale tohle mi neda ;)
Tahat preklady za behu je kravina!
Nutnost „zpusobit“ vsechny stavy aplikace kvuli prekladu je skutecna zhovadilost, protoze:
- nektere stavy nasimulujes skutecne tezko („Na vanoce…“, „Pocitac je vypnuty…“)
- prekladat
"text" . $text . "text"
je nesmysl, protoze to v podstate nikdy neprelozis, protoze nevis co :D tohle se resi parametrizovanym prekladem:"text %s text", $text
- Ot@s
- Backer | 476
pekelnik napsal(a):
Sorry ale tohle mi neda ;)
Tahat preklady za behu je kravina!
Určitě není :-) Souhlasím však s tím, že parametrizované stringy je
třeba hnát přes sprintf()
. Při testování aplikace je stejně
nutné vyzkoušet všechny její stavy, takže tím automaticky dostanu všechny
stringy do slovníku. To je má osvědčená praxe.
- Filip Procházka
- Moderator | 4668
@pekelnik: to mi jako chceš říct, že napíšeš kód, který poběží jen o vánocích a dopředu to neotestuješ? Ale prosimtě :)
Ovšem uznávám, že můj extrémní příklad, se kterým si extractor neporadí, je maličko vykonstruovaný :) Na druhou stranu, stále si stojím za tím, že ukládat řetězce pro překlad za běhu je systémovější a výhodnější.
Editoval HosipLan (20. 8. 2012 9:56)
- Teyras
- Člen | 81
@HosipLan: tak si představ, že s tebou na projektu spolupracuje překladatel a zvaž tohle:
- používáš normální gettext – „Bohužel používáme souborové formáty, které nepodporuje xgettext, takže místo něj spusťte tenhle skript a vygeneruje vám to *.pot“
- extrahuješ za běhu – „Budete si muset nainstalovat PHPUnit a spustit všechny testy, pokud nějaký selže, tak si ten katalog asi holt neaktualizujete…“
- Filip Procházka
- Moderator | 4668
„Tady máte administraci překladů a překládejte“ – kde je problém? Proč by překladatel měl pouštět testy?
- Teyras
- Člen | 81
HosipLan napsal(a):
„Tady máte administraci překladů a překládejte“ – kde je problém? Proč by překladatel měl pouštět testy?
Jo, to je taky řešení, to je fakt. Jediná nevýhoda je, že tím vynucuješ použití tvého administračního nástroje místo standartního gettextu, ale to už je jedno. Pořád ale nechápu, jak můžeš mluvit o systémovým řešení, když de facto spojuješ dva úplně nesouvisející celky – testování a překlad.
- Filip Procházka
- Moderator | 4668
Pořád ale nechápu, jak můžeš mluvit o systémovým řešení, když de facto spojuješ dva úplně nesouvisející celky – testování a překlad.
Ty netestuješ aplikaci, když ji vyvíjíš? Třeba tím, že si otevřeš stránku a zkusíš odeslat formulář?
Když aplikaci spustíš a zavolá se ti někde vevnitř
$translator->translate($something, array($param1, $param2, $param3)); // třeba
tak můžeš udělat dvě věci
- podíváš se do slovníku a vrátíš překlad, pokud není, vrátíš předaný řetězec (prevence selhání)
- pokud překlad neexistuje, tak vložíš překládaný text do slovníku
V administraci si otevřeš slovník, koukneš co přibylo (administrace pozná podle data v databázi) a překládáš. Tohle se absolutně vůbec nevylučuje s gettextem. Můžeš si nechat vygenerovat slovník v libovolném formátu a poslat ho překladateli a pak ho zase nahrát do aplikace. Kde je problém?
- bazo
- Člen | 620
nic nebrani tomu, aby fungoval extractor a aj vycucavaci translator zaroven a aby sa doplnali. mne osobne pride jednoduchsie si nechat texty vyextrahovat ako vsetko preklikavat. hlavne ked su texty aj v emailoch a inych veciach, co sa nedaju vzdy rucne nasimulovat alebo to zaberie dlhy cas a vela namahy.
- Tomas P
- Člen | 27
Oba pristupy (extrakcia slovnika z kodu, runtime tvorenie slovnika) sa
pouzivaju, ziadny z nich nie je vyslovene zly (noflame).
Tiez si myslim ako bazo ze je dobre podporovat oba pristupy.
Tiez mam radsej priamu extrakciu z kodu (pouzival som predtym xgettext) a bez
jej moznosti by som povazoval preklady za tazsie.
vyhoda extrakcie – vygeneruje sa na aktualnej verzii
aplikacie, nic z toho nechyba (pri dodrzani konvencii)
vyhoda postupneho tvorenia slovnika – da sa prelozit
cokolvek iduce cez translate funkciu (obsah premennych)
nevyhoda postupneho tvorenia slovnika – neda sa rozlisit,
ktore slova uz v aplikacii niesu, teda slovnik bude rast, az kym sa nenecha
vygenerovat znovu od zaciatku (rovnako ako pri extrakcii), hrozi ze na nedostane
na vsetky stringy, ktore sa zobrazuju/prekladaju v specialnych pripadoch (rozne
chyby, maily a pod).
- bazo
- Člen | 620
Zdravim,
takze webove rozhranie bolo jemne updatovane.
zmeny:
- uzivatelom pribudol nick, tym co mate ucty som nicky spravil podla emailu
- gravatar v user menu
- mozno importovat prekladove templaty
- vlastnici projektu ho mozu zmazat
- je mozne pridat do projektu dalsieho administratora alebo prekladatela, s obmedzenymi pravami pristupu
- prekladacie rozhranie dostalo strankovanie
- pribudol stream aktivit na projektoch
- nejake zmeny pod kapotou
ak sa niekomu chce tak testujte, hackujte.