[python] Překlady programů

Petr Messner petr.messner na gmail.com
Úterý Prosinec 5 13:47:49 CET 2017


V dokumentaci je napsano:

Comment lines starting with #: contain references to the program’s source
> code.


Je to komentar, ktery xgettext vytvori automaticky, abys vedel, kde ve
zdrojovem kodu to konkretne je. Nic vic, nic min. Nebo ne? :)

PM

Dne 5. prosince 2017 13:35 Ondrej Tuma <konference na webjet.cz> napsal(a):

> Hoj,
>
> no tak to opravdu není. Ten princip je jednoduchý, a doporučuji si o
> gettextu něco napsat. Žádný hezký český zdroj mě ale nenapadá. Anglický
> asi nejlépe:
>
> https://www.gnu.org/software/gettext/manual/gettext.html
>
> Ve zkratce je postup následující:
>
> v kódu, kde se má doplnit překlad se použije funkce gettext, případně
> alias podtržítko (_):
>
>         from gettext import gettext
>         print(gettext("Hello world"))
>
> Následně se pomocí nástrojů gettextu vygeneruje pot soubor:
>
>         xgettext -o aplikace.pot --language=python
>
> Z něj se pak různým způsobem dá vytvořit soubor s překlady, nejlépe pak:
>
>         msginit -l cs   (pro český jazyk)
>
> výsledný soubor cs.po se edituje v jednom z nástrojů, jenž jsem psal a
> nakonec se vygeneruje binární katalog:
>
>         msgfmt -o cs/LC_MESSAGES/aplikace.mo cs.po
>
> V kódu je pak třeba definovat jak se katalog jmenuje (název
> katalogu bez přípony).
>
>         from gettext import bindtextdomain
>         bindtextdomain('aplikace', localedir='/usr/share/locale')
>
> V případě, že používáš webovou aplikaci a šablony (jinja2) pak je třeba
> vytvořit objekt translation, ten se pak předává při generování výstupu.
>
>         from gettext import translation
>         translations = translation('aplikace',
>                                localedir="/usr/share/locale",
>                                languages=[cs, sk],
>                                fallback=True)
>
>         env = Environment(loader=FileSystemLoader(path),
>                       undefined=MissingUndefined,
>                       extensions=['jinja2.ext.i18n'])
>         env.install_gettext_translations(translations)
>         template = env.get_template("sablona.html")
>
>
>         localedir je cesta k adresari, ve kterem jsou adresare s
>         jazyky, v nich LC_MESSAGES a v nich aplikace.mo
>
> Příklady sem nezkoušel, tak snad sem je napsal správně. Pak to funguje
> tak, že gettext natáhne katalogy, dle nastavených jazyků do paměti a
> podle toho, jestli najde string v příslušném jazykovém katalogu
> přeložený (postupně zkouší všechny jazyky), vrátí přeložený string.
>
> Asi o tom zase napíšu článek, ať se pořádně znemožním :-)
>
> Ondra
>
> V Tue, 05 Dec 2017 11:21:26 +0100 (CET)
> "Ctibor.Plasek" <Ctibor.Plasek na seznam.cz> napsáno:
>
> > Ahoj.
> > Díky moc za rady - teda spíš za nasměrování :-) Konečně vím, co mám
> > hledat...
> >
> > Sice to zatím moc nechápu (zdá se mi, že se odkazuje na určitý přesný
> > řádek v kódu,
> >
> > což by asi bylo nešťastné při jakémkoliv doplňování - takže to
> > nakonec asi nebude pravda)
> >
> >
> >
> >
> > Ctibor
> > ---------- Původní e-mail ----------
> > Od: Ondrej Tuma <konference na webjet.cz>
> > Komu: python na py.cz
> > Datum: 23. 11. 2017 8:09:17
> > Předmět: Re: [python] Překlady programů
> > "Hoj,
> >
> > GTK+ používá gettext také.
> >
> > V Pythonu používám přímo gettext modul:
> > https://docs.python.org/3/library/gettext.html?highlight=gettext#module-
> > gettext
> > Narozdíl od klasické C knihovny, se s ním pracuje o něco lépe a
> > pohodlněji.
> >
> > Mezi ty nejznámější programy na správu překladů patří poedit
> > https://poedit.net/.
> >
> > A rozhodně zajímavým Michalovým počinem je Weblate
> > https://weblate.org/. Zatím mám u něj jeden free software a to teprve
> > pár dní, takže zkušenosti nemám,
> >
> > Ondra
> >
> > V Thu, 23 Nov 2017 01:15:47 +0100
> > Petr Messner <petr.messner na gmail.com> napsáno:
> >
> > > Ahoj,
> > >
> > > gettext je standard. Zkus se podívat na tyto odkazy - pokud neděláš
> > > web, tak si ty webové věci od toho odmysli :)
> > >
> > > - https://docs.djangoproject.com/en/2.0/topics/i18n/
> > > - https://docs.djangoproject.com/en/2.0/topics/i18n/translation/
> > > - http://babel.pocoo.org/en/latest/
> > >
> > > Pokud používáš nějaký framework (webový, qt, gtk, ...), najdi si
> > > dokumentaci o internacionalizaci (i18n) k němu :)
> > >
> > > Obecně chceš soubor a ne databázi, protože soubor budeš mít
> > > normálně v gitu, kolegové posílat pull requesty na to apod. S
> > > formátem gettextu umí pracovat hromada nástrojů, včetně statické
> > > analýzy kódu pro vyhledávání nepřeložených řetězců, výpočet
> > > translation coverage...
> > >
> > > PM
> > >
> > > Dne 23. listopadu 2017 0:32 Ctibor.Plasek <Ctibor.Plasek na seznam.cz>
> > > napsal(a):
> > >
> > > > Ahoj.
> > > > Přemýšlím nad následujícím problémem - jak jednoduše vytvořit
> > > > vícejazyčnou verzi programu.
> > > > Vytvořit databázi, nebo textové soubory? Jakým nejlepším způsobem
> > > > říct programu, že pokud je zapnutá volba "česky"¨
> > > > tak že první v menu bude "Soubor", když anglicky tak že to bude
> > > > "File" atd. Určitě jste už tyto problémy řešili, tak jsem se
> > > > chtěl zeptat, co a jakým způsobem je nejvýhodnější (i pro event.
> > > > další rozšíření překladů)
> > > >
> > > > Díky za rady
> > > >
> > > > _______________________________________________
> > > > Python mailing list
> > > > python na py.cz
> > > > http://www.py.cz/mailman/listinfo/python
> > > >
> > > > Visit: http://www.py.cz
> > > >
> > > >
> >
> >
> >
>
>
>
> --
> Ondřej Tůma <mcbig na zeropage.cz>
> www: http://ipv6.mcbig.cz   jabber: mcbig na jabber.cz   twitter: mcbig_cz
>
> _______________________________________________
> Python mailing list
> python na py.cz
> http://www.py.cz/mailman/listinfo/python
>
> Visit: http://www.py.cz
>
>
------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://www.py.cz/pipermail/python/attachments/20171205/cde92dfd/attachment.html>


Další informace o konferenci Python