<p style="padding:0 0 0 0; margin:0 0 0 0;">Ta funkce se speciálním názvem "_" a odpovídající wx.GetTranslation jsou právě obalem nad gettext.</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">Ve svých zdrojácích (jak je v té dokumentaci naznačeno) pak místo:</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>

<pre><span class="n">aString</span> <span class="o">=</span> <span class="n"></span><span class="p"></span><span class="s2">u"This is a string which will be translated"<br />
<br />
píšeš<br />
</span><span class="p"></span></pre>
<pre><span class="n">aString</span> <span class="o">=</span> <span class="n">_</span><span class="p">(</span><span class="s2">u"This is a string which will be translated"</span><span class="p">)</span></pre>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">Jde o to, že externí nástroje reagují na výskyt _("xxx") ve zdrojovém textu a vykousnou to do toho</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">zdrojového tvaru pro poedit. Při běhu funkce _() použije původní řetězec jako klíč a v databázi</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">najde odpovídající překlad. Takže to xxx může být i v symbolickém jazyce. Pro každý jazyk bez výjimky</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">pak definuješ překlad. Pokud se ale předělává existující projekt, tak se prostě všechny řetězcové</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">literály obalí tou funkcí (raději ne úplně mechanicky), pustí se na to extraktor, použije se poedit,</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">a je to... (skoro :)</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">V Pythonu (verze 3) jsem nezkoušel, zda lze _(u"xxxx") nahradit pythonštějším _('xxxx')</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">-- tj. bez u a s apostrofy místo uvozovek. Z hlediska Pythonu je to stejné, ale musí se chytat</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">ten extraktor, který zpracovává zdrojové texty a připravuje podklady pro poedit.</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">Petr</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">______________________________________________________________<br />
> Od: "Ctibor.Plasek" <Ctibor.Plasek@seznam.cz><br />
> Komu: "Konference PyCZ" <python@py.cz><br />
> Datum: 05.12.2017 13:49<br />
> Předmět: Re: [python] Překlady programů<br />
></p>

Ještě jednou díky oběma.
<div>To Petr - jj.  Našel jsem si ty překlady u pyscripteru a přesně tohle mne mátlo... :-)</div>
<div>A web nedělám. Bavím se s wxpythonem a tam je jenom toto:</div>
<div>https://wxpython.org/Phoenix/docs/html/internationalization.html</div>
<div> </div>
<div>Ale vy jste mne alespoň správně nasměrovali.</div>
<div>Takže ještě jednou díky.</div>
<div>Ctibor</div>
<div><br />
 ---------- Původní e-mail ----------<br />
 Od: Ondrej Tuma <konference@webjet.cz><br />
 Komu: python@py.cz<br />
 Datum: 5. 12. 2017 13:35:32<br />
 Předmět: Re: [python] Překlady programů <br />

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