Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > cz.comp.lang.python > #3216

Re: [python] Překlady programů

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


Thread

Re: [python] Překlady programů Ondrej Tuma <konference@webjet.cz> - 2017-12-05 13:35 +0100

csiph-web