Sprachumschaltung ohne Neustart
Verfasst: Dienstag 27. September 2016, 00:47
Hallo Leute,
bisher verfahre ich so, dass bei einer Sprachumschaltung mein Programm dazu angehalten wird neuzustarten. Wenn der Anwender die Sprache im Programm ändert (Beispiel: von englisch auf deutsch), dann startet sich mein Programm neu, und lädt die entsprechende Datei, die von Qt-Linguist bearbeitet wurde. Nun möchte ich dazu übergehen, dass man sich den Neustart erspart. Dazu habe ich mir soeben ein kleines Programm gebastet -leider nicht ausführbar. Das Programm funktioniert auch wunderbar, allerdings habe ich kleine Bedenken. Seht selbst:
Was mich besonders nervt, ist die Wartungsarbeit der set_translators()-Funktion. Sämtliche Sprachen müssen dort "verwaltet" werden. Und in der change_language()-Funktion werden neue Sprachen installiert, und die Sprache zuvor wird gelöscht. Hier müssen also zwei Funktionen regelmäßig gewartet werden, sobald eine neue Sprache hinzukommt oder eine Sprache weg fällt. Des Weiteren missfällt mir meine Lösung mit dem Menu. Sobald im Menu die Sprache "deutsch" gewählt wird, wird die Sprache "englisch" entfernt. Andersrum genauso: wird die Sprache "englisch" gewählt, wird die Sprache "deutsch" gelöscht. Und jetzt stellen wir uns mal vor, das Programm würde an die 5-10 Sprachen "beherrschen"? Ich empfinde meine Lösung als grauenhaft. Ich stecke also gedanklich fest.
Daher wollte ich euch fragen, ob jemand von euch eine bessere Lösung parat hat und wie ihr vorgehen würdet?
Gruß
Sophus
bisher verfahre ich so, dass bei einer Sprachumschaltung mein Programm dazu angehalten wird neuzustarten. Wenn der Anwender die Sprache im Programm ändert (Beispiel: von englisch auf deutsch), dann startet sich mein Programm neu, und lädt die entsprechende Datei, die von Qt-Linguist bearbeitet wurde. Nun möchte ich dazu übergehen, dass man sich den Neustart erspart. Dazu habe ich mir soeben ein kleines Programm gebastet -leider nicht ausführbar. Das Programm funktioniert auch wunderbar, allerdings habe ich kleine Bedenken. Seht selbst:
Code: Alles auswählen
import sys
from PyQt4 import QtGui, QtCore
from testlangs import Ui_MainWindow
class Test(QtGui.QMainWindow, Ui_MainWindow):
def __init__(self, app):
QtGui.QMainWindow.__init__(self)
Ui_MainWindow.__init__(self)
# save reference to app for later
self._app = app
self.set_translators()
self._app.installTranslator(self.en_translator)
# Configure ui interface
self.setupUi(self)
# Connect menu items
self.actionDeutsch.triggered.connect(lambda: self.change_language("langs_de",
self.en_translator,
self.de_translator))
self.actionEnglish.triggered.connect(lambda: self.change_language("langs_en",
self.de_translator,
self.en_translator))
# Create the translators for English and German
def set_translators(self):
self.en_translator = QtCore.QTranslator(self._app)
self.en_translator.load("langs_en")
self.de_translator = QtCore.QTranslator(self._app)
self.de_translator.load("langs_de")
# Change the language to German
def change_language(self, arg, del_trans, add_trans):
self._app.removeTranslator(del_trans)
self._app.installTranslator(add_trans)
self.retranslateUi(self)
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
window = Test(app)
window.show()
sys.exit(app.exec_())
Daher wollte ich euch fragen, ob jemand von euch eine bessere Lösung parat hat und wie ihr vorgehen würdet?
Gruß
Sophus