Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > cz.comp.lang.python > #3216
| Path | csiph.com!news.mixmin.net!news.unit0.net!peer01.am4!peer.am4.highwinds-media.com!peer04.fr7!futter-mich.highwinds-media.com!news.highwinds-media.com!fx16.am4.POSTED!not-for-mail |
|---|---|
| Received-SPF | pass (Address passes the Sender Policy Framework) SPF=MAILFROM; sender=konference@webjet.cz; remoteip=::ffff:195.146.111.106; remotehost=; helo=mail.webjet.cz; receiver=hugo.zagamma.cz; |
| From | Ondrej Tuma <konference@webjet.cz> |
| In-Reply-To | <256.D{9T.37HTVLRLeNL.1Q9dCc@seznam.cz> |
| Organization | Blackmouse |
| X-Mailer | Claws Mail 3.15.1-dirty (GTK+ 2.24.31; x86_64-pc-linux-gnu) |
| Mime-Version | 1.0 |
| Content-Type | multipart/signed; micalg=pgp-sha512; protocol="application/pgp-signature"; boundary="=_hugo.zagamma.cz-17672-1512477322-0001-2" |
| Subject | Re: [python] Překlady programů |
| X-BeenThere | python@py.cz |
| X-Mailman-Version | 2.1.24 |
| Precedence | list |
| List-Id | Konference PyCZ <python.py.cz> |
| List-Unsubscribe | <http://www.py.cz/mailman/options/python>, <mailto:python-request@py.cz?subject=unsubscribe> |
| List-Archive | <http://www.py.cz/pipermail/python/> |
| List-Post | <mailto:python@py.cz> |
| List-Help | <mailto:python-request@py.cz?subject=help> |
| List-Subscribe | <http://www.py.cz/mailman/listinfo/python>, <mailto:python-request@py.cz?subject=subscribe> |
| Newsgroups | cz.comp.lang.python |
| Message-ID | <mailman.36.1512477323.2736.python@py.cz> (permalink) |
| X-Mailman-Original-Message-ID | <20171205133519.667e25c3@dell.kancelar.seznam.cz> |
| X-Mailman-Original-References | <CAK9Q5BT1NwdbTwbhTC21cCvAxCJgbj+xMQo6h==DC4KqHD4p7g@mail.gmail.com> <o{.D{3p.2wXYDSbIExd.1Q5WaD@seznam.cz> <20171123080800.531f3977@dell.kancelar.seznam.cz> <256.D{9T.37HTVLRLeNL.1Q9dCc@seznam.cz> |
| References | <CAK9Q5BT1NwdbTwbhTC21cCvAxCJgbj+xMQo6h==DC4KqHD4p7g@mail.gmail.com> <o{.D{3p.2wXYDSbIExd.1Q5WaD@seznam.cz> <20171123080800.531f3977@dell.kancelar.seznam.cz> <256.D{9T.37HTVLRLeNL.1Q9dCc@seznam.cz> <20171205133519.667e25c3@dell.kancelar.seznam.cz> |
| Lines | 207 |
| X-Complaints-To | abuse@usenet-news.net |
| NNTP-Posting-Date | Tue, 05 Dec 2017 12:35:24 UTC |
| Date | Tue, 5 Dec 2017 13:35:19 +0100 |
| X-Received-Body-CRC | 3032732033 |
| X-Received-Bytes | 10187 |
| Xref | csiph.com cz.comp.lang.python:3216 |
Show key headers only | View raw
[Multipart message — attachments visible in raw view] - view raw
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@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@webjet.cz>
> Komu: python@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@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@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@py.cz
> > > http://www.py.cz/mailman/listinfo/python
> > >
> > > Visit: http://www.py.cz
> > >
> > >
>
>
>
--
Ondřej Tůma <mcbig@zeropage.cz>
www: http://ipv6.mcbig.cz jabber: mcbig@jabber.cz twitter: mcbig_cz
Back to cz.comp.lang.python | Previous | Next | Find similar
Re: [python] Překlady programů Ondrej Tuma <konference@webjet.cz> - 2017-12-05 13:35 +0100
csiph-web