Python: usluge za višejezičnost
-
module gettext(službena dokumentacija) nudi internacionalizacijske i lokalizacijske usluge po uzoru na GNU gettext, često korišteni alat za izradu višejezičnih programa na operacijskim sustavima sličnim Unixu -
gettext.bindtextdomain(domain, localedir)veže domenudomainna direktorij s lokalizacijamalocaledir; prijevodi aplikacije će se tražiti ulocaledir/language/LC_MESSAGES/domain.mo, npr. sustavski direktorij s lokalizacijama je/usr/share/localepa za aplikacijugrep(domena je istogrep) i hrvatski jezik (hr) ta putanja je/usr/share/locale/hr/LC_MESSAGES/grep.mo gettext.textdomain(domain)postavlja globalnu domenu u programu nadomain-
gettext.gettext(message)dohvaća prijevod porukemessageobzirom na trenutnu globalnu domenu, jezik i direktorij u kojem se prijevodi nalazeimport gettext gettext.bindtextdomain('kalendar', '/home/korisnik/locale') # prijevod se nalazi u /home/korisnik/locale/hr/LC_MESSAGES/kalendar.mo gettext.textdomain('kalendar') print(gettext.gettext('Print a calendar')) # ako su postavljene hrvatske lokalne i regionalne postavke, bit će ispisano "Ispis kalendara" # zbog lakše čitljivosti koda preporuča se skratiti ime gettext.gettext na _ _ = gettext.gettext print(_('Print a calendar')) # isti ispis kao iznad -
gettext.dgettext(domain, message)dohvaća prijevod porukemessageu navedenoj domenidomainumjesto u trenutnoj globalnoj domeni gettext.ngettext(singular, plural, n)dohvaća prijevod porukasingularipluralu množini u odgovarajućem obliku zangettext.dngettext(domain, singular, plural, n)dohvaća prijevod porukasingularipluralu množini u odgovarajućem obliku zanu navedenoj domenidomainumjesto u trenutnoj globalnoj domeni
Zadatak
(Zasad još uvijek ne znamo stvoriti potrebnu .mo datoteku; to ćemo napraviti u idućem zadatku.)
Napišite Python program koji koristi tekstualnu domenu mljekara i ispisuje četiri poruke koje imaju mogućnost prevođenja:
Acquire milkAcquire yogurtDeliver milkDeliver yogurt
-
naredba ljuske
xgettextparsira programski kod u brojnim programskim jezicima (uključujući Python) i generira PO datotekumessages.po, primjerice:xgettext kalendar.py cat messages.po# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-05-07 01:27+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" #: kalendar.py:7 kalendar.py:12 msgid "Print a calendar" msgstr ""- u ovoj datoteci je nužno postaviti jezik na hrvatski promjenom
"Language: \n"u"Language: hr\n"i kodiranje na UTF-8 promjenom"Content-Type: text/plain; charset=CHARSET\n"u"Content-Type: text/plain; charset=UTF-8\n", a ostala polja bi bilo dobro popuniti -
prijevodi se zatim upisuju pod
msgstr ""na način#: kalendar.py:7 kalendar.py:12 msgid "Print a calendar" msgstr "Ispis kalendara"
- u ovoj datoteci je nužno postaviti jezik na hrvatski promjenom
-
naredba ljuske
msgfmtomogućuje prevođenje PO datoteka u MO datoteke koje se mogu koristiti u programima i nisu namijenjene da ih ljudi čitaju i uređujumsgfmt messages.po cat messages.mo,<PQb|Print a calendarProject-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE Last-Translator: FULL NAME <EMAIL@ADDRESS> Language-Team: LANGUAGE <LL@li.org> Language: hr MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ispis kalendara- datoteka
messages.mose zatim nazivakalendar.moi stavlja uhr/LC_MESSAGESunutar direktorija s lokalizacijama (npr./home/korisnik/locale/hr/LC_MESSAGES/kalendar.mo)
- datoteka
Zadatak
Za program iz prethodnog zadatka napravite MO datoteku s hrvatskim prijevodom, nazovite ju na odgovarajući način i postavite na odgovarajuće mjesto. Vežite direktorij s lokalizacijama na domenu. Uvjerite se da se kod pokretanja programa zaista koriste prijevodi iz MO datoteke.
Author: Vedran Miletić