Lokalizace aplikací v jazyce Python

7. srpna 2018

Výsledkem realizace programu není jen samotný kód a vizuální část programu, ale i textový obsah, který je potřeba lokalizovat. Vyvíjím i aplikace v jazyce Python. A právě jedna taková aplikace vyžadovala i lokalizaci a tak jsem zjišťoval jaký je standardizovaný postup pro lokalizaci, jaké jsou prostředky v operačních systémech UNIX (primárně Linux) a pokud se jedná o aplikace napsané v jazyce Python.

python translation

Výchozí stav

Aplikaci jsem psal v jazyce Python a jednalo se o složitou aplikaci, která na pozadí paralelně zpracovávala data, která přijímala z různých vstupů. Měla grafický interface v toolkitu QT, který interaktivně ukazoval aktuální situaci a zároveň pomocí ní mohl uživatel upravovat nastavení.

Translate tools

Nástrojů pro implementaci lokalizace do programu je několik. Základ a standard je Gettext.

Přímo QT má však v sobě nástroj, který jsem se rozhodl použít. Aby jsme tyto prostředky mohli používat, je potřeba nainstalovat qttools, který obsahuje nástroje pro konvertování a grafický program linguist, ve kterém je možno pohodlně překládat texty.
V systému Mageia 6 se jedná o balíčky: qt4-linguist, qttools5-dev-tool .

Kód programu

V kódu programu musí být text zapsán tak, aby bylo možno následně použít prostředky pro pohodlnou lokalizaci aplikace:
...........
self.gpsOff.setText(_translate("MainWindow", "NO SIGNAL", None))
self.camera1.setText(_translate("MainWindow", "Camera 1 no signal", None))
self.voipRX.setText(_translate("MainWindow", "voipRX", None))
.............
Začlenění a použití lokalizace v programu:
try:
    _fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
    def _fromUtf8(s):
        return s

try:
    _encoding = QtGui.QApplication.UnicodeUTF8
    def _translate(context, text, disambig):
        return QtGui.QApplication.translate(context, text, disambig, _encoding)
except AttributeError:
    def _translate(context, text, disambig):
        return QtGui.QApplication.translate(context, text, disambig)
..............


if __name__ == "__main__":
    translator = QtCore.QTranslator()
    translator.load("ts.qm")
    app.installTranslator(translator)

Export a konvertování textů

K exportu textových řetězců z programu slouží program pylupdate4.
Použití programu pylupdate4:

pylupdate4 main.py -ts translate/zh_TW.ts
Následně je potřeba v programu Lingust přeložit jednotlivé textové řetězce.
Výsledný soubor se pak musí zkonvertovat do binární podoby, kterou je možno načíst naším programem. Programem lrelease provádí konvertování do binárniho formátu qm pro toolkit QT:
lrelease translate/zh_TW.ts

Zdroje

https://pymotw.com/2/gettext/

https://wiki.python.org/moin/PyQt/Using a translation of Qt

https://kuanyui.github.io/2014/09/03/pyqt-i18n/

Články na podobné téma

Jak porovnat dvě stejné databáze?
REST API: API platform
Vlastní web a mail hosting se softwarem ISP Config
Programovní v SQL: PostgreSQL, MySQL/MariaDB
HTTPS: zabezpečený web
NoSQL databáze Mongo DB
Linux a MS SQL server
Co je pracovní náplň programátora
Lokalizace aplikací v jazyce Python
Jaký mail a web hosting vybrat
How to make wireless low power Arduino
Digispark - Programujte mikrokontrolér Atmel ATtiny pomocí Arduino IDE
Program Roulette
Vývoj pro procesory ARM s Arduino IDE
Wireless low power Arduino
Pyradio - Python program for receive Internet radio with text user inteface
UPS monitor pro Android
Bezdrátový bateriově napájený WiFi teploměr
Jak programovat WiFi procesor ESP8266
Comparison IQRF vs Wireless Arduino
Jakou platformu zvolit pro eshop? Například Prestashop
Development kits and gateways for wireless platform IQRF

OpenStreetMap a GPS trasy v mapě na webu
Java program pro přehledné monitorování záložních zdrojů
Quickplay
Otevřený chytrý telefon s Linuxem - Openmoko Neo FreeRunner
Čipové kontaktní a bezkontaktní karty Java Card OpenPlatform
Grafický program pro embeded/mobilní zařízení na vyhledávání dopravního spoje.
Vývoj pro bezdrátové moduly s procesorem PIC pod GNU/Linux - IQRF
Java program a applet Kalkulačka
Java program na výpočet kvadratické rovnice
O programování a ruzné programy v jazyce Java, Python a dalších