QTranslator - english in deutsch

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
Nobuddy
User
Beiträge: 994
Registriert: Montag 30. Januar 2012, 16:38

Hallo zusammen,
ich möchte text von englisch auf deutsch übersetzen, dazu habe ich hier dies:

Code: Alles auswählen

import sys
from PyQt5.QtCore import QLocale, QTranslator, QLibraryInfo
from PyQt5.QtWidgets import QApplication

App = QApplication(sys.argv)

translator = QTranslator(App)
translator.load('qt_' + QLocale.system().name(),
    QLibraryInfo.location(QLibraryInfo.TranslationsPath))
App.installTranslator(translator)
print(App.tr('yes'))
Leider erhalte ich 'yes' statt 'ja'.
Kann mir jemand erklären, an ws die liegt?

Grüße Nobuddy
Benutzeravatar
sparrow
User
Beiträge: 4193
Registriert: Freitag 17. April 2009, 10:28

Was steht denn in der Datei, die du lädst?
Also: wie hast du die .qm Datei erstellt?
Benutzeravatar
__blackjack__
User
Beiträge: 13100
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Ist der `load()`-Aufruf denn überhaupt erfolgreich? `load()` hat ja einen Rückgabewert. Und dann wäre interessant wo tatsächlich gesucht wird und nach welchem Dateinamen und ob dort dann auch so eine Datei zu finden ist.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Nobuddy
User
Beiträge: 994
Registriert: Montag 30. Januar 2012, 16:38

Hallo und Danke, für Eure Rückmeldung!

Dachte, dass im obigen Fall, man automatisch das Ergebnis der Übersetzung erhält.
Ist wohl ein fataler Irrglaube meinerseits.

.qm Datei ?
Ist nicht erstellt, dazu bräuchte ich mehr Infos, wie der Inhalt der Datei aussehen muss und wo diese abgespeichert werden muss.

Wenn ich obigen Code ablaufen lasse, erhalte ich keine Fehlermeldung, nur die Printausgabe.
Die Ausgabe zu load():

Code: Alles auswählen

print('qt_' + QLocale.system().name())
> qt_de_DE

print(QLibraryInfo.location(QLibraryInfo.TranslationsPath))
> /usr/share/qt5/translations

print(translator.load('qt_' + QLocale.system().name(),
    QLibraryInfo.location(QLibraryInfo.TranslationsPath)))
> True
Hoffe, Ihr könnt mir da helfen, was vorab notwendig ist.
Möchte gerne die Zusammenhänge verstehen, um die Übersetzung nutzen zu können.
Nobuddy
User
Beiträge: 994
Registriert: Montag 30. Januar 2012, 16:38

Die Dateien unter dem Pfad '/usr/share/qt5/translations', sind z.B. assistant_de.qm, assistant_en.qm usw..
Nachtrag: Es gibt unter diesem Pfad, viele unterschiedliche Dateinamen.
qt_de.qm, qt_en.qm ... linguist_de.qm, linguist_en.qm um ein paar zu nennen.
Aber eine Datei mit der Bezeichnung 'qt_de_DE' ist nicht dabei.
__deets__
User
Beiträge: 14535
Registriert: Mittwoch 14. Oktober 2015, 14:29

Der Prozess ist hier dokumentiert: https://www.riverbankcomputing.com/stat ... /i18n.html

Die Grundidee: in deiner Anwendung sind Strings in der UI durch tr oder translate quasi "markiert", koennen extrahiert, und dann mit dem QLinguist uebersetzt werden. Die Uebersetzungen sind dann in speziellen Dateien, die im Grunde eine Art Woerterbuch von Programmtext auf uebersetzten Text darstellen.

Einfach nur "ich will jetzt deutsch sein" anzugeben reicht nicht.
Nobuddy
User
Beiträge: 994
Registriert: Montag 30. Januar 2012, 16:38

Zu dieser Einsicht bin jetzt auch gekommen, dass ... gib mir die Übersetzung von ... so nicht funktioniert.
Auf den Link, habe ich schon zuvor entdeckt.
Habe ihn mit dem Google-Übersetzer übersetzen lassen, jedoch bin ich dadurch nicht wirklich weiter gekommen. Werde diesen nochmals intensiv durcharbeiten, vielleicht erhalte ich dann die Lösung.

Eigentlich möchte ich nur, die englischen Bezeichnungen von Buttons usw. in die jeweilige Sprache des Nutzers übersetzen.
Ein eigenes Wörterbuch erstellen, wo z.B. englische Begriffe ins deutsche übersetzt werden, wäre wohl in meinem Fall die einfachste Lösung.
__deets__
User
Beiträge: 14535
Registriert: Mittwoch 14. Oktober 2015, 14:29

Nimm deepl, das geht vielleicht besser.Alternativ zu Qt's Mechanismus kann man auch noch gettext benutzen, das ist in Python auch schon dabei. Das Prinzip ist aber am Ende sehr aehnlich: durch gut erkennbare Auszeichnung (in dem Fall _("Der Text")) erkennt ein externes Tool zu uebersetzende Strings, und extrahiert die.

Das Rad selbst zu erfinden ist nicht so eine gute Idee, denn diese Tools unterstuetzen zB auch fuzzy matching, wenn du aus Gruenden der Klarheit einen Text in der Quelle leicht umgeschrieben hast, und dann ploetzlich ohne Uebersetzung da stehen wuerdest. Das hat schon alles seine Berechtigung, so ein Tooling.
Nobuddy
User
Beiträge: 994
Registriert: Montag 30. Januar 2012, 16:38

Danke für den Tipp mit deepl, werde ich mir anschauen!
Das Rad neu erfinden, will ich nicht wirklich ... da entfernt man sich allzuschnell vom eigentlichen Ziel :wink:
Antworten