[python] Překlady programů

Ondrej Tuma konference na webjet.cz
Úterý Prosinec 5 13:35:19 CET 2017


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
------------- další část ---------------
A non-text attachment was scrubbed...
Name: [žádný popis není k dispozici]
Type: application/pgp-signature
Size: 833 bytes
Desc: DigitĂĄlnĂ­ podpis OpenPGP
URL: <http://www.py.cz/pipermail/python/attachments/20171205/69cfada8/attachment.asc>


Další informace o konferenci Python