Lokalizace aplikací v jazyce Python

7. srpna 2018

Lang: cs en de es

Výsledkem realizace programu není jen samotný kód a vizuální část programu, ale i textový obsah, který je potřeba lokalizovat. Právě jedna aplikace v jazyce Python vyžadovala lokalizaci a tak jsem zjišťoval jak aplikaci napsanou v jazyce Python lokalizovat.

Vyvíjím i aplikace v jazyce Python a je právě jedna aplikace vyžadovala i lokalizaci do různých jazyků. Zjišťoval jsem tedy jak na standardizovaný postup lokalizace, jaké jsou prostředky v operačních systémech UNIX (primárně Linux). To vše pro aplikace napsané v jazyce Python.

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

Programovací jazyk Go
Analýza zadání a nacenění vývoje softwarového projektu
Python program na ovládání Dockeru pomocí API
Jak použít aplikaci MailCatcher pro testování emailů
Návod: Python OpenAI API
Vytvoření WebSocket webové aplikace a nastavení proxy
Řízení projektů: Agilní vývoj softwaru
Jak provozovat staré PHP aplikace
Co by měl umět dobrý programátor
Programovací jazyk Rust
NodeJS: vývoj, konfigurace serveru
Nette security bug CVE-2020-15227
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
Připojení k Microsoft SQL Serveru z Linuxu
Co je pracovní náplň programátora
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
Quickplay
Java program pro přehledné monitorování záložních zdrojů
Čipové kontaktní a bezkontaktní karty Java Card OpenPlatform
Otevřený chytrý telefon s Linuxem - Openmoko Neo FreeRunner
Vývoj pro bezdrátové moduly s procesorem PIC pod GNU/Linux - IQRF
Grafický program pro embeded/mobilní zařízení na vyhledávání dopravního spoje.
O programování a ruzné programy v jazyce Java, Python a dalších
Java program a applet Kalkulačka
Java program na výpočet kvadratické rovnice

Odběr novinek

Pokud máte zájem dostávat příležitostně na email novinky.
Můžete se vyplněním emailu registrovat k odběru novinek.


+