RkBlog

Hardware, programming and astronomy tutorials and reviews.

Wielojęzyczny interfejs aplikacji PyQt4

Opis zastosowania Qt Linguist i systemu wielojęzyczności Qt w aplikacjach PyQt4

Biblioteka Qt wykorzystuje własny system wielojęzycznego interfejsu poprzez Qt Linguist. W PyQt4 można z niego korzystać (lub jak ktoś bardzo chce to z gettexta) przy tworzeniu wielojęzycznych interfejsów.

Oznaczanie fraz do tłumaczenia

Ogólnie wszystkie napisy użyte w interfejsie (Qt Designer) są oznaczane do tłumaczenia. Jeżeli chcemy we własnym kodzie oznaczyć tekst do tłumaczenia to używamy metody tr:

self.tr('this is something for translation')
Standardem jest tworzenie aplikacji w języku angielskim, który później jest tłumaczony na inne języki.

Generowanie plików tłumaczeń

Tłumaczenie

Plik ts otwieramy w Qt Linguist - aplikacji dostępnej wraz z Qt. Tłumaczymy poszczególne frazy, zapisujemy i w menu "Plik" klikamy opcję Wydaj, co spowoduje wygenerowanie wynikowego tłumaczenia w formacie qm używalnego przez system wielojęzyczności.

Wykorzystanie plików tłumaczeń w aplikacji

Żeby aplikacja mogła skorzystać z tłumaczeń należy zmodyfikować sposób jej uruchamiania, oraz udostępnić gdzieś pliki tłumaczeń (zaleca się dodanie ich jako zasobów). Oto przykładowa klasa rozruchowa wykorzystująca system wielojęzyczności:

# -*- coding: utf-8 -*-
import sys

from PyQt4 import QtCore, QtGui
from test import Ui_MainWindow

from resources_rc import *

class testApp(QtGui.QMainWindow):
	def __init__(self, parent=None):
		super(testApp, self).__init__(parent)
		self.ui = Ui_MainWindow()
		self.ui.setupUi(self)

## STARE
#if __name__ == "__main__":
	#app = QtGui.QApplication(sys.argv)
	#myapp = testApp()
	#myapp.show()
	#sys.exit(app.exec_())

## NOWE
if __name__ == "__main__":
	app = QtGui.QApplication(sys.argv)
	# domyślny systemowy język
	locale = QtCore.QLocale.system().name()
	qtTranslator = QtCore.QTranslator()
	# próbujemy załadować tłumaczenie dla tego języka
	# które jest w zasobach w przedrostku "tra" jako test_pl.qm -- dla polskiego języka
	if qtTranslator.load("test_" + locale, ":tra/"):
		app.installTranslator(qtTranslator)

	myapp = testApp()
	myapp.show()
	sys.exit(app.exec_())

Pobierz źródła

Pobierz źródła
RkBlog

7 September 2009;

Comment article