PyQt: Modulzeichenfolgen zur Laufzeit übersetzenPython

Python-Programme
Anonymous
 PyQt: Modulzeichenfolgen zur Laufzeit übersetzen

Post by Anonymous »

Strings in QObjects werden zur Laufzeit übersetzt. Wenn der Übersetzer geändert wird, werden alle diese Zeichenfolgen aktualisiert. Allerdings werden auf Modulebene deklarierte Zeichenfolgen oder sogar statische Klassenattribute zum Zeitpunkt des Imports übersetzt.

Ich sehe drei Möglichkeiten, die Übersetzung von Modulzeichenfolgen zu ermöglichen, von denen mir keine völlig zufriedenstellend erscheint:
  • Importieren Sie das Modul, nachdem der Übersetzer installiert ist (siehe hier (Absatz Übersetzer frühzeitig installieren)). Dies ist möglicherweise nicht praktisch, aber machbar, solange die Sprache zur Laufzeit nicht geändert werden muss.
  • Machen Sie die Strings zu Klasseninstanzattributen. Nun ja, natürlich. Aber das macht das Design kaputt.
  • Behalten Sie die Zeichenfolgen auf Modulebene. Verwenden Sie QtCore.QCoreApplication.translate(), damit sie von pylupdate übernommen werden. Übersetzen Sie sie dann (erneut) zur Laufzeit, indem Sie self.tr() oder QtCore.QCoreApplication.translate() für sie aufrufen. Beispiel:

    Code: Select all

    translate = QtCore.QCoreApplication.translate
    strings = [translate('foo'), translate('bar')]
    
    class my_class(QObject):
    
    def __init__(self):
    for s in strings:
    print(self.tr(s))
    
    Dabei muss sichergestellt werden, dass vor dem Modulimport kein Übersetzer installiert wird, andernfalls werden die Modulzeichenfolgen zum Zeitpunkt des Imports übersetzt (translate() in der Deklaration) und zur Laufzeit erneut übersetzt (self.tr() in der Klasseninstanz). Im allgemeinen Fall wird dies nicht sichtbar sein: self.tr() wird versuchen, eine bereits übersetzte Zeichenfolge zu übersetzen, die wahrscheinlich nicht im ursprünglichen Sprachzeichenfolgensatz vorhanden ist, und die Zeichenfolge selbst stillschweigend zurückgeben.

    Aber wenn beispielsweise eine englische Zeichenfolge in eine französische Zeichenfolge übersetzt wird, die einer anderen englischen Zeichenfolge in derselben Klasse entspricht, wird stattdessen die französische Übersetzung dieser Zeichenfolge angezeigt.
Gibt es eine saubere Möglichkeit, dies zu tun?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post