abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 14:33 | Pozvánky

    O víkendu 11. a 12. května lze navštívit Maker Faire Prague, festival plný workshopů, interaktivních činností a především nadšených a zvídavých lidí.

    Ladislav Hagara | Komentářů: 0
    včera 21:55 | Nová verze

    Byl vydán Fedora Asahi Remix 40, tj. linuxová distribuce pro Apple Silicon vycházející z Fedora Linuxu 40.

    Ladislav Hagara | Komentářů: 10
    včera 20:22 | IT novinky

    Představena byla služba Raspberry Pi Connect usnadňující vzdálený grafický přístup k vašim Raspberry Pi z webového prohlížeče. Odkudkoli. Zdarma. Zatím v beta verzi. Detaily v dokumentaci.

    Ladislav Hagara | Komentářů: 2
    včera 12:55 | Nová verze

    Byla vydána verze R14.1.2 desktopového prostředí Trinity Desktop Environment (TDE, fork KDE 3.5). Přehled novinek v poznámkách k vydání, podrobnosti v seznamu změn.

    JZD | Komentářů: 0
    7.5. 18:55 | IT novinky

    Dnešním dnem lze již také v Česku nakupovat na Google Store (telefony a sluchátka Google Pixel).

    Ladislav Hagara | Komentářů: 10
    7.5. 18:33 | IT novinky

    Apple představil (keynote) iPad Pro s čipem Apple M4, předělaný iPad Air ve dvou velikostech a nový Apple Pencil Pro.

    Ladislav Hagara | Komentářů: 2
    7.5. 17:11 | Nová verze

    Richard Biener oznámil vydání verze 14.1 (14.1.0) kolekce kompilátorů pro různé programovací jazyky GCC (GNU Compiler Collection). Jedná se o první stabilní verzi řady 14. Přehled změn, nových vlastností a oprav a aktualizovaná dokumentace na stránkách projektu. Některé zdrojové kódy, které bylo možné přeložit s předchozími verzemi GCC, bude nutné upravit.

    Ladislav Hagara | Komentářů: 0
    7.5. 13:44 | Komunita

    Free Software Foundation zveřejnila ocenění Free Software Awards za rok 2023. Vybráni byli Bruno Haible za dlouhodobé příspěvky a správu knihovny Gnulib, nováček Nick Logozzo za front-end Parabolic pro yt-dlp a tým Mission logiciels libres francouzského státu za nasazování svobodného softwaru do praxe.

    Fluttershy, yay! | Komentářů: 0
    7.5. 13:11 | IT novinky

    Před 10 lety Microsoft dokončil akvizici divize mobilních telefonů společnosti Nokia a pod značkou Microsoft Mobile ji zanedlouho pohřbil.

    Ladislav Hagara | Komentářů: 2
    6.5. 21:33 | Komunita

    Fedora 40 release party v Praze proběhne v pátek 17. května od 18:30 v prostorách společnosti Etnetera Core na adrese Jankovcova 1037/49, Praha 7. Součástí bude program kratších přednášek o novinkách ve Fedoře.

    Ladislav Hagara | Komentářů: 5
    Podle hypotézy Mrtvý Internet mj. tvoří většinu online interakcí boti.
     (63%)
     (7%)
     (13%)
     (16%)
    Celkem 142 hlasů
     Komentářů: 10, poslední včera 17:35
    Rozcestník

    Gettext snadno a rychle: Překladatelská část

    20. 1. 2010 | Daniel Kolesa | Návody | 8791×

    2. Překladatelská část

    link

    Pokud jste pouze překladatel, není nutné znát všechny metody úpravy zdrojového kódu. Spíše musíte znát několik nástrojů pro práci s překlady a jak to celé funguje. Překladatelská část bude počítat se standardní složkou po.

    A. Vytváříme nový překlad

    link

    Jedna z možností, které u překladu programu mohou nastat, je, že do vašeho jazyka ještě program nebyl přeložen. V tomto případě je nutné vygenerovat šablonu pro překlad a tu pak přeložit. Vlezte si proto v terminálu do složky po (nachází se ve složce se zdrojovým kódem programu a soubory jako Makefile.amconfigure.ac).

    cd po

    A vygenerujeme si novou šablonu (.pot soubor) – k tomu slouží program intltool-update:

    intltool-update -p

    Parametr -p řekne programu, aby vygeneroval pouze .pot šablonu. Měl by se tam vytvořit soubor nazevprogramu.pot. Ten si otevřete v textovém editoru a upravte podle části „Testujeme“ ve vývojářské části.

    Po úpravách jej přejmenujte na cs.po (pokud překládáte do češtiny). Teď je soubor připraven k překladu. Pro další překlad budete potřebovat nějaký překladatelský nástroj. Jak už bylo zmíněno ve vývojářské části, dva nejlepší jsou POEditKBabel (jeden je pro Gtk+, druhý pro Qt/KDE). Já doporučuji nainstalovat POedit. Po instalaci si jej spusťte. Zeptá se vás na určité údaje, vyplňte je, budou se zaznamenávat do překladu. Potom si ním už můžete otevřít váš cs.po. Rozhraní je velice jednoduché a nemyslím, že by s ním měl mít někdo problémy. Další věci už popíše následující obrázek:

    poedit

    Lišta menu nahoře:

    Soubor
    • Správce katalogů – umožňuje snadnou správu projektů. Při přidání nového projektu si najde veškeré .po soubory a ukáže jejich stav atd. Při zadávání složky vyberte tu, která obsahuje složku po – ale to je pro nás nyní nedůležité, hodí se pro velké projekty a mnoho jazyků k překladu.
    • Nový katalog – vytvoří nový .po soubor. Většinou nedůležité.
    • Nový katalog z POT souboru – umožňuje vytvořit nový .po katalog automaticky bez úpravy .pot souboru a přejmenování.
    • Exportovat – umožňuje exportovat katalog do HTML souboru.
    Editovat
    • Zkopírovat originál do položky s překladem – překopíruje řetězec k přeložení do řetězce přeloženého. Zkratka Alt+C.
    • Zobrazit odkazy – ukáže řetězec ve zdrojovém kódu.
    • Překlad je nepřesný – označí řetězec jako fuzzy.
    • Editovat komentář – přidá k řetězci nějaký komentář.
    • Nastavení – umožňuje se znova dostat k volbám vaší e-mailové adresy atd.
    Katalog
    • Aktualizovat ze zdrojového kódu – aktualizuje katalog ze souboru POTFILES.
    • Aktualizovat z POT souboru – aktualizuje katalog z .pot souboru který vyberete (tzn. přidá nové položky, které ve vašem překladu chyběly, vymaže staré atd.).
    • Smazat staré překlady – vymaže překlady, které už nejsou v kódu.

    Dále můžete vidět toolbar (nástrojovou lištu) a pod ním seznam přeložených/nepřeložených/starých řetězců. Ty se barevně odlišují:

    • Žluté – řetězec byl v kódu upraven od posledního překladu („neplatné“).
    • Modré – řetězec ještě nebyl přeložen.
    • Hvězdička vlevo – nepřesný překlad.

    Pod seznamem jsou dvě pole. To horní je původní řetězec. Překlad tedy probíhá tak, že pomocí Alt+C zkopírujete horní do spodního a spodní přeložíte. Až bude vše přeloženo, uložte soubor. Pokud budete chtít svůj překlad později aktualizovat, vygenerujte si nový .pot pomocí intltool-update a z menu Katalog vyberte Aktualizovat z POT souboru.

    Nyní, když máte přeloženo, zbývá upravit soubor LINGUAS ve složce po – vypadá nějak takhle:

    fr it km pl

    Prostě kódy zemí oddělené mezerami. Kódy MUSÍ být seřazeny podle abecedy. Upravte si soubor, aby vypadal takto:

    cs fr it km pl

    Jeho obsah závisí na počtu překladů. Pokud program ještě nebyl překládán, je prázdný. Tím by byla práce hotova.

    B. Upravujeme překlad

    link Pokud už program někdo upravoval před vámi, je to jednodušší než vytvářet nový. Postupujte podle návodu pro tvorbu překladu, ale není nutné upravovat soubor LINGUAS a upravovat .pot. Prostě jen vygenerujte nový .pot pomocí intltool-update, otevřete si cs.po a aktualizujte jej z POT.

    C. Program používá jiný systém pro instalaci

    link

    Pokud program využívá jiný systém, jako třeba vlastní Makefile, pak vám intltool-update nebude fungovat a pro vytvoření POT souboru budete muset použít xgettext:

    xgettext --keyword=_ --keyword=N_ --keyword=D_ --keyword=DN_ *.c -o program.pot

    Při překladu postupujte stejně, ale systém skladování po souborů a jejich instalace se může lišit, podle Makefile.

    Pokud je program psán v jazyce Python, místo xgettext použijte pygettext:

    pygettext --keyword=_ --keyword=N_ --keyword=D_ --keyword=DN_ *.py -o program.pot

    Programy, které byste měli znát

    link

    Programy, které se chovají stejně jako volby v POEditu, ale jsou do příkazové řádky. Často mají parametr -D(--directory), který určuje složku, kde se má hledat vstupní soubor(y).

    msgfmt – vygeneruje z .po souboru binární .mo. POEdit vytváří .mo soubory sám při ukládání.

    Použití:

    msgfmt cs.po -o myapp.mo # vytvoří z cs.po myapp.mo
    msginit – vytvoří nový .po soubor z POT souboru. Stejné jako Nový katalog z POT souboru v POEditu.

    Použití:

    msginit -i my.pot -o my.po # vytvoří z my.pot my.po
    msgmerge – stejné jako Aktualizovat z POT souboru v POEditu.

    Použití:

    msgmerge -U my.po my.pot # aktualizuje my.po z my.pot
    msgunfmt – z .mo souboru vygeneruje opět .po soubor.

    Použití:

    msgunfmt myapp.mo -o cs.po # udělá z myapp.mo soubor cs.po
    msgattrib – filtruje řetězce z katalogu podle jejich atributů. Lze je také upravovat (viz man msgattrib(1)).

    Použití:

    msgattrib --translated cs.po # vypíše přeložené řetězce
    msgcat – slučuje .po soubory.

    Použití:

    msgcat one.po two.po -o three.po # sloučí one.po a two.po do souboru three.po
    msgcmp – porovná po a pot soubor, jestli obsahují stejné řetězce.

    Použití:

    msgcmp my.po program.pot # porovná my.po a program.pot
    msgcomm – vypíše společné věci ve dvou po souborech.

    Použití:

    msgcomm one.po two.po # porovná dva po soubory
    msgconv – převede po soubor do jiného kódování.

    Použití:

    msgconf --to-code=utf-8 -o utf.po cp1250.po
    # převede cs1250.po do utf-8 kódování a výsledek zapíše do utf.po
    msgen – udělá anglický katalog z .pot souboru popř. z nepřeloženého nebo částečně přeloženého .po souboru (tzn. vyplní nepřeložené řetězce původním řetězcem).

    Použití:

    msgen my.pot -o en.po # vyplní pot šablonu
    msgexec – spustí nějaký příkaz pro vstupní .po soubor(y), který čte ze standardního vstupu, příkaz aplikuje pouze na přeložené řetězce.

    Použití:

    msgexec -i my.po cat
    # vypíše přeložené řetězce + hlavičku .po souboru (řádky jako language-team atd.)
    msgfilter – funguje podobně jako msgexec, ale příkaz čte ze standardního vstupu, něco upraví a výsledek vypíše na výstup – ne jen překlady jako msgexec, ale celý soubor – a příkaz aplikuje pouze na přeložené řetězce.

    Použití:

    msgfilter -i en.po sed -e 's/error/success/g'
    # nahradí v překladu všechna slova „error“ za „success“
    msggrep – podobné jako grep, ale pro překlady.

    Použití:

    msggrep --msgstr -F -e "error" en.po
    # vypíše všechny přeložené řetězce, které obsahují slovo „error“;
    # pokud nahradíte --msgstr s --msgid, tak vypíše z předloh,
    # pokud nahradíte -F za -E, můžete zadat regulární výraz
    msguniq – sloučí duplicitní řetězce.

    Použití:

    msguniq -o unified.po my.po
    # sloučí duplicitní řetězce v my.po a uloží jako unified.po

    3. Užitečné odkazy, závěr

    link

    Návod se blíží ke konci.. pokud potřebujete další informace, zde je kompletní manuál k gettextu:

    http:#www.gnu.org/software/gettext/manual/gettext.html

    V článku se bohužel nedalo popsat vše, ale alespoň určitý základ a nejdůležitější věci nutné pro správu překladů jsem popsal. Při psaní článku jsem čerpal z výše uvedeného odkazu a vlastních zkušeností (většinou pokus-omyl). Na další věci se také můžete ptát v diskusi. Kompletní projekt jak se standardním Makefile, tak s autotools je přiložen k článku.

           

    Hodnocení: 100 %

            špatnédobré        

    Nástroje: Tisk bez diskuse

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    Komentáře

    Vložit další komentář

    Jan Drábek avatar 20.1.2010 07:08 Jan Drábek | skóre: 41 | blog: Tartar | Brno
    Rozbalit Rozbalit vše Re: Gettext snadno a rychle
    Možná by chtělo ještě zdůraznit, že článek má i druhou část, takhle je to vcelku nešikovně "schované".

    Btw. Velice prakticky napsaný článek ;-)
    01010010 01000101 01010000 01101100 01001001 00110010 01000100 01100101 01010110
    20.1.2010 08:16 CET
    Rozbalit Rozbalit vše Re: Gettext snadno a rychle
    Soubor uložte jako gettexttest.po a nepokoušejte se jej překládat.
    Proc ne??? Ja to vzdycky otevren ve vimu a prekladal jsem. Co je na tom za problem?
    20.1.2010 14:23 ---- | skóre: 33 | blog:
    Rozbalit Rozbalit vše Re: Gettext snadno a rychle
    no, editory určené k tomuto účelu jako poedit při překladu taky zapisují správné informace o kódování v hlavičce - je to jistější že se ti to kódování nerozhodí :)

    ale když soubor máš už částečně přeložený třeba tak můžeš něco dopřekládat i ve vimu
    20.1.2010 18:48 petr_p | skóre: 59 | blog: pb
    Rozbalit Rozbalit vše Re: Gettext snadno a rychle

    Nejenom kódování, ale také jméno posledního překladatele, časovou značku poslední úpravy překladu.

    Na druhou stranu musím říct, že já mám univerzální Makefile, který tohle (a spoustu jiných věcí jako odeslání překladu robotovi) za mě dělá a používám taky vim. Grafické nástroje mě neoslovili (asi protože mám zkušenost jen s příšerným linguistem).

    20.1.2010 19:38 ---- | skóre: 33 | blog:
    Rozbalit Rozbalit vše Re: Gettext snadno a rychle
    jasně ;)

    v tvém případě bych radši použil autotools, který udělá vše za tebe
    20.1.2010 19:38 Makefile
    Rozbalit Rozbalit vše Re: Gettext snadno a rychle
    Nechces se o ten svuj Makefile podelit?
    20.1.2010 10:25 disorder | blog: weblog
    Rozbalit Rozbalit vše Re: Gettext snadno a rychle
    pekne. este sa v pythone pouziva aj pybabel, napr.:
    pybabel extract -F babel.cfg -o app.pot app
    pybabel update -i app.pot -d . -D app -l sk
    
    20.1.2010 13:57 leko
    Rozbalit Rozbalit vše lokalize
    Super clanok, pekne podrobne popisany.

    Pri odporucani na kde/qt prekladatelsky program by som neoporucal uz kbabel, ten je zastaraly, asi by tam mal byt spomenuty len lokalize. Ten je najlepsi najma pri preklade vacsich projektov. Ma funkcie bez, ktorych sa tazko preklada (translation memory, slovnik, inteligentne vkladanie tagov, kontrola pravopisu na cely .po apod.)
    20.1.2010 14:57 Andrej Herceg | skóre: 43
    Rozbalit Rozbalit vše Re: lokalize
    Kbabel je zastaralý možno pre používateľov KDE4 (KDE 4, KDE SC 4...). ;) Kbabel podporuje všetko, okrem toho inteligentného vkladania tagov (teda aspoň si myslím, nič špeciálne s tagmi som nikdy nepotreboval robiť).
    belisarivs avatar 20.1.2010 17:14 belisarivs | skóre: 22 | blog: Psychobláboly
    Rozbalit Rozbalit vše Re: lokalize
    Kbabel zatim umi oproti Lokalize navic kontrolu syntaxe. Ale to jde provadet skripty (pology), ktere pak otevrou syntakticky nespravne retezce primo v Lokalize.
    IRC is just multiplayer notepad.
    20.1.2010 18:42 petr_p | skóre: 59 | blog: pb
    Rozbalit Rozbalit vše Vynucení syntaxe ze zdrojového kódu

    Gettext umí podle klíčových slov hlídat syntaxi mezi msgid a msgstr. Například printf(3) escapovací sekvence:

    #: ../src/aosd/aosd_ui.c:242
    #, c-format
    msgid "monitor %i"
    msgstr "monitoru %i"

    Nevíte, jestli lze ve zdrojovém kódu vyznačit, že daný řetězec není formátovací printf řetězec?

    V jednom programu je použito něco jako _("100% during") a xgettext takovému msgid přidává příznak c-format, což je samozřejmě špatně. Kontrolní mechanismy pak křičí, že v překladu nesedí formátovací sekvence kolem procentítka. A mně nebaví opakovaně odmazávat příznak c-format.

    Čekal bych, že gettext něco takového bude umět, protože zrovna tak umí extrahovat kontextové komentáře zdrojového kódu ohledně překladu (často se používá na upozornění překladatelů programátorem, že určité slovo v hlášce je lexikál nebo vlastní jméno).

    20.1.2010 19:36 ---- | skóre: 33 | blog:
    Rozbalit Rozbalit vše Re: Vynucení syntaxe ze zdrojového kódu
    bych to vyescapoval..

    _("100\% during")
    20.1.2010 20:18 Andrej Herceg | skóre: 43
    Rozbalit Rozbalit vše Re: Vynucení syntaxe ze zdrojového kódu
    Skús /* xgettext:no-c-format */
    20.1.2010 22:11 petr_p | skóre: 59 | blog: pb
    Rozbalit Rozbalit vše Re: Vynucení syntaxe ze zdrojového kódu
    To je ono. Dík.
    Josef Kufner avatar 20.1.2010 19:05 Josef Kufner | skóre: 70
    Rozbalit Rozbalit vše Re: Gettext snadno a rychle
    Btw, nevíte o nějakém způsobu, jak v PHP konvertovat .po na .mo, když nemůžu spustit msgfmt?
    Hello world ! Segmentation fault (core dumped)
    20.1.2010 19:34 ---- | skóre: 33 | blog:
    Rozbalit Rozbalit vše Re: Gettext snadno a rychle
    jako přímo z tvého PHP skriptu nějak?
    Josef Kufner avatar 20.1.2010 19:50 Josef Kufner | skóre: 70
    Rozbalit Rozbalit vše Re: Gettext snadno a rychle
    Jo, jo. Mám udělaný v PHP instalátor, který si stáhne zip z repositáře a nainstaluje celou aplikaci (také PHP), zkontroluje nastavení a povytváří všecko co potřebuje, ale na serveru je zakázané exec(), takže je problém s překlady a graphvizem …
    Hello world ! Segmentation fault (core dumped)
    20.1.2010 20:16 ---- | skóre: 33 | blog:
    Rozbalit Rozbalit vše Re: Gettext snadno a rychle
    to asi nepůjde.. budeš si muset nechat povolit spuštění msgfmt.
    Josef Kufner avatar 20.1.2010 20:24 Josef Kufner | skóre: 70
    Rozbalit Rozbalit vše Re: Gettext snadno a rychle
    Asi budu muset najít nějakou jinou cestu. Já jen jestli třeba nědo neví o implementaci msgfmt v php nebo něco takového ;-)
    Hello world ! Segmentation fault (core dumped)
    Jan Drábek avatar 20.1.2010 19:39 Jan Drábek | skóre: 41 | blog: Tartar | Brno
    Rozbalit Rozbalit vše Re: Gettext snadno a rychle
    Lokálně? (Má smysl dělat něco podobného na serveru, když vlákna Apache/PHP stejně drží do umření starou verzi?)
    01010010 01000101 01010000 01101100 01001001 00110010 01000100 01100101 01010110
    21.1.2010 12:47 EVRAMP | skóre: 3 | Olomouc
    Rozbalit Rozbalit vše Re: Gettext snadno a rychle
    Děkuji za článek.

    Založit nové vláknoNahoru

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.