[python] Překlady programů
Ctibor.Plasek
Ctibor.Plasek na seznam.cz
Úterý Prosinec 5 13:49:11 CET 2017
Ještě jednou díky oběma.
To Petr - jj. Našel jsem si ty překlady u pyscripteru a přesně tohle mne
mátlo... :-)
A web nedělám. Bavím se s wxpythonem a tam je jenom toto:
https://wxpython.org/Phoenix/docs/html/internationalization.html
Ale vy jste mne alespoň správně nasměrovali.
Takže ještě jednou díky.
Ctibor
---------- Původní e-mail ----------
Od: Ondrej Tuma <konference na webjet.cz>
Komu: python na py.cz
Datum: 5. 12. 2017 13:35:32
Předmět: Re: [python] Překlady programů
"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/585d2e16/attachment.html>
Další informace o konferenci Python