[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