Skip to content

Python - mehrsprachiges GUI

Python3
  • Ok, hier mal kurz was zum Thema, wie man ein GUI, z.B. mein Restic UI ;), mehrsprachig gestalten kann. Dazu bin ich über eine tolle Anleitung gestolpert.

    Es gibt in Python das Modul gettext, damit kann man seine Anwendung mehrsprachig gestalten. Das ist gar nicht so einfach, wie ich mir das am Anfang vorgestellt habe. Heute hier an dieser Stelle nur ein paar Notizen, ich werde evt. später darauf nochmal eingehen.

    Die Ordnerstruktur

    78385975-defa-4b70-8292-2d5b375f4036-grafik.png

    base.pot

    # SOME DESCRIPTIVE TITLE.
    # Copyright (C) YEAR ORGANIZATION
    # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
    #
    msgid ""
    msgstr ""
    "Project-Id-Version: PACKAGE VERSION\n"
    "POT-Creation-Date: 2022-04-26 17:11+0200\n"
    "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
    "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
    "Language-Team: LANGUAGE <LL@li.org>\n"
    "MIME-Version: 1.0\n"
    "Content-Type: text/plain; charset=UTF-8\n"
    "Content-Transfer-Encoding: 8bit\n"
    "Generated-By: pygettext.py 1.5\n"
    
    
    #: /home/frank/restic_ui/src/restic_ui.py:130
    msgid "This is a translatable string."
    msgstr ""
    
    #: /home/frank/restic_ui/src/restic_ui.py:4118
    msgid "Restic version"
    msgstr ""
    

    base.po (DE)

    # SOME DESCRIPTIVE TITLE.
    # Copyright (C) YEAR ORGANIZATION
    # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
    #
    msgid ""
    msgstr ""
    "Project-Id-Version: PACKAGE VERSION\n"
    "POT-Creation-Date: 2022-04-26 16:52+0200\n"
    "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
    "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
    "Language-Team: LANGUAGE <LL@li.org>\n"
    "MIME-Version: 1.0\n"
    "Content-Type: text/plain; charset=UTF-8\n"
    "Content-Transfer-Encoding: 8bit\n"
    "Generated-By: pygettext.py 1.5\n"
    
    
    #: /home/frank/restic_ui/src/restic_ui.py:127
    msgid "This is a translatable string."
    msgstr "TESTING"
    
    #: /home/frank/restic_ui/src/restic_ui.py:4109
    msgid "Restic version"
    msgstr "Anzeige der Restic version"
    

    Und zwei Befehle, die man dazu noch benötigt.

    msgfmt -o base.mo base
    pygettext3.8 -d base -o /home/frank/restic_ui/locales/base.pot /home/frank/restic_ui/src/restic_ui.py 
    

    Jetzt muss ich mir noch Gedanken darüber machen, ob ich das brauche und so umsetze.

  • PyQt6 - QRegularExpressionValidator

    Python3
    1
    0 Stimmen
    1 Beiträge
    531 Aufrufe
    Niemand hat geantwortet
  • Python3 - Struktur eines Projektes

    Python3
    1
    0 Stimmen
    1 Beiträge
    126 Aufrufe
    Niemand hat geantwortet
  • Python3 - PyQt5 QIcon

    Python3
    2
    0 Stimmen
    2 Beiträge
    121 Aufrufe
    FrankMF

    Die Suchpfade findet man hiermit

    print(QIcon.themeSearchPaths())

    Ausgabe

    ['/home/frank/.icons', '/usr/share/cinnamon/icons', '/var/lib/flatpak/exports/share/icons', '/usr/share/icons', ':/icons']
  • Restic UI - User documentation

    Restic UI
    1
    0 Stimmen
    1 Beiträge
    240 Aufrufe
    Niemand hat geantwortet
  • Python3 - QSettings

    Python3
    1
    0 Stimmen
    1 Beiträge
    149 Aufrufe
    Niemand hat geantwortet
  • Python3 - Eingabeformular

    Python3
    3
    0 Stimmen
    3 Beiträge
    208 Aufrufe
    FrankMF

    Meine endgültige Lösung, zu mindestens im Moment 😉 , ist ein zweites Window. Das gefällt mir am Besten, komme ich zu mindestens im Moment einfach besser mit klar. Aber, eines der größten Probleme war für mich, wie aktualisiere ich die Liste im Hauptfenster!? Da habe ich doch etliche Stunden dran rum gefummelt....

    Hier nur mal das Layout

    ##################### # Layout ##################### self.formGroupBox = QGroupBox("Form layout") layout = QFormLayout() layout.addRow(self.label_1) layout.addRow(QLabel("Backup Name:"), self.input1) layout.addRow(QLabel("Repository:"), self.button3) layout.addRow(QLabel("Source:"), self.button4) layout.addRow(QLabel("Password:"), self.input4) layout.addRow(self.label_6) layout.addRow(self.button2) self.formGroupBox.setLayout(layout) self.setLayout(layout)

    Das mit dem SecondWindow ist aber was aufwändiger. Da mach ich dann mal einen eigenen Beitrag zu. Aktuell sieht das so aus.

    6c68c956-9127-438f-bc54-4dcef8e18f00-image.png

  • Python3 - JSON

    Python3
    3
    0 Stimmen
    3 Beiträge
    199 Aufrufe
    FrankMF

    ede1a88a-5183-4f85-a602-27650362d532-grafik.png

    Die Backups sollen Namen haben, also habe ich das erweitert. Jetzt sollen diese als Liste rechts angezeigt werden. Das mache ich wie folgt.

    for key in backups: print(backups[key]['name'], key) liste = backups[key]['name'] + " ID: " + key self.listWidget.addItem(liste)

    Mittels des Keys kann ich auf den Namen zugreifen und die Liste damit füllen. Aktuell habe ich noch den Key hinten angefügt, weil ich noch keine Idee habe, wie ich die Backups anders verarbeiten soll. Aber, Stück für Stück. Der Backup-Name wird nach Auswahl in der Statusbar angezeigt. So weit klappt das so wie ich mir das vorstelle. Für heute ist Feierabend 😇

  • Python3 - Globale Variablen

    Python3
    1
    0 Stimmen
    1 Beiträge
    134 Aufrufe
    Niemand hat geantwortet