diff options
author | saturneric <[email protected]> | 2025-02-03 18:01:26 +0000 |
---|---|---|
committer | saturneric <[email protected]> | 2025-02-03 18:01:26 +0000 |
commit | d3d94f5b7a3e60b3bbb73e832bab7cf2d44a1600 (patch) | |
tree | 5cc7838f1325b076b91bb898fd0da3cfcb60b455 | |
parent | doc: update README.md (diff) | |
parent | fix: set pb range when size of operas > 1 (diff) | |
download | GpgFrontend-d3d94f5b7a3e60b3bbb73e832bab7cf2d44a1600.tar.gz GpgFrontend-d3d94f5b7a3e60b3bbb73e832bab7cf2d44a1600.zip |
Merge branch 'develop'
177 files changed, 13814 insertions, 13374 deletions
diff --git a/.github/workflows/testing-nightly.yml b/.github/workflows/testing-nightly.yml index 6259b406..0f325b0d 100644 --- a/.github/workflows/testing-nightly.yml +++ b/.github/workflows/testing-nightly.yml @@ -274,7 +274,7 @@ jobs: wget -c -nv https://github.com/probonopd/linuxdeployqt/releases/download/continuous/linuxdeployqt-continuous-x86_64.AppImage chmod u+x linuxdeployqt-continuous-x86_64.AppImage export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib - ./linuxdeployqt-continuous-x86_64.AppImage ${{github.workspace}}/build/artifacts/AppDir/usr/share/applications/*.desktop -no-translations -extra-plugins=iconengines -appimage -executable-dir=${{github.workspace}}/build/artifacts/AppDir/usr/modules/ + ./linuxdeployqt-continuous-x86_64.AppImage ${{github.workspace}}/build/artifacts/AppDir/usr/share/applications/*.desktop -no-translations -extra-plugins=iconengines,platforms -appimage -executable-dir=${{github.workspace}}/build/artifacts/AppDir/usr/modules/ echo "BUILD_TYPE_LOWER=${BUILD_TYPE,,}" >> ${GITHUB_ENV} echo "SHORT_SHA=`echo ${GITHUB_SHA} | cut -c1-8`" >> ${GITHUB_ENV} if: runner.os == 'Linux' diff --git a/CMakeLists.txt b/CMakeLists.txt index 95d43b04..5789b1d5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -36,7 +36,7 @@ endif() # define project project(GpgFrontend - VERSION 2.1.6 + VERSION 2.1.7 DESCRIPTION "GpgFrontend is a free, open-source, robust yet user-friendly, compact and cross-platform tool for OpenPGP encryption." HOMEPAGE_URL "https://gpgfrontend.bktus.com" LANGUAGES CXX) diff --git a/gpgfrontend.qrc b/gpgfrontend.qrc index 51f5b2b7..49a26dec 100644 --- a/gpgfrontend.qrc +++ b/gpgfrontend.qrc @@ -108,6 +108,9 @@ <file alias="export-email.png">resource/lfs/icons/export-email.png</file> <file alias="warning-filling.png">resource/lfs/icons/warning-filling.png</file> <file alias="upgrade.png">resource/lfs/icons/upgrade.png</file> + <file alias="batch.png">resource/lfs/icons/batch.png</file> + <file alias="encr-sign.png">resource/lfs/icons/encr-sign.png</file> + <file alias="decr-verify.png">resource/lfs/icons/decr-verify.png</file> </qresource> <qresource prefix="/test/key"> <file alias="pv1.key">resource/lfs/test/data/pv1.key</file> diff --git a/modules b/modules -Subproject bbbbbf535f153c59bffa47b88c54e9f5107aa64 +Subproject 22ba38aac5edbf85cc879fd611ef79b9f818544 diff --git a/resource/lfs/icons/batch.png b/resource/lfs/icons/batch.png Binary files differnew file mode 100644 index 00000000..ac3e77bd --- /dev/null +++ b/resource/lfs/icons/batch.png diff --git a/resource/lfs/icons/decr-verify.png b/resource/lfs/icons/decr-verify.png Binary files differnew file mode 100644 index 00000000..0385cabf --- /dev/null +++ b/resource/lfs/icons/decr-verify.png diff --git a/resource/lfs/icons/encr-sign.png b/resource/lfs/icons/encr-sign.png Binary files differnew file mode 100644 index 00000000..25275481 --- /dev/null +++ b/resource/lfs/icons/encr-sign.png diff --git a/resource/lfs/icons/file-operator.png b/resource/lfs/icons/file-operator.png Binary files differindex cab57a98..e547d886 100644 --- a/resource/lfs/icons/file-operator.png +++ b/resource/lfs/icons/file-operator.png diff --git a/resource/lfs/locale/ts/GpgFrontend.de_DE.ts b/resource/lfs/locale/ts/GpgFrontend.de_DE.ts index d56ee2e0..708228d0 100644 --- a/resource/lfs/locale/ts/GpgFrontend.de_DE.ts +++ b/resource/lfs/locale/ts/GpgFrontend.de_DE.ts @@ -137,57 +137,57 @@ <context> <name>GpgFrontend::GpgKeyTableModel</name> <message> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="42"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="40"/> <source>Select</source> <translation type="unfinished">Auswählen</translation> </message> <message> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="42"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="40"/> <source>Type</source> <translation type="unfinished">Typ</translation> </message> <message> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="42"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="40"/> <source>Name</source> <translation type="unfinished">Name</translation> </message> <message> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="43"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="41"/> <source>Email Address</source> <translation type="unfinished">E-Mail-Addresse</translation> </message> <message> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="43"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="41"/> <source>Usage</source> <translation type="unfinished">Verwendungszweck</translation> </message> <message> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="43"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="41"/> <source>Trust</source> <translation type="unfinished">Vertrauen</translation> </message> <message> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="44"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="42"/> <source>Key ID</source> <translation type="unfinished">Schlüssel-ID</translation> </message> <message> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="44"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="42"/> <source>Create Date</source> <translation type="unfinished">Erstellungsdatum</translation> </message> <message> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="44"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="42"/> <source>Algorithm</source> <translation type="unfinished">Algorithmus</translation> </message> <message> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="45"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="43"/> <source>Subkey(s)</source> <translation type="unfinished">Unterschlüssel(e)</translation> </message> <message> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="45"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="43"/> <source>Comment</source> <translation type="unfinished">Kommentar</translation> </message> @@ -538,6 +538,14 @@ </message> </context> <context> + <name>GpgFrontend::KeyGenerateInfo</name> + <message> + <location filename="../../../../src/core/model/GpgKeyGenerateInfo.cpp" line="39"/> + <source>None</source> + <translation type="unfinished">Kein</translation> + </message> +</context> +<context> <name>GpgFrontend::Module::GlobalRegisterTable</name> <message> <location filename="../../../../src/core/module/GlobalRegisterTable.cpp" line="47"/> @@ -687,58 +695,58 @@ <context> <name>GpgFrontend::UI::ChoosePage</name> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="107"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="106"/> <source>Choose your action...</source> <translation type="unfinished">Wählen Sie Ihre Aktion...</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="108"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="107"/> <source>...by clicking on the appropriate link.</source> <translation type="unfinished">...indem Sie auf den entsprechenden Link klicken.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="111"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="110"/> <source>If you have never used GpgFrontend before and also don't own a gpg key yet you may possibly want to read how to</source> <translation type="unfinished">Wenn Sie GpgFrontend noch nie verwendet haben und auch noch keinen gpg-Schlüssel besitzen, möchten Sie vielleicht lesen, wie es geht</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="114"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="113"/> <source>Generate Key</source> <translation type="unfinished">Schlüssel erstellen</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="121"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="120"/> <source>If you want to learn how to encrypt, decrypt, sign and verify text, you can read </source> <translation type="unfinished">Wenn Sie lernen möchten, wie Sie Text verschlüsseln, entschlüsseln, signieren und überprüfen, lesen Sie </translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="124"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="123"/> <source>Encrypt & Decrypt Text</source> <translation type="unfinished">Text verschlüsseln und entschlüsseln</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="124"/> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="136"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="123"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="135"/> <source>or</source> <translation type="unfinished">oder</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="126"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="125"/> <source>Sign & Verify Text</source> <translation type="unfinished">Text unterschreiben und überprüfen</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="134"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="133"/> <source>If you want to operate file, you can read </source> <translation type="unfinished">Wenn Sie mit Dateien arbeiten möchten, können Sie lesen </translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="136"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="135"/> <source>Encrypt & Sign File</source> <translation type="unfinished">Datei verschlüsseln und signieren</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="138"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="137"/> <source>Sign & Verify File</source> <translation type="unfinished">Datei signieren und überprüfen</translation> </message> @@ -746,39 +754,39 @@ <context> <name>GpgFrontend::UI::CommonUtils</name> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="481"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="419"/> <source>Timeout</source> <translation type="unfinished">Zeitablauf</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="224"/> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="356"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="162"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="294"/> <source>Success</source> <translation type="unfinished">Erfolg</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="159"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="119"/> <source>Failed to Load GnuPG Context</source> <translation type="unfinished">Fehler beim Laden des GnuPG-Kontextes</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="161"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="121"/> <source>It seems that GnuPG (gpg) is not properly installed. Please refer to the <a href='https://www.gpgfrontend.bktus.com/overview/faq/#troubleshooting-gnupg-installation-issues'>FAQ</a> for instructions on fixing the installation. After resolving the issue, relaunch GpgFrontend.<br /><br />Alternatively, you can open the GnuPG Controller to configure a custom GnuPG installation for GpgFrontend to use. Once set, GpgFrontend will restart automatically.<br /><br />Details: %1</source> <translation type="unfinished">Es scheint, dass GnuPG (gpg) nicht richtig installiert ist. Bitte lesen Sie die <a href='https://www.gpgfrontend.bktus.com/overview/faq/#troubleshooting-gnupg-installation-issues'>FAQ</a> für Anweisungen zur Behebung der Installation. Nachdem Sie das Problem behoben haben, starten Sie GpgFrontend erneut. Alternativ können Sie den GnuPG-Controller öffnen, um eine benutzerdefinierte GnuPG-Installation zu konfigurieren, die GpgFrontend verwenden soll. Einmal eingestellt, wird GpgFrontend automatisch neu gestartet.<br /><br />Details: %1</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="225"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="163"/> <source>Gpg Operation succeed.</source> <translation>Gpg-Verarbeitung erfolgreich.</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="235"/> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="348"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="173"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="286"/> <source>Failure</source> <translation type="unfinished">Fehler</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="236"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="174"/> <source>Gpg Operation failed. Error code: %1 @@ -791,101 +799,101 @@ Quelle: %2 Beschrei: %3</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="263"/> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="270"/> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="538"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="201"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="208"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="476"/> <source>Error</source> <translation type="unfinished">Fehler</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="255"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="193"/> <source>Open Key</source> <translation type="unfinished">Schlüssel öffnen</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="256"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="194"/> <source>Keyring files</source> <translation type="unfinished">Schlüsselbunddateien</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="264"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="202"/> <source>Cannot open this file. Please make sure that this is a regular file and it's readable.</source> <translation type="unfinished">Kann diese Datei nicht öffnen. Bitte stellen Sie sicher, dass es sich um eine reguläre, lesbare Datei handelt.</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="271"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="209"/> <source>The target file is too large for a keyring.</source> <translation>Die Zieldatei ist zu groß für einen Schlüsselring.</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="277"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="215"/> <source>File Open Failed</source> <translation type="unfinished">Datei konnte nicht geöffnet werden</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="278"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="216"/> <source>Failed to open file: </source> <translation type="unfinished">Datei konnte nicht geöffnet werden: </translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="329"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="267"/> <source>Processing</source> <translation type="unfinished">In Bearbeitung</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="349"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="287"/> <source>Failed to execute command.</source> <translation type="unfinished">Fehler beim Ausführen des Befehls.</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="357"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="295"/> <source>Succeed in executing command.</source> <translation type="unfinished">Befehl erfolgreich ausgeführt.</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="359"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="297"/> <source>Warning</source> <translation type="unfinished">Warnung</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="360"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="298"/> <source>Finished executing command.</source> <translation type="unfinished">Ausführung des Befehls abgeschlossen.</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="381"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="319"/> <source>Default Keyserver Not Found</source> <translation type="unfinished">Standard-Keyserver nicht gefunden</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="382"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="320"/> <source>Cannot read default keyserver from your settings, please set a default keyserver first</source> <translation type="unfinished">Der Standard-Keyserver kann nicht aus Ihren Einstellungen gelesen werden, bitte legen Sie zuerst einen Standard-Keyserver fest</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="478"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="416"/> <source>Key Not Found</source> <translation type="unfinished">Schlüssel nicht gefunden</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="484"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="422"/> <source>Key Server Not Found</source> <translation type="unfinished">Schlüsselserver nicht gefunden</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="487"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="425"/> <source>Connection Error</source> <translation type="unfinished">Verbindungsfehler</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="426"/> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="498"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="364"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="436"/> <source>The key has been updated</source> <translation type="unfinished">Der Schlüssel wurde aktualisiert</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="428"/> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="500"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="366"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="438"/> <source>No need to update the key</source> <translation type="unfinished">Keine Notwendigkeit, den Schlüssel zu aktualisieren</translation> </message> @@ -893,37 +901,37 @@ Beschrei: %3</translation> <context> <name>GpgFrontend::UI::ConclusionPage</name> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="204"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="203"/> <source>Ready.</source> <translation type="unfinished">Bereit.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="205"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="204"/> <source>Have fun with GpgFrontend!</source> <translation type="unfinished">Viel Spaß mit GpgFrontend!</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="208"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="207"/> <source>You are ready to use GpgFrontend now.<br><br></source> <translation type="unfinished">Sie können GpgFrontend jetzt verwenden.<br><br></translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="210"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="209"/> <source>The Online Document</source> <translation type="unfinished">Das Online-Dokument</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="211"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="210"/> <source> will get you started with GpgFrontend. Anytime you encounter problems, please try to find help from the documentation</source> <translation type="unfinished"> wird Ihnen den Einstieg in GpgFrontend erleichtern. Wenn Sie auf Probleme stoßen, versuchen Sie bitte, Hilfe in der Dokumentation zu finden</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="220"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="219"/> <source>Open offline help.</source> <translation type="unfinished">Öffnen Sie die Offline-Hilfe.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="224"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="223"/> <source>Don't show the wizard again.</source> <translation type="unfinished">Zeigen Sie den Assistenten nicht mehr.</translation> </message> @@ -952,8 +960,8 @@ Beschrei: %3</translation> </message> <message> <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="74"/> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="112"/> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="146"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="111"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="145"/> <source>Error</source> <translation type="unfinished">Fehler</translation> </message> @@ -979,82 +987,82 @@ Beschrei: %3</translation> <translation type="unfinished">Bitte generieren Sie vor dem Export ein Passwort, um Ihren Schlüssel zu schützen. Dies ist sehr wichtig. Vergessen Sie nicht, Ihr Passwort an einem sicheren Ort aufzubewahren.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="113"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="112"/> <source>No key is suitable to export.</source> <translation>Kein Schlüssel für Export geeignet.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="118"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="117"/> <source>Generating</source> <translation type="unfinished">Erstellen</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="129"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="128"/> <source>Success</source> <translation type="unfinished">Erfolg</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="131"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="130"/> <source>The Key Package has been successfully generated and has been protected by encryption algorithms(AES-256-ECB). You can safely transfer your Key Package.</source> <translation type="unfinished">Das Schlüsselpaket wurde erfolgreich erstellt und durch Verschlüsselungsalgorithmen (AES-256-ECB) geschützt. Sie können Ihr Schlüsselpaket sicher übertragen.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="136"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="135"/> <source>But the key file cannot be leaked under any circumstances. Please delete the Key Package and key file as soon as possible after completing the transfer operation.</source> <translation type="unfinished">Aber die Schlüsseldatei darf unter keinen Umständen bekannt werden. Bitte löschen Sie das Schlüsselpaket und die Schlüsseldatei so bald wie möglich nach Abschluss des Übertragungsvorgangs.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="147"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="146"/> <source>An error occurred while exporting the key package.</source> <translation type="unfinished">Beim Exportieren des Schlüsselpakets ist ein Fehler aufgetreten.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="156"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="155"/> <source>Key Package Name</source> <translation type="unfinished">Name des Schlüsselpakets</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="157"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="156"/> <source>Output Path</source> <translation type="unfinished">Ausgabepfad</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="158"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="157"/> <source>Passphrase</source> <translation type="unfinished">Passphrase</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="160"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="159"/> <source>Tips: You can use Key Package to safely and conveniently transfer your public and private keys between devices.</source> <translation type="unfinished">Tipps: Mit dem Schlüsselpaket können Sie Ihre öffentlichen und privaten Schlüssel sicher und bequem zwischen Geräten übertragen.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="162"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="161"/> <source>Generate and Save Passphrase</source> <translation type="unfinished">Passphrase erstellen und speichern</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="163"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="162"/> <source>Generate Key Package Name</source> <translation type="unfinished">Namen für das Schlüsselpaket erstellen</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="164"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="163"/> <source>Select Output Path</source> <translation type="unfinished">Ausgabepfad auswählen</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="167"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="166"/> <source>Include secret key (Think twice before acting)</source> <translation type="unfinished">Geheimen Schlüssel einschließen (Denken Sie zweimal nach, bevor Sie handeln)</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="169"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="168"/> <source>Exclude keys that do not have a private key</source> <translation type="unfinished">Schlüssel ausschließen, die keinen privaten Schlüssel haben</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="172"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="171"/> <source>Export As Key Package</source> <translation type="unfinished">Als Schlüsselpaket exportieren</translation> </message> @@ -1062,141 +1070,151 @@ Beschrei: %3</translation> <context> <name>GpgFrontend::UI::FilePage</name> <message> - <location filename="../../../../src/ui/widgets/FilePage.cpp" line="63"/> + <location filename="../../../../src/ui/widgets/FilePage.cpp" line="46"/> + <source>Switch Batch Mode</source> + <translation type="unfinished">Batch-Modus wechseln</translation> + </message> + <message> + <location filename="../../../../src/ui/widgets/FilePage.cpp" line="66"/> <source>Show Hidden File</source> <translation type="unfinished">Versteckte Datei anzeigen</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FilePage.cpp" line="69"/> + <location filename="../../../../src/ui/widgets/FilePage.cpp" line="72"/> <source>Show System File</source> <translation type="unfinished">Systemdatei anzeigen</translation> </message> + <message> + <location filename="../../../../src/ui/widgets/FilePage.cpp" line="78"/> + <source>ASCII Mode</source> + <translation type="unfinished">ASCII-Modus</translation> + </message> </context> <context> <name>GpgFrontend::UI::FileTreeView</name> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="88"/> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="101"/> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="159"/> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="204"/> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="225"/> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="266"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="93"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="106"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="164"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="209"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="232"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="279"/> <source>Error</source> <translation type="unfinished">Fehler</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="89"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="94"/> <source>The path is not exists, unprivileged or unreachable.</source> <translation type="unfinished">Der Pfad ist nicht vorhanden, nicht privilegiert oder nicht erreichbar.</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="102"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="107"/> <source>The file is unprivileged or unreachable.</source> <translation type="unfinished">Die Datei ist nicht privilegiert oder nicht erreichbar.</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="152"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="157"/> <source>Warning</source> <translation type="unfinished">Warnung</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="153"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="158"/> <source>Are you sure you want to delete it?</source> <translation type="unfinished">Möchten Sie es wirklich löschen?</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="160"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="165"/> <source>Unable to delete the file or folder.</source> <translation type="unfinished">Die Datei oder der Ordner kann nicht gelöscht werden.</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="169"/> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="182"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="174"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="187"/> <source>Make New Directory</source> <translation type="unfinished">Neues Verzeichnis erstellen</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="170"/> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="183"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="175"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="188"/> <source>Directory Name</source> <translation type="unfinished">Verzeichnisname</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="197"/> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="218"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="202"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="225"/> <source>Create Empty File</source> <translation type="unfinished">Leere Datei erstellen</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="197"/> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="218"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="202"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="225"/> <source>Filename (you can given extension)</source> <translation type="unfinished">Dateiname (Sie können die Erweiterung angeben)</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="205"/> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="226"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="210"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="233"/> <source>Unable to create the file.</source> <translation type="unfinished">Die Datei kann nicht erstellt werden.</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="258"/> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="289"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="271"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="303"/> <source>Rename</source> <translation type="unfinished">Umbenennen</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="258"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="271"/> <source>New Filename</source> <translation type="unfinished">Neuer Dateiname</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="267"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="280"/> <source>Unable to rename the file or folder.</source> <translation type="unfinished">Die Datei oder der Ordner kann nicht umbenannt werden.</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="284"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="297"/> <source>Open</source> <translation type="unfinished">Öffnen</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="294"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="308"/> <source>Delete</source> <translation type="unfinished">Löschen</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="299"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="313"/> <source>Calculate Hash</source> <translation type="unfinished">Hash berechnen</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="304"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="318"/> <source>Directory</source> <translation type="unfinished">Verzeichnis</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="309"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="323"/> <source>File</source> <translation type="unfinished">Datei</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="314"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="328"/> <source>Compress...</source> <translation type="unfinished">Komprimieren...</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="321"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="335"/> <source>Open with Default System Application</source> <translation type="unfinished">Mit der Standardsystemanwendung öffnen</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="326"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="340"/> <source>New</source> <translation type="unfinished">Neu</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="382"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="402"/> <source>Calculating</source> <translation type="unfinished">Berechnen</translation> </message> @@ -1233,68 +1251,63 @@ Beschrei: %3</translation> </message> <message> <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="52"/> - <source>Enable to use longer key expiration date.</source> - <translation type="unfinished">Aktivieren, um ein längeres Schlüsselablaufdatum zu verwenden.</translation> - </message> - <message> - <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="54"/> <source>Import files dropped on the Key List without confirmation.</source> <translation type="unfinished">Dateien ohne Nachfrage importieren, die auf der Schlüsselliste abgelegt wurden.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="56"/> + <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="54"/> <source>Disable loading of all modules (including integrated modules)</source> <translation type="unfinished">Deaktivieren des Ladens aller Module (einschließlich integrierter Module)</translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="58"/> + <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="56"/> <source>Language</source> <translation type="unfinished">Sprache</translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="60"/> + <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="58"/> <source>NOTE</source> <translation type="unfinished">HINWEIS</translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="60"/> + <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="58"/> <source>: </source> <translation type="unfinished">: </translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="61"/> + <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="59"/> <source>GpgFrontend will restart automatically if you change the language!</source> <translation type="unfinished">GpgFrontend wird automatisch neu gestartet, wenn die Sprache geändert wird!</translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="63"/> + <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="61"/> <source>Data</source> <translation type="unfinished">Daten</translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="65"/> - <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="83"/> + <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="63"/> + <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="81"/> <source>Clear All Log (Total Size: %1)</source> <translation type="unfinished">Gesamtes Protokoll löschen (Gesamtgröße: %1)</translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="68"/> - <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="97"/> + <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="66"/> + <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="95"/> <source>Clear All Data Objects (Total Size: %1)</source> <translation type="unfinished">Alle Datenobjekte löschen (Gesamtgröße: %1)</translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="71"/> + <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="69"/> <source>Reveal in File Explorer</source> <translation>Im Datei-Explorer öffnen</translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="90"/> + <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="88"/> <source>Confirm</source> <translation type="unfinished">Bestätigen</translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="91"/> + <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="89"/> <source>Are you sure you want to clear all data objects? This will result in loss of all cached form positions, statuses, key servers, etc.</source> <translation type="unfinished">Sind Sie sicher, dass Sie alle Datenobjekte löschen möchten? Dies führt zum Verlust aller zwischengespeicherten Formularpositionen, Status, Schlüsselserver usw.</translation> @@ -1303,150 +1316,182 @@ This will result in loss of all cached form positions, statuses, key servers, et <context> <name>GpgFrontend::UI::GnuPGControllerDialog</name> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="69"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="70"/> <source>General</source> <translation type="unfinished">Allgemein</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="70"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="71"/> <source>Key Database</source> <translation type="unfinished">Schlüsseldatenbank</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="71"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="72"/> <source>Advanced</source> <translation type="unfinished">Fortschrittlich</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="51"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="52"/> <source>Use Binary Mode for File Operations</source> <translation type="unfinished">Binärmodus für Dateioperationen verwenden</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="53"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="54"/> <source>Use Pinentry as Password Input Dialog</source> <translation type="unfinished">Verwenden Sie Pinentry als Dialog für die Passworteingabe</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="54"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="55"/> <source>Enable GpgME Debug Log</source> <translation type="unfinished">GpgME-Debug-Log einschalten</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="55"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="56"/> <source>Use Custom GnuPG</source> <translation type="unfinished">Verwenden Sie benutzerdefiniertes GnuPG</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="56"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="57"/> <source>Select GnuPG Path</source> <translation type="unfinished">Wählen Sie den GnuPG-Pfad aus</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="76"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="77"/> <source>Name</source> <translation type="unfinished">Name</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="76"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="77"/> <source>Path</source> <translation type="unfinished">Pfad</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="363"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="77"/> + <source>Status</source> + <translation type="unfinished">Status</translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="77"/> + <source>Real Path</source> + <translation type="unfinished">Echter Pfad</translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="360"/> <source>Maximum Key Database Limit Reached</source> <translation type="unfinished">Maximum Key Database Limit erreicht</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="364"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="361"/> <source>Currently, GpgFrontend supports a maximum of 8 key databases. Please remove an existing database to add a new one.</source> <translation type="unfinished">Derzeit unterstützt GpgFrontend maximal 8 Schlüsseldatenbanken. Bitte entfernen Sie eine bestehende Datenbank, um eine neue hinzuzufügen.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="375"/> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="605"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="372"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="618"/> <source>Duplicate Key Database Paths</source> <translation type="unfinished">Doppelte Datenbankpfade für Schlüssel</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="376"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="373"/> <source>The newly added key database path duplicates a previously existing one.</source> <translation type="unfinished">Der neu hinzugefügte Schlüsseldatenbankpfad dupliziert einen bereits vorhandenen Pfad.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="445"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="382"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="629"/> + <source>Invalid Key Database Paths</source> + <translation type="unfinished">Ungültige Schlüsseldatenbankpfade</translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="383"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="630"/> + <source>The edited key database path is not a valid path that GpgFrontend can use</source> + <translation type="unfinished">Der editierte Pfad zur Schlüsseldatenbank ist kein gültiger Pfad, den GpgFrontend verwenden kann</translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="430"/> + <source>Active</source> + <translation type="unfinished">Aktiv</translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="430"/> + <source>Inactive</source> + <translation type="unfinished">Inaktiv</translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="458"/> <source>Confirm Deletion</source> <translation type="unfinished">Bestätigen Sie die Löschung</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="446"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="459"/> <source>Are you sure you want to delete the selected key database?</source> <translation type="unfinished">Sind Sie sicher, dass Sie die ausgewählte Schlüsseldatenbank löschen wollen?</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="584"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="597"/> <source>No Key Database Selected</source> <translation type="unfinished">Keine Schlüsseldatenbank ausgewählt</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="585"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="598"/> <source>Please select a key database to edit.</source> <translation type="unfinished">Bitte wählen Sie eine Schlüsseldatenbank zur Bearbeitung aus.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="606"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="619"/> <source>The edited key database path duplicates a previously existing one.</source> <translation type="unfinished">Der bearbeitete Schlüsseldatenbankpfad dupliziert einen bereits vorhandenen Pfad.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="58"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="59"/> <source>Restart Gpg Agent on start</source> <translation type="unfinished">Gpg-Agent beim Start neu starten</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="60"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="61"/> <source>Kill all gnupg daemon at close</source> <translation type="unfinished">Alle gnupg-Daemons beim Schließen abschalten</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="64"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="65"/> <source>Tips: please select a directory where "gpgconf" is located in.</source> <translation type="unfinished">Tipps: Bitte wählen Sie ein Verzeichnis, in dem sich "gpgconf" befindet.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="66"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="67"/> <source>Tips: notice that modify any of these settings will cause an Application restart.</source> <translation type="unfinished">Tipps: Beachten Sie, dass das Ändern dieser Einstellungen zu einem Neustart der Anwendung führt.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="107"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="108"/> <source>Open Directory</source> <translation type="unfinished">Verzeichnis öffnen</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="183"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="184"/> <source>GnuPG Controller</source> <translation type="unfinished">GnuPG-Controller</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="331"/> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="338"/> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="350"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="328"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="335"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="347"/> <source>Illegal GnuPG Path</source> <translation type="unfinished">Unzulässiger GnuPG-Pfad</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="332"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="329"/> <source>Target GnuPG Path is not an exists readable directory.</source> <translation type="unfinished">Der Ziel-GnuPG-Pfad ist kein lesbares Verzeichnis.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="339"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="336"/> <source>Target GnuPG Path is not an absolute path.</source> <translation type="unfinished">Der Ziel-GnuPG-Pfad ist kein absoluter Pfad.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="351"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="348"/> <source>Target GnuPG Path contains no "gpgconf" executable.</source> <translation type="unfinished">Der Ziel-GnuPG-Pfad enthält keine ausführbare Datei „gpgconf“.</translation> </message> @@ -1454,27 +1499,38 @@ This will result in loss of all cached form positions, statuses, key servers, et <context> <name>GpgFrontend::UI::GpgFrontendApplication</name> <message> - <location filename="../../../../src/ui/GpgFrontendApplication.cpp" line="71"/> + <location filename="../../../../src/ui/GpgFrontendApplication.cpp" line="77"/> <source>Standard Exception Thrown</source> <translation type="unfinished">Standard-Exception ausgelöst</translation> </message> <message> - <location filename="../../../../src/ui/GpgFrontendApplication.cpp" line="72"/> + <location filename="../../../../src/ui/GpgFrontendApplication.cpp" line="78"/> <source>Oops, an standard exception was thrown during the running of the program. This is not a serious problem, it may be the negligence of the programmer, please report this problem if you can.</source> <translation type="unfinished">Hoppla, während der Ausführung des Programms wurde eine Standard-Exception ausgelöst. Dies ist kein ernsthaftes Problem, es kann die Nachlässigkeit des Programmierers sein, bitte melden Sie dieses Problem, wenn Sie können.</translation> </message> <message> - <location filename="../../../../src/ui/GpgFrontendApplication.cpp" line="80"/> + <location filename="../../../../src/ui/GpgFrontendApplication.cpp" line="86"/> <source>Unhandled Exception Thrown</source> <translation type="unfinished">Unbehandelte Ausnahme ausgelöst</translation> </message> <message> - <location filename="../../../../src/ui/GpgFrontendApplication.cpp" line="81"/> + <location filename="../../../../src/ui/GpgFrontendApplication.cpp" line="87"/> <source>Oops, an unhandled exception was thrown during the running of the program. This is not a serious problem, it may be the negligence of the programmer, please report this problem if you can.</source> <translation type="unfinished">Hoppla, während der Ausführung des Programms wurde eine nicht behandelte Ausnahme ausgelöst. Dies ist kein ernsthaftes Problem, es kann auf der Nachlässigkeit des Programmierers beruhen, bitte melden Sie dieses Problem, wenn Sie können.</translation> </message> </context> <context> + <name>GpgFrontend::UI::GpgOperaHelper</name> + <message> + <location filename="../../../../src/ui/function/GpgOperaHelper.cpp" line="97"/> + <location filename="../../../../src/ui/function/GpgOperaHelper.cpp" line="133"/> + <location filename="../../../../src/ui/function/GpgOperaHelper.cpp" line="175"/> + <location filename="../../../../src/ui/function/GpgOperaHelper.cpp" line="213"/> + <source>Critical Error</source> + <translation type="unfinished">Kritischer Fehler</translation> + </message> +</context> +<context> <name>GpgFrontend::UI::InfoBoardWidget</name> <message> <location filename="../../../../src/ui/widgets/InfoBoardWidget.cpp" line="46"/> @@ -1558,42 +1614,42 @@ This will result in loss of all cached form positions, statuses, key servers, et <context> <name>GpgFrontend::UI::IntroPage</name> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="71"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="70"/> <source>Getting Started...</source> <translation type="unfinished">Der Einstieg...</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="72"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="71"/> <source>... with GpgFrontend</source> <translation type="unfinished">... mit GpgFrontend</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="75"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="74"/> <source>Welcome to GpgFrontend for decrypting and signing text or files!</source> <translation type="unfinished">Willkommen bei GpgFrontend zum Entschlüsseln und Signieren von Texten und Dateien!</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="77"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="76"/> <source>is a Powerful, Easy-to-Use, Compact, Cross-Platform, and Installation-Free OpenPGP Crypto Tool. </source> <translation type="unfinished">ist ein leistungsstarkes, einfach zu bedienendes, kompaktes, plattformübergreifendes und installationsfreies OpenPGP-Verschlüsselungsprogramm.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="79"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="78"/> <source>To get started, be sure to check out the</source> <translation type="unfinished">Für die ersten Schritte sollten Sie sich die</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="82"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="81"/> <source>by clicking the link, the page will open in your web browser</source> <translation type="unfinished">Wenn Sie auf den Link klicken, wird die Seite in Ihrem Webbrowser geöffnet.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="81"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="80"/> <source>Overview</source> <translation type="unfinished">Überblick</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="91"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="90"/> <source>If it supports the language currently being used in your system, GpgFrontend will automatically set it.</source> <translation type="unfinished">Wenn es die aktuell in Ihrem System verwendete Sprache unterstützt, wird GpgFrontend diese automatisch einstellen.</translation> </message> @@ -1601,52 +1657,57 @@ This will result in loss of all cached form positions, statuses, key servers, et <context> <name>GpgFrontend::UI::KeyDatabaseEditDialog</name> <message> - <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="47"/> + <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="50"/> <source>Key Database Name</source> <translation type="unfinished">Name der Schlüssel Datenbank</translation> </message> <message> - <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="48"/> + <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="51"/> <source>Key Database Path</source> <translation type="unfinished">Pfad der Schlüsseldatenbank</translation> </message> <message> - <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="49"/> + <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="52"/> <source>Select A Key Database Path</source> <translation type="unfinished">Wählen Sie den Pfad einer Schlüsseldatenbank</translation> </message> <message> - <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="51"/> + <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="53"/> + <source>Convert to Relative Path</source> + <translation type="unfinished">In relativen Pfad umwandeln</translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="55"/> <source>Key Database Info</source> <translation type="unfinished">Information der Schlüsseldatenbank</translation> </message> <message> - <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="55"/> + <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="59"/> <source>Open Directory</source> <translation type="unfinished">Verzeichnis öffnen</translation> </message> <message> - <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="58"/> + <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="62"/> <source>Illegal GnuPG Key Database Path</source> <translation type="unfinished">Unzulässiger GnuPG-Schlüsseldatenbankpfad</translation> </message> <message> - <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="59"/> + <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="63"/> <source>Target GnuPG Key Database Path is not an exists readable directory.</source> <translation type="unfinished">Der Zielpfad für die GnuPG-Schlüsseldatenbank ist kein lesbares Verzeichnis.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="81"/> + <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="85"/> <source>The key database name cannot be empty.</source> <translation type="unfinished">Der Name der Schlüsseldatenbank darf nicht leer sein.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="86"/> + <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="90"/> <source>The key database path cannot be empty.</source> <translation type="unfinished">Der Pfad der Schlüsseldatenbank darf nicht leer sein.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="92"/> + <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="96"/> <source>A key database with the name '%1' already exists. Please choose a different name.</source> <translation type="unfinished">Eine Schlüsseldatenbank mit dem Namen '%1' existiert bereits. Bitte wählen Sie einen anderen Namen.</translation> </message> @@ -1680,144 +1741,250 @@ This will result in loss of all cached form positions, statuses, key servers, et </message> </context> <context> - <name>GpgFrontend::UI::KeyGenDialog</name> + <name>GpgFrontend::UI::KeyGenPage</name> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="66"/> - <source>Generate Key</source> - <translation type="unfinished">Schlüssel erstellen</translation> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="163"/> + <source>Create a keypair...</source> + <translation type="unfinished">Schlüsselpaar erstellen...</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="100"/> - <source>Name must contain at least five characters.</source> - <translation type="unfinished">Der Name muss mindestens fünf Zeichen enthalten.</translation> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="164"/> + <source>...for decrypting and signing messages</source> + <translation type="unfinished">...zum Entschlüsseln und Signieren von Nachrichten</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="105"/> - <source>Please give a email address.</source> - <translation type="unfinished">Bitte geben Sie eine E-Mail-Adresse an.</translation> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="166"/> + <source>You should create a new keypair.The pair consists of a public and a private key.<br>Other users can use the public key to encrypt messages for you and verify messages signed by you.You can use the private key to decrypt and sign messages.<br>For more information have a look at the offline tutorial (which then is shown in the main window):</source> + <translation type="unfinished">Sie sollten ein neues Schlüsselpaar erstellen. Das Paar besteht aus einem öffentlichen und einem privaten Schlüssel.<br>Andere Benutzer können den öffentlichen Schlüssel verwenden, um Nachrichten für Sie zu verschlüsseln und von Ihnen signierte Nachrichten zu überprüfen. Sie können Ihren privaten Schlüssel zum Entschlüsseln und Signieren von Nachrichten verwenden.<br>Weitere Informationen finden Sie im Offline-Tutorial (das dann im Hauptfenster angezeigt wird):</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="113"/> - <source>Expiration time too long.</source> - <translation type="unfinished">Die Ablaufzeit ist zu lang.</translation> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="178"/> + <source>Offline tutorial</source> + <translation type="unfinished">Offline-Tutorial</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="158"/> - <source>Generating</source> - <translation type="unfinished">Erstellen</translation> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="182"/> + <source>Create New Key</source> + <translation type="unfinished">Neuen Schlüssel erstellen</translation> </message> +</context> +<context> + <name>GpgFrontend::UI::KeyGenerateDialog</name> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="169"/> - <source>Error</source> - <translation type="unfinished">Fehler</translation> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="63"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="70"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="578"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="584"/> + <source>Custom</source> + <translation type="unfinished">Benutzerdefiniert</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="170"/> - <source>Unknown error occurred</source> - <translation>Unbekannter Fehler ist aufgetreten</translation> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="71"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="527"/> + <source>3 Months</source> + <translation type="unfinished">3 Monate</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="206"/> - <source>Key Usage</source> - <translation type="unfinished">Schlüsselverwendung</translation> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="72"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="532"/> + <source>6 Months</source> + <translation type="unfinished">6 Monate</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="208"/> - <source>Encryption</source> - <translation type="unfinished">Verschlüsselung</translation> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="73"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="537"/> + <source>1 Year</source> + <translation type="unfinished">1 Jahr</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="211"/> - <source>Signing</source> - <translation type="unfinished">Unterzeichnen</translation> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="74"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="139"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="144"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="542"/> + <source>2 Years</source> + <translation type="unfinished">2 Jahre</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="214"/> - <source>Certification</source> - <translation type="unfinished">Zertifizierung</translation> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="75"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="547"/> + <source>5 Years</source> + <translation type="unfinished">5 Jahre</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="217"/> - <source>Authentication</source> - <translation type="unfinished">Authentifizierung</translation> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="76"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="552"/> + <source>10 Years</source> + <translation type="unfinished">10 Jahre</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="455"/> - <source>Key Database</source> - <translation type="unfinished">Schlüsseldatenbank</translation> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="77"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="100"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="109"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="558"/> + <source>Non Expired</source> + <translation type="unfinished">Nicht abgelaufen</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="456"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="81"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="290"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="589"/> + <source>Primary Key Only</source> + <translation type="unfinished">Nur Primärschlüssel</translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="82"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="338"/> + <source>Primary Key With Subkey</source> + <translation type="unfinished">Primärschlüssel mit Unterschlüssel</translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="85"/> <source>Name</source> <translation type="unfinished">Name</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="457"/> - <source>Email Address</source> - <translation type="unfinished">E-Mail-Addresse</translation> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="86"/> + <source>Email</source> + <translation type="unfinished">E-Mail</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="458"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="87"/> <source>Comment</source> <translation type="unfinished">Kommentar</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="459"/> - <source>Expiration Date</source> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="88"/> + <source>Key Database</source> + <translation type="unfinished">Schlüsseldatenbank</translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="89"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="92"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="102"/> + <source>Algorithm</source> + <translation type="unfinished">Algorithmus</translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="90"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="93"/> + <source>Validity Period</source> + <translation type="unfinished">Gültigkeitsdauer</translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="94"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="104"/> + <source>Key Length</source> + <translation type="unfinished">Länge des Schlüssels</translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="95"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="105"/> + <source>Usage</source> + <translation type="unfinished">Verwendungszweck</translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="96"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="106"/> + <source>Encrypt</source> + <translation type="unfinished">Verschlüsseln</translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="97"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="107"/> + <source>Sign</source> + <translation type="unfinished">Unterschreiben</translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="98"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="108"/> + <source>Authentication</source> + <translation type="unfinished">Authentifizierung</translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="99"/> + <source>No Passphrase</source> + <translation type="unfinished">Keine Passphrase</translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="103"/> + <source>Expire Date</source> <translation type="unfinished">Ablaufdatum</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="460"/> - <source>Never Expire</source> - <translation type="unfinished">Nie ablaufen</translation> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="112"/> + <source>Easy Mode</source> + <translation type="unfinished">Einfacher Modus</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="461"/> - <source>KeySize (in Bit)</source> - <translation type="unfinished">Schlüsselgröße (in Bit)</translation> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="113"/> + <source>Primary Key</source> + <translation type="unfinished">Primärschlüssel</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="462"/> - <source>Key Type</source> - <translation type="unfinished">Schlüsselart</translation> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="114"/> + <source>Subkey</source> + <translation type="unfinished">Unterschlüssel</translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="117"/> + <source>Generate</source> + <translation type="unfinished">Erstellen</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="463"/> - <source>Non Pass Phrase</source> - <translation type="unfinished">Nicht-Passphrase</translation> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="134"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="261"/> + <source>None</source> + <translation type="unfinished">Kein</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="477"/> - <source>Basic Information</source> - <translation type="unfinished">Grundlegende Informationen</translation> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="146"/> + <source>Generate Key</source> + <translation type="unfinished">Schlüssel erstellen</translation> </message> -</context> -<context> - <name>GpgFrontend::UI::KeyGenPage</name> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="164"/> - <source>Create a keypair...</source> - <translation type="unfinished">Schlüsselpaar erstellen...</translation> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="156"/> + <source>Name must contain at least five characters.</source> + <translation type="unfinished">Der Name muss mindestens fünf Zeichen enthalten.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="165"/> - <source>...for decrypting and signing messages</source> - <translation type="unfinished">...zum Entschlüsseln und Signieren von Nachrichten</translation> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="161"/> + <source>Please give a valid email address.</source> + <translation type="unfinished">Bitte geben Sie eine gültige E-Mail Adresse an.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="167"/> - <source>You should create a new keypair.The pair consists of a public and a private key.<br>Other users can use the public key to encrypt messages for you and verify messages signed by you.You can use the private key to decrypt and sign messages.<br>For more information have a look at the offline tutorial (which then is shown in the main window):</source> - <translation type="unfinished">Sie sollten ein neues Schlüsselpaar erstellen. Das Paar besteht aus einem öffentlichen und einem privaten Schlüssel.<br>Andere Benutzer können den öffentlichen Schlüssel verwenden, um Nachrichten für Sie zu verschlüsseln und von Ihnen signierte Nachrichten zu überprüfen. Sie können Ihren privaten Schlüssel zum Entschlüsseln und Signieren von Nachrichten verwenden.<br>Weitere Informationen finden Sie im Offline-Tutorial (das dann im Hauptfenster angezeigt wird):</translation> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="166"/> + <source>Please give a valid primary key algorithm.</source> + <translation type="unfinished">Bitte geben Sie einen gültigen Primärschlüssel-Algorithmus an.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="179"/> - <source>Offline tutorial</source> - <translation type="unfinished">Offline-Tutorial</translation> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="175"/> + <source>Time to primary key expiration must not be less than 120 seconds.</source> + <translation type="unfinished">Die Zeit bis zum Ablauf des Primärschlüssels darf nicht weniger als 120 Sekunden betragen.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="183"/> - <source>Create New Key</source> - <translation type="unfinished">Neuen Schlüssel erstellen</translation> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="182"/> + <source>Please give a valid subkey algorithm.</source> + <translation type="unfinished">Bitte geben Sie einen gültigen Unterschlüssel-Algorithmus an.</translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="190"/> + <source>Time to subkey expiration must not be less than 120 seconds.</source> + <translation type="unfinished">Die Zeit bis zum Ablauf des Unterschlüssels darf nicht weniger als 120 Sekunden betragen.</translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="617"/> + <source>Error</source> + <translation type="unfinished">Fehler</translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="618"/> + <source>Unknown error occurred</source> + <translation type="unfinished">Unbekannter Fehler ist aufgetreten</translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="630"/> + <source>Generating</source> + <translation type="unfinished">Erstellen</translation> </message> </context> <context> @@ -1937,122 +2104,132 @@ This will result in loss of all cached form positions, statuses, key servers, et <context> <name>GpgFrontend::UI::KeyList</name> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="254"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="250"/> <source>Refresh</source> <translation type="unfinished">Aktualisierung</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="256"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="252"/> <source>Refresh the key list to synchronize changes.</source> <translation type="unfinished">Aktualisieren Sie die Schlüsselliste, um Änderungen zu synchronisieren.</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="257"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="253"/> <source>Sync Public Key</source> <translation type="unfinished">Öffentlichen Schlüssel synchronisieren</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="259"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="255"/> <source>Sync public key with your default keyserver.</source> <translation type="unfinished">Den öffentlichen Schlüssel mit Ihrem Standard-Schlüsselserver synchronisieren.</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="260"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="256"/> <source>Uncheck ALL</source> <translation type="unfinished">Alle abwählen</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="262"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="258"/> <source>Cancel all checked items in the current tab at once.</source> <translation type="unfinished">Alle markierten Elemente in der aktuellen Registerkarte auf einmal abbrechen.</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="263"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="259"/> <source>Check ALL</source> <translation type="unfinished">ALLE überprüfen</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="265"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="261"/> <source>Check all items in the current tab at once</source> <translation type="unfinished">Alle Elemente im aktuellen Tab gleichzeitig überprüfen</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="266"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="262"/> <source>Search for keys...</source> <translation type="unfinished">Suche nach Schlüsseln...</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="108"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="106"/> <source>Key ID</source> <translation type="unfinished">Schlüssel-ID</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="119"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="117"/> <source>Algorithm</source> <translation type="unfinished">Algorithmus</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="130"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="128"/> <source>Owner Trust</source> <translation type="unfinished">Vertrauen des Eigentümers</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="142"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="140"/> <source>Create Date</source> <translation type="unfinished">Erstellungsdatum</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="154"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="152"/> <source>Subkey(s)</source> <translation type="unfinished">Unterschlüssel(e)</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="168"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="166"/> <source>Comment</source> <translation type="unfinished">Kommentar</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="300"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="296"/> <source>Refreshing Key List...</source> <translation type="unfinished">Schlüsselliste wird aktualisiert...</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="477"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="473"/> <source>Import Keys</source> <translation type="unfinished">Schlüssel importieren</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="479"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="475"/> <source>You've dropped something on the table.</source> <translation type="unfinished">Sie haben etwas in der Tabelle abgelegt.</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="480"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="476"/> <source>GpgFrontend will now try to import key(s).</source> <translation type="unfinished">GpgFrontend wird nun versuchen, Schlüssel zu importieren.</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="483"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="479"/> <source>Always import without bothering.</source> <translation type="unfinished">Immer ohne Nachfrage inportieren.</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="305"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="645"/> + <source>Error</source> + <translation type="unfinished">Fehler</translation> + </message> + <message> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="645"/> + <source>Key Not Found.</source> + <translation type="unfinished">Schlüssel nicht gefunden.</translation> + </message> + <message> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="301"/> <source>Key List Refreshed.</source> <translation type="unfinished">Schlüsselliste aktualisiert.</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="600"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="577"/> <source>Syncing Key List...</source> <translation type="unfinished">Schlüsselliste wird synchronisiert...</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="609"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="586"/> <source>Sync [%1/%2] %3 %4</source> <translation type="unfinished">Synchronisieren [%1/%2] %3 %4</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="619"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="596"/> <source>Key List Sync Done.</source> <translation type="unfinished">Synchronisierung der Schlüsselliste abgeschlossen.</translation> </message> @@ -2060,368 +2237,354 @@ This will result in loss of all cached form positions, statuses, key servers, et <context> <name>GpgFrontend::UI::KeyMgmt</name> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="58"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="59"/> <source>All</source> <translation type="unfinished">Alle</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="63"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="64"/> <source>Only Public Key</source> <translation type="unfinished">Nur öffentlicher Schlüssel</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="70"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="71"/> <source>Has Private Key</source> <translation type="unfinished">Hat privaten Schlüssel</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="77"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="78"/> <source>No Primary Key</source> <translation type="unfinished">Kein Primärschlüssel</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="86"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="87"/> <source>Revoked</source> <translation type="unfinished">Widerrufen</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="93"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="94"/> <source>Expired</source> <translation type="unfinished">Abgelaufen</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="117"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="114"/> <source>KeyPair Management</source> <translation type="unfinished">Schlüsselpaar-Verwaltung</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="138"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="135"/> <source>Open</source> <translation type="unfinished">Öffnen</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="140"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="137"/> <source>Open Key File</source> <translation type="unfinished">Schlüsseldatei öffnen</translation> </message> <message> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="143"/> <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="146"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="149"/> <source>Close</source> <translation type="unfinished">Schließen</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="152"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="149"/> <source>New Keypair</source> <translation type="unfinished">Neues Schlüsselpaar</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="155"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="152"/> <source>Generate KeyPair</source> <translation type="unfinished">Schlüsselpaar erstellen</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="159"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="156"/> <source>New Subkey</source> <translation type="unfinished">Neuer Unterschlüssel</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="163"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="160"/> <source>Generate Subkey For Selected KeyPair</source> <translation type="unfinished">Unterschlüssel für ausgewähltes Schlüsselpaar erstellen</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="167"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="266"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="164"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="262"/> <source>File</source> <translation type="unfinished">Datei</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="169"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="166"/> <source>Import New Key From File</source> <translation type="unfinished">Neuen Schlüssel aus Datei importieren</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="175"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="172"/> <source>Clipboard</source> <translation type="unfinished">Zwischenablage</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="179"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="176"/> <source>Import New Key From Clipboard</source> <translation type="unfinished">Neuen Schlüssel aus der Zwischenablage importieren</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="191"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="187"/> <source>Keyserver</source> <translation type="unfinished">Schlüsselserver</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="195"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="191"/> <source>Import New Key From Keyserver</source> <translation type="unfinished">Neuen Schlüssel vom Schlüsselserver importieren</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="202"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="568"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="198"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="543"/> <source>Key Package</source> <translation type="unfinished">Schlüsselpaket</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="205"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="201"/> <source>Import Key(s) From a Key Package</source> <translation type="unfinished">Schlüssel aus einem Schlüsselpaket importieren</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="209"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="205"/> <source>Export To Clipboard</source> <translation type="unfinished">In die Zwischenablage exportieren</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="213"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="209"/> <source>Export Checked Key(s) To Clipboard</source> <translation>Ausgewählte(n) Schlüssel in Zwischenablage exportiert</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="217"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="213"/> <source>Export As Key Package</source> <translation type="unfinished">Als Schlüsselpaket exportieren</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="220"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="216"/> <source>Export Checked Key(s) To a Key Package</source> <translation type="unfinished">Geprüfte(n) Schlüssel in ein Schlüsselpaket exportieren</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="224"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="220"/> <source>Export As OpenSSH</source> <translation type="unfinished">Als OpenSSH exportieren</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="227"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="223"/> <source>Export Checked Key As OpenSSH Format to File</source> <translation>Ausgewählten Schlüssel im OpenSSH Format in Datei exportiert</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="231"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="227"/> <source>Delete Selected Key(s)</source> <translation type="unfinished">Ausgewählte(n) Schlüssel löschen</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="233"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="229"/> <source>Delete the Selected keys</source> <translation type="unfinished">Die ausgewählten Schlüssel löschen</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="237"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="233"/> <source>Delete Checked Key(s)</source> <translation type="unfinished">Geprüfte(n) Schlüssel löschen</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="239"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="235"/> <source>Delete the Checked keys</source> <translation type="unfinished">Die markierten Schlüssel löschen</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="244"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="240"/> <source>Show Key Details</source> <translation type="unfinished">Schlüsseldetails anzeigen</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="246"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="242"/> <source>Show Details for this Key</source> <translation type="unfinished">Details zu diesem Schlüssel anzeigen</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="250"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="252"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="246"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="248"/> <source>Set Owner Trust Level</source> <translation type="unfinished">Vertrauensstufe des Eigentümers festlegen</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="270"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="290"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="266"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="286"/> <source>Key</source> <translation type="unfinished">Schlüssel</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="271"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="267"/> <source>Generate Key</source> <translation type="unfinished">Schlüssel erstellen</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="275"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="303"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="271"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="299"/> <source>Import Key</source> <translation type="unfinished">Schlüssel importieren</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="281"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="311"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="312"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="277"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="307"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="308"/> <source>Export Key</source> <translation>Schlüssel exportieren</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="302"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="298"/> <source>Import key</source> <translation type="unfinished">Schlüssel importieren</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="347"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="343"/> <source>Deleting Keys</source> <translation type="unfinished">Schlüssel löschen</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="348"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="344"/> <source>Are you sure that you want to delete the following keys?</source> <translation type="unfinished">Möchten Sie die folgenden Schlüssel wirklich löschen?</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="350"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="346"/> <source>The action can not be undone.</source> <translation type="unfinished">Die Aktion kann nicht rückgängig gemacht werden.</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="368"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="431"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="443"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="473"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="522"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="533"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="546"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="577"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="585"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="601"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="609"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="625"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="418"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="430"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="497"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="508"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="521"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="552"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="560"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="576"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="584"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="600"/> <source>Error</source> <translation type="unfinished">Fehler</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="368"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="473"/> - <source>Key Not Found.</source> - <translation type="unfinished">Schlüssel nicht gefunden.</translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="379"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="393"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="493"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="499"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="367"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="381"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="469"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="475"/> <source>Forbidden</source> <translation type="unfinished">Verboten</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="380"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="394"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="368"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="382"/> <source>Please check some keys before doing this operation.</source> <translation type="unfinished">Bitte wählen Sie mindestens einen Schlüssel aus, bevor Sie diesen Vorgang ausführen.</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="386"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="560"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="374"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="535"/> <source>key(s) exported</source> <translation type="unfinished">Schlüssel exportiert</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="421"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="512"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="408"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="487"/> <source>Exporting</source> <translation>Exportiere</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="432"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="444"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="523"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="534"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="419"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="431"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="498"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="509"/> <source>Unknown error occurred</source> <translation>Unbekannter Fehler ist aufgetreten</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="465"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="477"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="453"/> <source>Invalid Operation</source> <translation type="unfinished">Ungültige Operation</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="466"/> - <source>Please select one KeyPair before doing this operation.</source> - <translation type="unfinished">Bitte wählen Sie ein Schlüsselpaar aus, bevor Sie diesen Vorgang ausführen.</translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="478"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="454"/> <source>If a key pair does not have a private key then it will not be able to generate sub-keys.</source> <translation type="unfinished">Wenn ein Schlüsselpaar keinen privaten Schlüssel hat, kann es keine Unterschlüssel generieren.</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="494"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="470"/> <source>Please check a key before performing this operation.</source> <translation>Bitte wählen Sie einen Schlüssel aus, bevor Sie diesen Vorgang starten.</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="500"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="476"/> <source>This operation accepts just a single key.</source> <translation>Dieser Vorgang kann nur für einen einzelnen Schlüssel ausgeführt werden.</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="547"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="522"/> <source>This key may not be able to export as OpenSSH format. Please check the key-size of the subkey(s) used to sign.</source> <translation type="unfinished">Dieser Schlüssel kann möglicherweise nicht im OpenSSH-Format exportiert werden. Bitte überprüfen Sie die Schlüsselgröße der zum Signieren verwendeten Unterschlüssel.</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="555"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="530"/> <source>Export OpenSSH Key To File</source> <translation type="unfinished">OpenSSH-Schlüssel in eine Datei exportieren</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="556"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="531"/> <source>OpenSSH Public Key Files</source> <translation type="unfinished">OpenSSH-Dateien mit öffentlichem Schlüssel</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="568"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="543"/> <source>Import Key Package</source> <translation type="unfinished">Schlüsselpaket importieren</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="578"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="602"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="553"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="577"/> <source>Cannot open this file. Please make sure that this is a regular file and it's readable.</source> <translation type="unfinished">Kann diese Datei nicht öffnen. Bitte stellen Sie sicher, dass es sich um eine reguläre, lesbare Datei handelt.</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="586"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="561"/> <source>The target file is too large for a key package.</source> <translation type="unfinished">Die Zieldatei ist zu groß für ein Schlüsselpaket.</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="591"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="566"/> <source>Import Key Package Passphrase File</source> <translation type="unfinished">Schlüsselpaket-Passphrasendatei importieren</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="592"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="567"/> <source>Key Package Passphrase File</source> <translation type="unfinished">Schlüsselpaket-Passphrasendatei</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="610"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="585"/> <source>The target file is too large for a key package passphrase.</source> <translation type="unfinished">Die Zieldatei ist zu groß für eine Schlüsselpaket-Passphrase.</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="615"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="590"/> <source>Importing</source> <translation type="unfinished">Importieren</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="632"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="607"/> <source>key(s) imported</source> <translation type="unfinished">Schlüssel importiert</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="626"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="601"/> <source>An error occur in importing key package.</source> <translation type="unfinished">Beim Importieren des Schlüsselpakets ist ein Fehler aufgetreten.</translation> </message> @@ -2627,7 +2790,7 @@ This will result in loss of all cached form positions, statuses, key servers, et <translation type="unfinished">Warnung: Der Primärschlüssel ist nicht vorhanden.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairDetailTab.cpp" line="350"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairDetailTab.cpp" line="344"/> <source>Notice: The public key has been published on keys.openpgp.org.</source> <translation type="unfinished">Hinweis: Der öffentliche Schlüssel wurde auf keys.openpgp.org veröffentlicht.</translation> </message> @@ -2635,125 +2798,125 @@ This will result in loss of all cached form positions, statuses, key servers, et <context> <name>GpgFrontend::UI::KeyPairOperaTab</name> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="62"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="61"/> <source>General Operations</source> <translation type="unfinished">Allgemeine Vorgänge</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="68"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="67"/> <source>Export Public Key</source> <translation type="unfinished">Öffentlichen Schlüssel exportieren</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="74"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="73"/> <source>Export Private Key</source> <translation type="unfinished">Privaten Schlüssel exportieren</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="81"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="80"/> <source>Modify Expiration Datetime (Primary Key)</source> <translation type="unfinished">Ablaufdatum/Uhrzeit ändern (Primärschlüssel)</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="84"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="83"/> <source>Modify Password</source> <translation type="unfinished">Passwort verändern</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="208"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="207"/> <source>Generate Revoke Certificate</source> <translation type="unfinished">Widerrufszertifikat erstellen</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="125"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="124"/> <source>Modify TOFU Policy</source> <translation type="unfinished">TOFU-Richtlinie ändern</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="101"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="100"/> <source>Key Server Operations</source> <translation type="unfinished">Schlüsselserver-Operationen</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="109"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="689"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="108"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="687"/> <source>Import A Paper Key</source> <translation type="unfinished">Importieren eines Papierschlüssels</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="119"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="118"/> <source>Revoke Certificate Operation</source> <translation type="unfinished">Zertifikat widerrufen Operation</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="132"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="131"/> <source>Set Owner Trust Level</source> <translation type="unfinished">Vertrauensstufe des Eigentümers festlegen</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="156"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="155"/> <source>Publish Public Key to Key Server</source> <translation type="unfinished">Öffentlichen Schlüssel auf Schlüsselserver veröffentlichen</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="164"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="163"/> <source>Refresh Public Key From Key Server</source> <translation type="unfinished">Öffentlichen Schlüssel vom Schlüsselserver aktualisieren</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="179"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="178"/> <source>Export Full Secret Key</source> <translation type="unfinished">Vollständigen geheimen Schlüssel exportieren</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="185"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="184"/> <source>Export Shortest Secret Key</source> <translation type="unfinished">Kürzesten geheimen Schlüssel exportieren</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="196"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="195"/> <source>Export Secret Key As A Paper Key</source> <translation type="unfinished">Geheimen Schlüssel als Papierschlüssel exportieren</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="213"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="212"/> <source>Import Revoke Certificate</source> <translation type="unfinished">Zertifikat importieren widerrufen</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="242"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="291"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="342"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="635"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="241"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="290"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="341"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="633"/> <source>Export Key To File</source> <translation type="unfinished">Schlüssel in Datei exportieren</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="243"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="292"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="343"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="636"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="242"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="291"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="342"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="634"/> <source>Key Files</source> <translation type="unfinished">Schlüsseldateien</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="248"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="297"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="348"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="659"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="247"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="296"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="347"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="657"/> <source>Export Error</source> <translation type="unfinished">Exportfehler</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="249"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="298"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="349"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="660"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="248"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="297"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="348"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="658"/> <source>Couldn't open %1 for writing</source> <translation type="unfinished">%1 konnte nicht zum Schreiben geöffnet werden</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="391"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="390"/> <source>Failed to upload public key to the server. Fingerprint: %1 Error: %2</source> @@ -2762,12 +2925,12 @@ Fingerabdruck: %1 Fehler: %2</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="423"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="422"/> <source>Public Key Upload Successful</source> <translation type="unfinished">Upload des öffentlichen Schlüssels erfolgreich</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="424"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="423"/> <source>The public key was successfully uploaded to the key server keys.openpgp.org. Fingerprint: %1 @@ -2784,236 +2947,236 @@ Bitte prüfen Sie Ihre E-Mail (%3) für weitere Verifizierungen von keys.openpgp Hinweis: Weitere Informationen zur Verifizierung finden Sie hier: https://keys.openpgp.org/about</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="466"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="555"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="464"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="553"/> <source>Revocation Certificates</source> <translation type="unfinished">Widerrufszertifikate</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="477"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="475"/> <source>Generate revocation certificate</source> <translation>Widerrufszertifikat erstellen</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="504"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="513"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="502"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="511"/> <source>Policy Auto</source> <translation type="unfinished">Richtlinie Auto</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="504"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="515"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="502"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="513"/> <source>Policy Good</source> <translation type="unfinished">Richtlinie gut</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="504"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="517"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="502"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="515"/> <source>Policy Bad</source> <translation type="unfinished">Richtlinie schlecht</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="505"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="519"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="503"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="517"/> <source>Policy Ask</source> <translation type="unfinished">Richtlinie fragen</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="505"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="521"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="503"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="519"/> <source>Policy Unknown</source> <translation type="unfinished">Richtlinie unbekannt</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="509"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="507"/> <source>Modify TOFU Policy(Default is Auto)</source> <translation type="unfinished">TOFU-Richtlinie ändern (Standard ist Auto)</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="510"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="508"/> <source>Policy for the Key Pair:</source> <translation type="unfinished">Richtlinie für das Schlüsselpaar:</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="527"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="525"/> <source>Not Successful</source> <translation type="unfinished">Nicht erfolgreich</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="528"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="526"/> <source>Modify TOFU policy not successfully.</source> <translation type="unfinished">Ändern der TOFU-Richtlinie nicht erfolgreich.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="542"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="554"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="540"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="552"/> <source>Import Key Revocation Certificate</source> <translation type="unfinished">Schlüssel-Widerrufs-Zertifikat importieren</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="543"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="541"/> <source>You are about to import the</source> <translation type="unfinished">Sie sind dabei, das</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="544"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="542"/> <source>REVOCATION CERTIFICATE</source> <translation type="unfinished">Schlüssel-Widerrufs-Zertifikat importieren</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="545"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="543"/> <source>A successful import will result in the key being irreversibly revoked.</source> <translation type="unfinished">Ein erfolgreicher Import führt dazu, dass der Schlüssel unwiderruflich widerrufen wird.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="547"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="545"/> <source>Do you REALLY want to execute this operation?</source> <translation type="unfinished">Wollen Sie diesen Vorgang WIRKLICH durchführen?</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="563"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="572"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="581"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="652"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="698"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="706"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="714"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="732"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="561"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="570"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="579"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="650"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="696"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="704"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="712"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="730"/> <source>Error</source> <translation type="unfinished">Fehler</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="564"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="582"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="699"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="715"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="562"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="580"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="697"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="713"/> <source>Cannot open this file. Please make sure that this is a regular file and it's readable.</source> <translation type="unfinished">Kann diese Datei nicht öffnen. Bitte stellen Sie sicher, dass es sich um eine reguläre, lesbare Datei handelt.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="573"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="571"/> <source>The target file is too large for a key revocation certificate.</source> <translation type="unfinished">Die Zieldatei ist zu groß für ein Schlüsselwiderrufszertifikat.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="653"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="651"/> <source>An error occurred trying to generate Paper Key.</source> <translation type="unfinished">Beim Versuch, einen Papierschlüssel zu erzeugen, ist ein Fehler aufgetreten.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="733"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="731"/> <source>An error occurred trying to recover the Paper Key back to the private key.</source> <translation type="unfinished">Beim Versuch, den Papierschlüssel in den privaten Schlüssel zurückzuverwandeln, ist ein Fehler aufgetreten.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="690"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="688"/> <source>Paper Key File</source> <translation type="unfinished">Papier-Schlüsseldatei</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="256"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="307"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="596"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="255"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="306"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="594"/> <source>WARNING: You are about to export your</source> <translation type="unfinished">WARNUNG: Sie sind im Begriff, Ihren</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="257"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="308"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="597"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="256"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="307"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="595"/> <source>PRIVATE KEY</source> <translation type="unfinished">PRIVATEN SCHLÜSSEL zu exportieren.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="258"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="598"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="257"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="596"/> <source>This is NOT your Public Key, so <b>DO NOT</b> share it with anyone.</source> <translation type="unfinished">Dies ist NICHT Ihr öffentlicher Schlüssel, also geben Sie ihn NICHT an andere weiter.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="261"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="260"/> <source>You are exporting a <b>minimum size</b> private key, which removes all signatures except for the latest self-signatures.</source> <translation type="unfinished">Sie exportieren einen <b>minimum size</b> privaten Schlüssel, der alle Signaturen außer den letzten Selbstsignaturen entfernt.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="263"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="262"/> <source>Do you <b>REALLY</b> want to proceed?</source> <translation type="unfinished">Wollen Sie <b>WIRKLICH</b> fortfahren?</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="265"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="264"/> <source>Exporting Short Private Key</source> <translation type="unfinished">Kurzer privater Schlüssel exportieren</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="309"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="308"/> <source>This operation will export your <b>private key</b>, including both the main key and all subkeys, into an external file. This key is extremely sensitive, and anyone with access to it can impersonate you. DO NOT share this file with anyone!</source> <translation type="unfinished">Dieser Vorgang exportiert Ihren <b>privaten Schlüssel</b>, einschließlich des Hauptschlüssels und aller Unterschlüssel, in eine externe Datei. Dieser Schlüssel ist äußerst sensibel, und jeder, der Zugang zu ihm hat, kann sich als Sie ausgeben. Geben Sie diese Datei NICHT an andere weiter!</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="315"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="608"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="314"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="606"/> <source>Are you <b>ABSOLUTELY SURE</b> you want to proceed?</source> <translation type="unfinished">Sind Sie <b>ABSOLUT SICHER</b>, dass Sie fortfahren möchten?</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="318"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="317"/> <source>Exporting Private Key</source> <translation type="unfinished">Privaten Schlüssel exportieren</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="390"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="389"/> <source>Key Upload Failed</source> <translation type="unfinished">Schlüssel-Upload fehlgeschlagen</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="406"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="405"/> <source>The following email addresses have status: </source> <translation type="unfinished">Die folgenden E-Mail-Adressen haben Status:</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="418"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="417"/> <source>Could not parse status information.</source> <translation type="unfinished">Die Statusinformationen konnten nicht geparst werden.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="458"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="456"/> <source>0 -> No Reason.</source> <translation type="unfinished">0 -> Kein Grund.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="458"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="456"/> <source>1 -> This key is no more safe.</source> <translation type="unfinished">1 -> Dieser Schlüssel ist nicht mehr sicher.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="459"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="457"/> <source>2 -> Key is outdated.</source> <translation type="unfinished">2 -> Der Schlüssel ist veraltet.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="459"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="457"/> <source>3 -> Key is no longer used</source> <translation type="unfinished">3 -> Taste wird nicht mehr verwendet.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="601"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="599"/> <source>A <b>PaperKey</b> is a human-readable printout of your private key, which can be used to recover your key if you lose access to your digital copy. </source> <translation type="unfinished">Ein <b>Papierschlüssel</b> ist ein von Menschen lesbarer Ausdruck Ihres privaten Schlüssels, der verwendet werden kann, um Ihren Schlüssel wiederherzustellen, wenn Sie den Zugriff auf Ihre digitale Kopie verlieren.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="605"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="603"/> <source>Keep this paper copy in a safe and secure place, such as a fireproof safe or a trusted vault.</source> <translation type="unfinished">Bewahren Sie diese Papierkopie an einem sicheren Ort auf, z. B. in einem feuerfesten Tresor oder in einem vertrauenswürdigen Tresorraum.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="611"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="609"/> <source>Exporting Private Key as a PaperKey</source> <translation type="unfinished">Privaten Schlüssel als Papierschlüssel exportieren</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="707"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="705"/> <source>The target file is too large for a paper key keyring.</source> <translation type="unfinished">Die Zieldatei ist zu groß für einen Papierschlüsselanhänger.</translation> </message> @@ -3102,7 +3265,7 @@ Hinweis: Weitere Informationen zur Verifizierung finden Sie hier: https://keys.o </message> <message> <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="124"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="353"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="351"/> <source>Export Subkey</source> <translation type="unfinished">Unterschlüssel exportieren</translation> </message> @@ -3117,227 +3280,227 @@ Hinweis: Weitere Informationen zur Verifizierung finden Sie hier: https://keys.o <translation type="unfinished">Ablaufdatum</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="209"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="359"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="208"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="355"/> <source>Primary Key</source> <translation type="unfinished">Primärschlüssel</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="210"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="359"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="209"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="356"/> <source>Subkey</source> <translation type="unfinished">Unterschlüssel</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="233"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="232"/> <source>Never Expire</source> <translation type="unfinished">Nie ablaufen</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="289"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="288"/> <source>Never Expires</source> <translation type="unfinished">Läuft nie ab</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="311"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="310"/> <source>Certificate</source> <translation type="unfinished">Zertifikat</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="313"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="312"/> <source>Encrypt</source> <translation type="unfinished">Verschlüsseln</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="314"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="313"/> <source>Sign</source> <translation type="unfinished">Unterschreiben</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="315"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="314"/> <source>Auth</source> <translation type="unfinished">Authentifizieren</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="320"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="319"/> <source>Exists</source> <translation type="unfinished">Existiert</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="321"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="320"/> <source>Not Exists</source> <translation type="unfinished">Existiert nicht</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="324"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="361"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="323"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="358"/> <source>Yes</source> <translation type="unfinished">Ja</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="324"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="361"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="323"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="358"/> <source>No</source> <translation type="unfinished">Nein</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="352"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="351"/> <source>Export Primary Key</source> <translation type="unfinished">Primärschlüssel exportieren</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="375"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="372"/> <source>Edit Expire Date</source> <translation type="unfinished">Ablaufdatum bearbeiten</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="379"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="376"/> <source>Export</source> <translation type="unfinished">Exportieren</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="383"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="380"/> <source>Delete</source> <translation type="unfinished">Löschen</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="387"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="384"/> <source>Revoke</source> <translation type="unfinished">Widerrufen</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="440"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="437"/> <source>Exporting Subkey</source> <translation type="unfinished">Unterschlüssel exportieren</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="441"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="438"/> <source>You are about to export a private subkey.</source> <translation type="unfinished">Sie sind dabei, einen privaten Unterschlüssel zu exportieren.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="442"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="439"/> <source>While subkeys are less critical than the primary key, they should still be handled with care.</source> <translation type="unfinished">Unterschlüssel sind zwar weniger kritisch als der Primärschlüssel, sollten aber dennoch mit Vorsicht behandelt werden.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="445"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="442"/> <source>Do you want to proceed with exporting this subkey?</source> <translation type="unfinished">Möchten Sie mit dem Exportieren dieses Unterschlüssels fortfahren?</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="472"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="469"/> <source>Export Key To File</source> <translation type="unfinished">Schlüssel in Datei exportieren</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="473"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="470"/> <source>Key Files</source> <translation type="unfinished">Schlüsseldateien</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="478"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="475"/> <source>Export Error</source> <translation type="unfinished">Exportfehler</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="479"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="476"/> <source>Couldn't open %1 for writing</source> <translation type="unfinished">%1 konnte nicht zum Schreiben geöffnet werden</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="488"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="485"/> <source><h3>You are about to delete the subkey:</h3><br /><b>KeyID:</b> %1<br /><br />This action is irreversible. Please confirm.</source> <translation type="unfinished"><h3>Sie sind dabei, den Unterschlüssel zu löschen:</h3><br /><b>KeyID:</b> %1<br /><br />Diese Aktion ist irreversibel. Bitte bestätigen Sie.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="494"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="491"/> <source>Delete Subkey Confirmation</source> <translation type="unfinished">Unterschlüssel löschen Bestätigung</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="509"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="559"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="506"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="556"/> <source>Illegal Operation</source> <translation type="unfinished">Illegale Operation</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="510"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="507"/> <source>Cannot delete the primary key or an invalid subkey.</source> <translation type="unfinished">Der Primärschlüssel oder ein ungültiger Unterschlüssel kann nicht gelöscht werden.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="518"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="515"/> <source>Operation Failed</source> <translation type="unfinished">Vorgang fehlgeschlagen</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="519"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="516"/> <source>The selected subkey could not be deleted. Please check your permissions or try again.</source> <translation type="unfinished">Der ausgewählte Unterschlüssel konnte nicht gelöscht werden. Bitte überprüfen Sie Ihre Berechtigungen oder versuchen Sie es erneut.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="525"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="522"/> <source>Operation Successful</source> <translation type="unfinished">Operation erfolgreich</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="526"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="523"/> <source>The subkey with KeyID %1 has been successfully deleted.</source> <translation type="unfinished">Der Unterschlüssel mit KeyID %1 wurde erfolgreich gelöscht.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="536"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="533"/> <source><h3>Revoke Subkey Confirmation</h3><br /><b>KeyID:</b> %1<br /><br />Revoking a subkey will make it permanently unusable. This action is <b>irreversible</b>.<br />Are you sure you want to revoke this subkey?</source> <translation type="unfinished"><h3>Unterschlüssel widerrufen Bestätigung</h3><br /><b>KeyID:</b> %1<br /><br /><br />Das Widerrufen eines Unterschlüssels macht ihn dauerhaft unbrauchbar. Diese Aktion ist <b>irreversibel</b>.<br />Sind Sie sicher, dass Sie diesen Unterschlüssel widerrufen wollen?</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="543"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="540"/> <source>Revoke Subkey</source> <translation type="unfinished">Unterschlüssel widerrufen</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="560"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="557"/> <source>Cannot revoke the primary key or an invalid subkey.</source> <translation type="unfinished">Der Primärschlüssel oder ein ungültiger Unterschlüssel kann nicht widerrufen werden.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="565"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="562"/> <source>0 -> No Reason.</source> <translation type="unfinished">0 -> Kein Grund.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="565"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="562"/> <source>1 -> This key is no more safe.</source> <translation type="unfinished">1 -> Dieser Schlüssel ist nicht mehr sicher.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="566"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="563"/> <source>2 -> Key is outdated.</source> <translation type="unfinished">2 -> Der Schlüssel ist veraltet.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="566"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="563"/> <source>3 -> Key is no longer used</source> <translation type="unfinished">3 -> Der Schlüssel wird nicht mehr verwendet.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="577"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="574"/> <source>Revocation Failed</source> <translation type="unfinished">Widerruf fehlgeschlagen</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="578"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="575"/> <source>Failed to revoke the subkey. Please try again.</source> <translation type="unfinished">Der Unterschlüssel konnte nicht widerrufen werden. Bitte versuchen Sie es erneut.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="581"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="578"/> <source>Revocation Successful</source> <translation type="unfinished">Widerruf erfolgreich</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="582"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="579"/> <source>The subkey has been successfully revoked.</source> <translation type="unfinished">Der Unterschlüssel wurde erfolgreich widerrufen.</translation> </message> @@ -3415,8 +3578,8 @@ Hinweis: Weitere Informationen zur Verifizierung finden Sie hier: https://keys.o <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="355"/> <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="481"/> <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="490"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="535"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="564"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="536"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="565"/> <source>Invalid Operation</source> <translation type="unfinished">Ungültige Operation</translation> </message> @@ -3426,37 +3589,37 @@ Hinweis: Weitere Informationen zur Verifizierung finden Sie hier: https://keys.o <translation type="unfinished">Sind Sie sicher, dass Sie die folgende UID löschen möchten?</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="542"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="543"/> <source><h3>Revoke UID Confirmation</h3><br /><b>UID:</b> %1<br /><br />Revoking a UID will make it permanently unusable. This action is <b>irreversible</b>.<br />Are you sure you want to revoke this UID?</source> <translation type="unfinished"><h3>UID-Bestätigung widerrufen</h3><br /><b>UID:</b> %1<br /><br />Das Widerrufen einer UID macht sie dauerhaft unbrauchbar. Diese Aktion ist <b>irreversibel</b>.<br />Sind Sie sicher, dass Sie diese UID widerrufen wollen?</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="570"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="571"/> <source>0 -> No Reason.</source> <translation type="unfinished">0 -> Kein Grund.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="570"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="571"/> <source>4 -> User ID is no longer valid.</source> <translation type="unfinished">4 -> Die Benutzer-ID ist nicht mehr gültig.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="581"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="582"/> <source>Revocation Failed</source> <translation type="unfinished">Widerruf fehlgeschlagen</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="582"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="583"/> <source>Failed to revoke the UID. Please try again.</source> <translation type="unfinished">Der Widerruf der UID ist fehlgeschlagen. Bitte versuchen Sie es erneut.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="585"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="586"/> <source>Revocation Successful</source> <translation type="unfinished">Widerruf erfolgreich</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="586"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="587"/> <source>The UID has been successfully revoked.</source> <translation type="unfinished">Die UID wurde erfolgreich widerrufen.</translation> </message> @@ -3487,7 +3650,7 @@ Hinweis: Weitere Informationen zur Verifizierung finden Sie hier: https://keys.o </message> <message> <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="356"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="565"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="566"/> <source>Cannot delete the Primary UID.</source> <translation type="unfinished">Die primäre UID kann nicht gelöscht werden.</translation> </message> @@ -3530,7 +3693,7 @@ Hinweis: Weitere Informationen zur Verifizierung finden Sie hier: https://keys.o </message> <message> <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="431"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="549"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="550"/> <source>Revoke UID</source> <translation type="unfinished">UID widerrufen</translation> </message> @@ -3540,7 +3703,7 @@ Hinweis: Weitere Informationen zur Verifizierung finden Sie hier: https://keys.o <translation type="unfinished">UID löschen</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="536"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="537"/> <source>Please select one UID before doing this operation.</source> <translation type="unfinished">Bitte eine UID auswählen, bevor dieser Vorgang ausgeführt wird.</translation> </message> @@ -3573,139 +3736,139 @@ Hinweis: Weitere Informationen zur Verifizierung finden Sie hier: https://keys.o <context> <name>GpgFrontend::UI::KeyServerImportDialog</name> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="57"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="56"/> <source>Close</source> <translation type="unfinished">Schließen</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="60"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="59"/> <source>Import ALL</source> <translation type="unfinished">ALLE importieren</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="64"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="63"/> <source>Search</source> <translation type="unfinished">Suchen</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="69"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="68"/> <source>Search String</source> <translation type="unfinished">Suchbegriff</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="69"/> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="73"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="68"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="72"/> <source>: </source> <translation type="unfinished">: </translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="73"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="72"/> <source>Key Server</source> <translation type="unfinished">Schlüsselserver</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="114"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="113"/> <source>Import Keys from key server</source> <translation type="unfinished">Importieren von Schlüsseln vom Schlüsselserver</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="157"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="156"/> <source>UID</source> <translation type="unfinished">UID</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="157"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="156"/> <source>Creation date</source> <translation type="unfinished">Erstellungsdatum</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="157"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="156"/> <source>KeyID</source> <translation type="unfinished">SchlüsselID</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="157"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="156"/> <source>Tag</source> <translation type="unfinished">Kennzeichen</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="180"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="179"/> <source>Text is empty.</source> <translation type="unfinished">Text ist leer.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="223"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="222"/> <source>Not Key Found</source> <translation type="unfinished">Schlüssel nicht gefunden</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="226"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="225"/> <source>Timeout</source> <translation type="unfinished">Zeitablauf</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="229"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="228"/> <source>Key Server Not Found</source> <translation type="unfinished">Schlüsselserver nicht gefunden</translation> </message> <message> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="231"/> <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="232"/> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="233"/> <source>Connection Error</source> <translation type="unfinished">Verbindungsfehler</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="242"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="241"/> <source>Too many responses from keyserver!</source> <translation type="unfinished">Zu viele Antworten vom Schlüsselserver!</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="254"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="253"/> <source>No keys found, input may be kexId, retrying search with 0x.</source> <translation type="unfinished">Keine Schlüssel gefunden, Eingabe kann kexId sein, versuche es mit 0x erneut.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="264"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="263"/> <source>No keys found containing the search string!</source> <translation type="unfinished">Keine Schlüssel gefunden, die den Suchbegriff enthalten!</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="271"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="270"/> <source>Insufficiently specific search string!</source> <translation type="unfinished">Unzureichend spezifischer Suchbegriff!</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="306"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="305"/> <source>revoked</source> <translation type="unfinished">widerrufen</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="309"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="308"/> <source>disabled</source> <translation type="unfinished">deaktiviert</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="354"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="353"/> <source>%1 keys found. Double click a key to import it.</source> <translation type="unfinished">%1 Schlüssel gefunden. Doppelklicken Sie auf einen Schlüssel, um ihn zu importieren.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="375"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="374"/> <source>Warning</source> <translation type="unfinished">Warnung</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="376"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="375"/> <source>Please select one KeyPair before doing this operation.</source> <translation type="unfinished">Bitte wählen Sie ein Schlüsselpaar aus, bevor Sie diesen Vorgang ausführen.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="423"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="421"/> <source>Key Imported</source> <translation type="unfinished">Schlüssel importiert</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="436"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="434"/> <source>Processing ...</source> <translation>Verarbeite ...</translation> </message> @@ -3713,27 +3876,27 @@ Hinweis: Weitere Informationen zur Verifizierung finden Sie hier: https://keys.o <context> <name>GpgFrontend::UI::KeyServerImportTask</name> <message> - <location filename="../../../../src/ui/thread/KeyServerImportTask.cpp" line="78"/> + <location filename="../../../../src/ui/thread/KeyServerImportTask.cpp" line="81"/> <source>Key not found in the Keyserver.</source> <translation>Schlüssel auf dem Schlüsselserver nicht gefunden.</translation> </message> <message> - <location filename="../../../../src/ui/thread/KeyServerImportTask.cpp" line="81"/> + <location filename="../../../../src/ui/thread/KeyServerImportTask.cpp" line="84"/> <source>Network connection timeout.</source> <translation>Netzwerkverbindungs-Timeout</translation> </message> <message> - <location filename="../../../../src/ui/thread/KeyServerImportTask.cpp" line="84"/> + <location filename="../../../../src/ui/thread/KeyServerImportTask.cpp" line="87"/> <source>Cannot resolve the address of target key server.</source> <translation>Kann die Adresse des gewählten Schlüsselservers nicht auflösen.</translation> </message> <message> - <location filename="../../../../src/ui/thread/KeyServerImportTask.cpp" line="87"/> + <location filename="../../../../src/ui/thread/KeyServerImportTask.cpp" line="90"/> <source>General connection error occurred.</source> <translation>Allgemeiner Verbindungsfehler ist aufgetreten.</translation> </message> <message> - <location filename="../../../../src/ui/thread/KeyServerImportTask.cpp" line="96"/> + <location filename="../../../../src/ui/thread/KeyServerImportTask.cpp" line="99"/> <source>Success</source> <translation type="unfinished">Erfolg</translation> </message> @@ -3761,22 +3924,17 @@ Hinweis: Weitere Informationen zur Verifizierung finden Sie hier: https://keys.o <translation type="unfinished">Das Ablaufdatum des Schlüsselpaars konnte nicht aktualisiert werden.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeySetExpireDateDialog.cpp" line="135"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeySetExpireDateDialog.cpp" line="124"/> <source>Modified Expiration Date (Local Time)</source> <translation type="unfinished">Geändertes Ablaufdatum (Ortszeit)</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeySetExpireDateDialog.cpp" line="136"/> - <source>Tips: For the sake of security, the key is valid for up to two years. If you are an expert user, please unlock it for a longer time in the settings.</source> - <translation type="unfinished">Tipps: Aus Sicherheitsgründen ist der Schlüssel bis zu zwei Jahre gültig. Wenn Sie ein erfahrener Benutzer sind, entsperren Sie es bitte für längere Zeit in den Einstellungen.</translation> - </message> - <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeySetExpireDateDialog.cpp" line="140"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeySetExpireDateDialog.cpp" line="125"/> <source>No Expiration</source> <translation type="unfinished">Nicht ablaufend</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeySetExpireDateDialog.cpp" line="141"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeySetExpireDateDialog.cpp" line="126"/> <source>Modified Expiration Date</source> <translation type="unfinished">Geändertes Ablaufdatum</translation> </message> @@ -3784,12 +3942,12 @@ Hinweis: Weitere Informationen zur Verifizierung finden Sie hier: https://keys.o <context> <name>GpgFrontend::UI::KeyTable</name> <message> - <location filename="../../../../src/ui/widgets/KeyTable.cpp" line="83"/> + <location filename="../../../../src/ui/widgets/KeyTable.cpp" line="84"/> <source>Error</source> <translation type="unfinished">Fehler</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyTable.cpp" line="83"/> + <location filename="../../../../src/ui/widgets/KeyTable.cpp" line="84"/> <source>Key Not Found.</source> <translation type="unfinished">Schlüssel nicht gefunden.</translation> </message> @@ -3812,22 +3970,22 @@ Hinweis: Weitere Informationen zur Verifizierung finden Sie hier: https://keys.o <translation type="unfinished">Für die UID(s) des Schlüssels unterschreiben</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyUIDSignDialog.cpp" line="121"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyUIDSignDialog.cpp" line="120"/> <source>Unsuccessful Operation</source> <translation type="unfinished">Fehlgeschlagener Vorgang</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyUIDSignDialog.cpp" line="122"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyUIDSignDialog.cpp" line="121"/> <source>Signature operation failed for UID %1</source> <translation type="unfinished">Signaturvorgang für UID %1 fehlgeschlagen</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyUIDSignDialog.cpp" line="126"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyUIDSignDialog.cpp" line="125"/> <source>Operation Complete</source> <translation type="unfinished">Vorgang abgeschlossen</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyUIDSignDialog.cpp" line="127"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyUIDSignDialog.cpp" line="126"/> <source>The signature operation of the UID is complete</source> <translation type="unfinished">Der Signaturvorgang der UID ist abgeschlossen</translation> </message> @@ -3835,52 +3993,52 @@ Hinweis: Weitere Informationen zur Verifizierung finden Sie hier: https://keys.o <context> <name>GpgFrontend::UI::KeyUploadDialog</name> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="66"/> + <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="65"/> <source>Uploading Public Key</source> <translation type="unfinished">Öffentlichen Schlüssel hochladen</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="84"/> + <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="83"/> <source>Error</source> <translation type="unfinished">Fehler</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="85"/> + <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="84"/> <source>Unknown error occurred</source> <translation>Unbekannter Fehler ist aufgetreten</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="155"/> + <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="154"/> <source>Key Not Found</source> <translation type="unfinished">Schlüssel nicht gefunden</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="158"/> + <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="157"/> <source>Timeout</source> <translation type="unfinished">Zeitablauf</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="161"/> + <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="160"/> <source>Key Server Not Found</source> <translation type="unfinished">Schlüsselserver nicht gefunden</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="164"/> + <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="163"/> <source>Connection Error</source> <translation type="unfinished">Verbindungsfehler</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="166"/> + <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="165"/> <source>Upload Failed</source> <translation>Hochladen fehlgeschlagen</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="170"/> + <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="169"/> <source>Upload Success</source> <translation type="unfinished">Erfolgreich hochgeladen</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="171"/> + <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="170"/> <source>Upload Public Key Successfully</source> <translation type="unfinished">Öffentlichen Schlüssel erfolgreich hochgeladen</translation> </message> @@ -3994,22 +4152,22 @@ Hinweis: Weitere Informationen zur Verifizierung finden Sie hier: https://keys.o <translation>Timeout (ms):</translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsKeyServer.cpp" line="245"/> + <location filename="../../../../src/ui/dialog/settings/SettingsKeyServer.cpp" line="244"/> <source>Reachable</source> <translation type="unfinished">Erreichbar</translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsKeyServer.cpp" line="248"/> + <location filename="../../../../src/ui/dialog/settings/SettingsKeyServer.cpp" line="247"/> <source>Not Reachable</source> <translation type="unfinished">Nicht erreichbar</translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsKeyServer.cpp" line="260"/> + <location filename="../../../../src/ui/dialog/settings/SettingsKeyServer.cpp" line="259"/> <source>Test Key Server Connection...</source> <translation type="unfinished">Schlüsselserververbindung testen…</translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsKeyServer.cpp" line="261"/> + <location filename="../../../../src/ui/dialog/settings/SettingsKeyServer.cpp" line="260"/> <source>This test only tests the network connectivity of the key server. Passing the test does not mean that the key server is functionally available.</source> <translation type="unfinished">Dieser Test testet nur die Netzwerkkonnektivität des Schlüsselservers. Das Bestehen des Tests bedeutet nicht, dass der Schlüsselserver funktionsfähig ist.</translation> </message> @@ -4017,330 +4175,159 @@ Hinweis: Weitere Informationen zur Verifizierung finden Sie hier: https://keys.o <context> <name>GpgFrontend::UI::MainWindow</name> <message> - <location filename="../../../../src/ui/main_window/MainWindow.cpp" line="156"/> - <location filename="../../../../src/ui/main_window/MainWindow.cpp" line="159"/> + <location filename="../../../../src/ui/main_window/MainWindow.cpp" line="163"/> + <location filename="../../../../src/ui/main_window/MainWindow.cpp" line="166"/> <source>Critical error occur while loading GpgFrontend.</source> <translation type="unfinished">Beim Laden von GpgFrontend ist ein kritischer Fehler aufgetreten.</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindow.cpp" line="158"/> + <location filename="../../../../src/ui/main_window/MainWindow.cpp" line="165"/> <source>Loading Failed</source> <translation type="unfinished">Laden fehlgeschlagen</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="50"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="75"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="103"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="156"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="176"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="201"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="229"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="282"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="302"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="319"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="336"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="355"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="372"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="389"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="409"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="471"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="492"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="528"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="546"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="571"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="616"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="661"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="690"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="735"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="781"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="810"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="818"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="845"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="910"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="919"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="947"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="988"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="77"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="135"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="202"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="239"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="278"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="320"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="440"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="491"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="111"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="137"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="159"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="177"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="192"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="207"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="224"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="106"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="143"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="522"/> <source>Error</source> <translation type="unfinished">Fehler</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="51"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="177"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="303"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="356"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="410"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="493"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="572"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="691"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="811"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="911"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="989"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="523"/> <source>Cannot read from file: %1</source> <translation>Kann Datei nicht lesen: %1</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="64"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="190"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="119"/> <source>The target file %1 already exists, do you need to overwrite it?</source> <translation type="unfinished">Die Zieldatei %1 existiert bereits, wollen Sie sie überschreiben?</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="67"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="193"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="310"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="363"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="450"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="623"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="742"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="824"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="925"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="122"/> <source>Warning</source> <translation type="unfinished">Warnung</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="76"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="202"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="320"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="373"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="617"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="736"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="819"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="920"/> - <source>Cannot write to file: %1</source> - <translation>Kann in Datei nicht schreiben: %</translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="85"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="211"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="55"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="50"/> <source>Symmetric Encryption</source> <translation type="unfinished">Symmetrische Verschlüsselung</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="86"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="212"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="51"/> <source>No Key Selected. Do you want to encrypt with a symmetric cipher using a passphrase?</source> <translation type="unfinished">Es ist kein Schlüssel ausgewählt. Möchten Sie mit einer symmetrischen Verschlüsselung unter Verwendung einer Passphrase verschlüsseln?</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="92"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="64"/> - <source>Symmetrically Encrypting</source> - <translation type="unfinished">Symmetrisches Verschlüsseln</translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="104"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="157"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="230"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="283"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="337"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="390"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="472"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="547"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="662"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="782"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="846"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="948"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="78"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="136"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="203"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="240"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="279"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="321"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="441"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="492"/> - <source>Unknown error occurred</source> - <translation>Unbekannter Fehler ist aufgetreten</translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="135"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="261"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="598"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="717"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="396"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="172"/> <source>Invalid KeyPair</source> <translation type="unfinished">Ungültiges Schlüsselpaar</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="136"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="262"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="599"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="718"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="397"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="60"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="261"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="448"/> <source>The selected keypair cannot be used for encryption.</source> <translation type="unfinished">Das ausgewählte Schlüsselpaar kann nicht zur Verschlüsselung verwendet werden.</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="137"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="263"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="600"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="719"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="115"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="181"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="398"/> - <source>For example the Following Key:</source> - <translation type="unfinished">Zum Beispiel der folgende Schlüssel:</translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="144"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="123"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="632"/> - <source>Encrypting</source> - <translation type="unfinished">Verschlüsselung</translation> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="107"/> + <source>Cannot read from the following files: + +%1</source> + <translation type="unfinished">Die folgenden Dateien können nicht gelesen werden: + +%1</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="218"/> - <source>Archiving & Symmetrically Encrypting</source> - <translation>Archivierung und symmetrische Verschlüsselung</translation> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="144"/> + <source>Cannot write to the following files: + +%1</source> + <translation type="unfinished">In die folgenden Dateien kann nicht geschrieben werden: + +%1</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="270"/> - <source>Archiving & Encrypting</source> - <translation>Archivierung und Verschlüsselung</translation> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="174"/> + <source>For example the Following Key:</source> + <translation type="unfinished">Zum Beispiel der folgende Schlüssel:</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="311"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="364"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="624"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="743"/> - <source>The target file already exists, do you need to overwrite it?</source> - <translation type="unfinished">Die Zieldatei existiert bereits, wollen Sie sie überschreiben?</translation> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="196"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="323"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="654"/> + <source>Encrypting</source> + <translation type="unfinished">Verschlüsselung</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="325"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="229"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="231"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="358"/> <source>Decrypting</source> <translation type="unfinished">Entschlüsseln</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="378"/> - <source>Decrypting & Extrating</source> - <translation>Entschlüsselung und Extraktion</translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="424"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="587"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="706"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="163"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="379"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="158"/> <source>No Key Checked</source> <translation type="unfinished">Kein Schlüssel ausgewählt</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="425"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="588"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="707"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="164"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="159"/> <source>Please check the key in the key toolbox on the right.</source> <translation type="unfinished">Bitte wählen Sie den Schlüssel in der Schlüssel-Toolbox auf der rechten Seite.</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="432"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="112"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="178"/> - <source>Invalid Operation</source> - <translation type="unfinished">Ungültige Operation</translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="433"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="208"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="369"/> <source>The selected key contains a key that does not actually have a sign usage.</source> <translation type="unfinished">Der ausgewählte Schlüssel enthält einen Schlüssel, der keine Signierfunktion hat.</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="435"/> - <source>for example the Following Key:</source> - <translation type="unfinished">zum Beispiel der folgende Schlüssel:</translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="451"/> - <source>The signature file "%1" exists, do you need to overwrite it?</source> - <translation type="unfinished">Die Signaturdatei "%1" existiert, wollen Sie sie überschreiben?</translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="460"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="190"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="703"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="217"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="388"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="721"/> <source>Signing</source> <translation type="unfinished">Unterzeichnen</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="513"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="414"/> <source>File to be Verified</source> <translation>Zu verifizierende Datei</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="514"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="415"/> <source>Please provide An ABSOLUTE Path If Data And Signature is COMBINED within a single file, KEEP THIS EMPTY: </source> <translation>Bitte geben Sie einen ABSOLUTEN Pfad an. Fals Daten und Signatur in einer Datei COMBINIERT sind, LASSEN SIE DIES LEER: </translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="529"/> - <source>Please select the appropriate origin file or signature file. Ensure that both are in this directory.</source> - <translation type="unfinished">Bitte wählen Sie die entsprechende Ursprungsdatei oder Signaturdatei aus. Stellen Sie sicher, dass sich beide in diesem Verzeichnis befinden.</translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="535"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="267"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="307"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="370"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="245"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="434"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="326"/> <source>Verifying</source> <translation type="unfinished">Verifizierung</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="648"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="425"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="786"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="271"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="478"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="804"/> <source>Encrypting and Signing</source> <translation type="unfinished">Verschlüsseln und Signieren</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="767"/> - <source>Archiving & Encrypting & Signing</source> - <translation>Archivierung & Verschlüsselung & Signierung</translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="825"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="926"/> - <source>The output file %1 already exists, do you need to overwrite it?</source> - <translation type="unfinished">Die Ausgabedatei %1 existiert bereits, wollen Sie sie überschreiben?</translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="834"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="479"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="850"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="285"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="512"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="868"/> <source>Decrypting and Verifying</source> <translation type="unfinished">Entschlüsseln und Verifizieren</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="882"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="347"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="533"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="445"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="402"/> <source>Missing Keys</source> <translation type="unfinished">Fehlende Schlüssel</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="883"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="348"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="534"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="446"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="403"/> <source>Some signatures cannot be verified because the corresponding keys are missing. The following fingerprints are missing: @@ -4355,216 +4342,236 @@ Die folgenden Fingerabdrücke fehlen: Möchten Sie diese Schlüssel vom Schlüsselserver abrufen</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="898"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="363"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="548"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="462"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="417"/> <source>Verification Incomplete</source> <translation type="unfinished">Verifizierung unvollständig</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="899"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="364"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="549"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="463"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="418"/> <source>Verification was incomplete due to missing keys. You can manually import the keys later.</source> <translation type="unfinished">Die Verifizierung war unvollständig, weil Schlüssel fehlten. Sie können die Schlüssel später manuell importieren.</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="935"/> - <source>Decrypting & Verifying & Extracting</source> - <translation>Entschlüsselung & Verifizierung & Extraktion</translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="996"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="529"/> <source>EML File Too Large</source> <translation type="unfinished">E-Mail-Datei zu groß</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="997"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="530"/> <source>The EML file "%1" is larger than 32MB and will not be opened.</source> <translation type="unfinished">Die E-Mail-Datei "%1" ist größer als 32 MB und kann nicht geöffnet werden.</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="56"/> - <source>No Key Checked. Do you want to encrypt with a symmetric cipher using a passphrase?</source> - <translation type="unfinished">Kein Schlüssel ausgewählt. Möchten Sie mit einer symmetrischen Verschlüsselung unter Verwendung einer Passphrase verschlüsseln?</translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="113"/> - <source>The selected key contains a key that does not actually have a encrypt usage.</source> - <translation type="unfinished">Der ausgewählte Schlüssel hat keine Verschlüsselungsfunktion.</translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="179"/> - <source>The selected key contains a key that does not actually have a signature usage.</source> - <translation type="unfinished">Der ausgewählte Schlüssel hat keine Signierfunktion.</translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="380"/> - <source>Please check some key in the key toolbox on the right.</source> - <translation type="unfinished">Bitte wählen Sie mindestens einen Schlüssel in der Schlüssel-Toolbox auf der rechten Seite.</translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="111"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="137"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="159"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="177"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="192"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="207"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="224"/> - <source>Key Not Found.</source> - <translation type="unfinished">Schlüssel nicht gefunden.</translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="116"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="106"/> <source>Localize</source> - <translation type="unfinished">本地化</translation> + <translation type="unfinished">Ortszeit</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="119"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="109"/> <source>UTC</source> <translation type="unfinished">koordinierte Weltzeit</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="142"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="120"/> <source>Local Time</source> - <translation type="unfinished">当地时间</translation> + <translation type="unfinished">Ortszeit</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="324"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="274"/> <source>This version(%1) may have been withdrawn by the developer due to serious problems. Please stop using this version immediately and download the latest stable version (%2) on the Github Releases Page.</source> <translation type="unfinished">Diese Version (%1) wurde möglicherweise vom Entwickler aufgrund von schwerwiegenden Problemen zurückgezogen. Bitte stellen Sie die Verwendung dieser Version sofort ein und laden Sie die neueste stabile Version (%2) von der Github-Releases-Seite herunter.</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="339"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="288"/> <source>This may be a BETA Version (Latest Stable Version: %1).</source> <translation type="unfinished">Es handelt sich möglicherweise um eine BETA-Version (letzte stabile Version: %1).</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="345"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="301"/> <source>Commit Hash Mismatch</source> <translation type="unfinished">Unstimmigkeit bei der Commit-Hash</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="346"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="302"/> <source>The current version's commit hash does not match the official release. This may indicate a modified or unofficial build. For security reasons, please verify your installation or download the official release from the Github Releases Page.</source> <translation type="unfinished">Der Commit-Hash der aktuellen Version stimmt nicht mit dem der offiziellen Version überein. Dies kann auf einen modifizierten oder inoffiziellen Build hinweisen. Aus Sicherheitsgründen überprüfen Sie bitte Ihre Installation oder laden Sie die offizielle Version von der Github-Releases-Seite herunter.</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="478"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="492"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="494"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="496"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="573"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="590"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="592"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="594"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="880"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="896"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="899"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="902"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="432"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="446"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="448"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="450"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="595"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="612"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="614"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="616"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="898"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="914"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="917"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="920"/> <source>None</source> <translation type="unfinished">Kein</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="486"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="584"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="889"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="440"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="606"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="907"/> <source>From</source> <translation type="unfinished">Von</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="487"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="489"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="585"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="587"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="890"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="893"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="441"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="443"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="607"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="609"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="908"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="911"/> <source>Unknown</source> <translation type="unfinished">Unbekannt</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="489"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="587"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="892"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="443"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="609"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="910"/> <source>To</source> <translation type="unfinished">An</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="491"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="589"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="895"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="445"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="611"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="913"/> <source>Subject</source> <translation type="unfinished">Betreff</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="494"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="592"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="898"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="448"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="614"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="916"/> <source>CC</source> <translation type="unfinished">Kopie</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="496"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="594"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="901"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="450"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="616"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="919"/> <source>BCC</source> <translation type="unfinished">Blindkopie</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="497"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="595"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="904"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="451"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="617"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="922"/> <source>Date</source> <translation type="unfinished">Datum</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="502"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="909"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="456"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="927"/> <source>Signed EML Data Hash (SHA1)</source> <translation type="unfinished">Signierter EML-Datenhash (SHA1)</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="505"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="913"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="459"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="931"/> <source>Message Integrity Check Algorithm</source> <translation type="unfinished">Algorithmus zur Überprüfung der Nachrichtenintegrität</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="625"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="689"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="755"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="772"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="517"/> + <source>FAIL</source> + <translation type="unfinished">FAIL</translation> + </message> + <message> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="521"/> + <source>OK</source> + <translation type="unfinished">OK</translation> + </message> + <message> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="524"/> + <source>WARN</source> + <translation type="unfinished">WARN</translation> + </message> + <message> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="535"/> + <source>Summary Report</source> + <translation type="unfinished">Zusammenfassung</translation> + </message> + <message> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="536"/> + <source>Total Operations: %1 +</source> + <translation type="unfinished">Gesamte Operationen: %1 +</translation> + </message> + <message> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="537"/> + <source>Successful: %1 +</source> + <translation type="unfinished">Erfolg: %1 +</translation> + </message> + <message> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="538"/> + <source>Warnings: %1 +</source> + <translation type="unfinished">Warnungen: %1 +</translation> + </message> + <message> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="539"/> + <source>Failures: %1 +</source> + <translation type="unfinished">Misserfolge: %1 +</translation> + </message> + <message> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="543"/> + <source>Failed Objects: %1 +</source> + <translation type="unfinished">Fehlgeschlagene Objekte: %1 +</translation> + </message> + <message> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="548"/> + <source>Warning Objects: %1 +</source> + <translation type="unfinished">Warnobjekte: %1 +</translation> + </message> + <message> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="647"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="707"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="773"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="790"/> <source>No Key Selected</source> <translation type="unfinished">Kein Schlüssel ausgewählt</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="626"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="756"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="648"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="774"/> <source>Please select a key for encrypt the EML.</source> <translation type="unfinished">Bitte wählen Sie einen Schlüssel für die Verschlüsselung der E-Mail.</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="690"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="773"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="708"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="791"/> <source>Please select a key for signing the EML.</source> <translation type="unfinished">Bitte wählen Sie einen Schlüssel zum Signieren der E-Mail.</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="695"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="778"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="713"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="796"/> <source>Multiple Keys Selected</source> <translation type="unfinished">Mehrere Schlüssel ausgewählt</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="696"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="779"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="714"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="797"/> <source>Please select only one key to sign the EML.</source> <translation type="unfinished">Bitte wählen Sie nur einen Schlüssel zum Signieren der E-Mail.</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="959"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="976"/> <source># EML Data Error The provided EML data does not conform to RFC 3156 standards and cannot be processed. @@ -4595,7 +4602,7 @@ EML ist ein Dateiformat zur Darstellung von E-Mail-Nachrichten, das in der Regel Nachdem Sie die EML-Daten korrigiert haben, versuchen Sie den Vorgang erneut.</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="985"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="1002"/> <source># Email Operation Error An error occurred during the email operation. The process could not be completed. @@ -4638,17 +4645,19 @@ Während des E-Mail-Vorgangs ist ein Fehler aufgetreten. Der Vorgang konnte nich Wenn das Problem weiterhin besteht, wenden Sie sich an den technischen Support oder konsultieren Sie die Dokumentation.</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="319"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="262"/> <source>GpgFrontend Upgradeable (New Version: %1).</source> <translation type="unfinished">GpgFrontend kann aktualisiert werden (neue Version: %1).</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="297"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="269"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="296"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="296"/> <source>Update</source> <translation type="unfinished">Aktualisieren</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="323"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="273"/> <source>Withdrawn Version</source> <translation type="unfinished">Zurückgezogene Version</translation> </message> @@ -4914,8 +4923,8 @@ Wenn das Problem weiterhin besteht, wenden Sie sich an den technischen Support o </message> <message> <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="184"/> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="402"/> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="487"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="401"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="486"/> <source>File</source> <translation type="unfinished">Datei</translation> </message> @@ -4935,406 +4944,406 @@ Wenn das Problem weiterhin besteht, wenden Sie sich an den technischen Support o <translation type="unfinished">Neuen Schlüssel aus der Zwischenablage importieren</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="208"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="207"/> <source>Keyserver</source> <translation type="unfinished">Schlüsselserver</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="210"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="209"/> <source>Import New Key From Keyserver</source> <translation type="unfinished">Neuen Schlüssel vom Schlüsselserver importieren</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="218"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="217"/> <source>Editor</source> <translation type="unfinished">Editor</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="219"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="218"/> <source>Import New Key From Editor</source> <translation type="unfinished">Neuen Schlüssel aus dem Editor importieren</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="224"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="223"/> <source>Manage Keys</source> <translation type="unfinished">Schlüssel verwalten</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="225"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="224"/> <source>Open Key Management</source> <translation type="unfinished">Schlüsselverwaltung öffnen</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="230"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="229"/> <source>Clear Password Cache</source> <translation type="unfinished">Passwort-Cache löschen</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="231"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="230"/> <source>Clear Password Cache of GnuPG</source> <translation type="unfinished">Passwort-Cache von GnuPG löschen</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="459"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="458"/> <source>Advanced</source> <translation type="unfinished">Fortschrittlich</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="600"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="594"/> <source>Status Panel</source> <translation type="unfinished">Status-Panel</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="346"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="360"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="378"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="309"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="323"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="338"/> <source>Successful Operation</source> <translation type="unfinished">Erfolgreiche Durchführung</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="347"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="310"/> <source>Clear password cache successfully</source> <translation type="unfinished">Kennwort-Cache erfolgreich gelöscht</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="349"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="364"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="382"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="312"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="327"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="342"/> <source>Failed Operation</source> <translation type="unfinished">Fehlgeschlagener Vorgang</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="350"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="313"/> <source>Failed to clear password cache of GnuPG</source> <translation type="unfinished">Passwort-Cache von GnuPG konnte nicht geleert werden</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="236"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="235"/> <source>Reload All Components</source> <translation type="unfinished">Alle Komponenten neu laden</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="237"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="236"/> <source>Reload All GnuPG's Components</source> <translation type="unfinished">Alle Komponenten von GnuPG neu laden</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="361"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="324"/> <source>Reload all the GnuPG's components successfully</source> <translation type="unfinished">Alle GnuPG-Komponenten erfolgreich neu geladen</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="365"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="328"/> <source>Failed to reload all or one of the GnuPG's component(s)</source> <translation type="unfinished">Fehler beim Neuladen aller oder einer Komponente(n) von GnuPG</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="242"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="241"/> <source>Restart All Components</source> <translation type="unfinished">Alle Komponenten neu starten</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="243"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="242"/> <source>Restart All GnuPG's Components</source> <translation type="unfinished">Alle Komponenten von GnuPG neu starten</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="379"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="339"/> <source>Restart all the GnuPG's components successfully</source> <translation type="unfinished">Alle Komponenten von GnuPG erfolgreich neu gestartet</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="383"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="343"/> <source>Failed to restart all or one of the GnuPG's component(s)</source> <translation type="unfinished">Neustart aller oder einer GnuPG-Komponente(n) fehlgeschlagen</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="248"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="247"/> <source>Open GnuPG Controller</source> <translation type="unfinished">GnuPG-Controller öffnen</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="249"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="248"/> <source>Open GnuPG Controller Dialog</source> <translation type="unfinished">GnuPG-Controller-Dialog öffnen</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="254"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="253"/> <source>Open Module Controller</source> <translation type="unfinished">Modul-Controller öffnen</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="255"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="254"/> <source>Open Module Controller Dialog</source> <translation type="unfinished">Modul-Controller-Dialog öffnen</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="264"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="263"/> <source>New E-Mail</source> <translation type="unfinished">Neue E-Mail</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="265"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="264"/> <source>Create A New E-Mail Tab</source> <translation type="unfinished">Eine neue E-Mail-Karte erstellen</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="273"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="272"/> <source>About</source> <translation type="unfinished">Über</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="274"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="273"/> <source>Show the application's About box</source> <translation type="unfinished">Info-Box der Anwendung anzeigen</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="280"/> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="283"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="279"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="282"/> <source>GnuPG</source> <translation type="unfinished">GnuPG</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="281"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="280"/> <source>Information about Gnupg</source> <translation type="unfinished">Informationen über Gnupg</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="287"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="286"/> <source>Translate</source> <translation type="unfinished">Übersetzen</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="288"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="287"/> <source>Information about translation</source> <translation type="unfinished">Informationen zur Übersetzung</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="290"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="289"/> <source>Translators</source> <translation type="unfinished">Übersetzer</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="294"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="293"/> <source>Check for Updates</source> <translation type="unfinished">Auf Updates prüfen</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="295"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="294"/> <source>Check for updates</source> <translation type="unfinished">Auf Updates prüfen</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="301"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="300"/> <source>Open Wizard</source> <translation type="unfinished">Assistenten öffnen</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="302"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="301"/> <source>Open the wizard</source> <translation type="unfinished">Öffne den Assistenten</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="307"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="306"/> <source>Append Public Key to Editor</source> <translation type="unfinished">Öffentlichen Schlüssel an den Editor anhängen</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="308"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="307"/> <source>Append selected Keypair's Public Key to Editor</source> <translation type="unfinished">Den öffentlichen Schlüssel des ausgewählten Schlüsselpaars an den Editor anhängen</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="313"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="312"/> <source>Append Create DateTime to Editor</source> <translation type="unfinished">Erstellungsdatum an den Editor anfügen</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="314"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="313"/> <source>Append selected Key's creation date and time to Editor</source> <translation type="unfinished">Erstellungsdatum und -zeit des ausgewählten Schlüssels an den Editor anhängen</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="319"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="318"/> <source>Append Expire DateTime to Editor</source> <translation type="unfinished">Ablaufdatum an den Editor anhängen</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="320"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="319"/> <source>Append selected Key's expiration date and time to Editor</source> <translation type="unfinished">Ablaufdatum und -uhrzeit des ausgewählten Schlüssels an den Editor anhängen</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="325"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="324"/> <source>Append Fingerprint to Editor</source> <translation type="unfinished">Fingerabdruck an Editor anhängen</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="326"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="325"/> <source>Append selected Key's Fingerprint to Editor</source> <translation type="unfinished">Fingerabdruck des ausgewählten Schlüssels an den Editor anhängen</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="331"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="330"/> <source>Copy Email</source> <translation type="unfinished">E-Mail kopieren</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="332"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="331"/> <source>Copy selected Keypair's to clipboard</source> <translation type="unfinished">Ausgewählte Schlüsselpaare in die Zwischenablage kopieren</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="337"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="336"/> <source>Copy Default UID</source> <translation type="unfinished">Standard-UID kopieren</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="338"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="337"/> <source>Copy selected Keypair's default UID to clipboard</source> <translation type="unfinished">Standard-UID des ausgewählten Schlüsselpaars in die Zwischenablage kopieren</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="343"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="342"/> <source>Copy Key ID</source> <translation type="unfinished">Schlüssel-ID kopieren</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="344"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="343"/> <source>Copy selected Keypair's ID to clipboard</source> <translation type="unfinished">ID des ausgewählten Schlüsselpaars in die Zwischenablage kopieren</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="349"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="348"/> <source>Show Key Details</source> <translation type="unfinished">Schlüsseldetails anzeigen</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="350"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="349"/> <source>Show Details for this Key</source> <translation type="unfinished">Details zu diesem Schlüssel anzeigen</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="355"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="354"/> <source>Add To Favourite</source> <translation type="unfinished">Zu Favoriten hinzufügen</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="356"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="355"/> <source>Add this key to Favourite Table</source> <translation type="unfinished">Diesen Schlüssel zur Favoritentabelle hinzufügen</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="362"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="361"/> <source>Remove From Favourite</source> <translation type="unfinished">Aus Favoriten entfernen</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="363"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="362"/> <source>Remove this key from Favourite Table</source> <translation type="unfinished">Diesen Schlüssel aus der Favoritentabelle entfernen</translation> </message> <message> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="369"/> <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="370"/> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="371"/> <source>Set Owner Trust Level</source> <translation type="unfinished">Vertrauensstufe des Eigentümers festlegen</translation> </message> <message> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="389"/> <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="390"/> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="391"/> <source>Remove PGP Header</source> <translation type="unfinished">PGP-Header entfernen</translation> </message> <message> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="394"/> <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="395"/> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="396"/> <source>Add PGP Header</source> <translation type="unfinished">PGP-Header hinzufügen</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="420"/> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="514"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="419"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="508"/> <source>Edit</source> <translation type="unfinished">Bearbeiten</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="440"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="439"/> <source>Crypt</source> <translation type="unfinished">Verschlüsselung</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="450"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="449"/> <source>Keys</source> <translation type="unfinished">Schlüssel</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="451"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="450"/> <source>Import Key</source> <translation type="unfinished">Schlüssel importieren</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="467"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="466"/> <source>View</source> <translation type="unfinished">Ansicht</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="469"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="468"/> <source>Help</source> <translation type="unfinished">Hilfe</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="499"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="498"/> <source>Operations</source> <translation type="unfinished">Aktivieren</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="509"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="503"/> <source>Key</source> <translation type="unfinished">Schlüssel</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="522"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="516"/> <source>Special Edit</source> <translation type="unfinished">Sonderbearbeitung</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="536"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="530"/> <source>Import key from...</source> <translation type="unfinished">Schlüssel importieren von...</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="537"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="531"/> <source>Import key</source> <translation type="unfinished">Schlüssel importieren</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="553"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="547"/> <source>Ready</source> <translation type="unfinished">Bereit</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="560"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="554"/> <source>Key ToolBox</source> <translation type="unfinished">Schlüssel-Toolbox</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="568"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="562"/> <source>Default</source> <translation type="unfinished">Standard</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="575"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="569"/> <source>Favourite</source> <translation type="unfinished">Favorit</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="582"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="576"/> <source>Only Public Key</source> <translation type="unfinished">Nur öffentlicher Schlüssel</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="589"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="583"/> <source>Has Private Key</source> <translation type="unfinished">Hat privaten Schlüssel</translation> </message> @@ -5383,89 +5392,89 @@ Wenn das Problem weiterhin besteht, wenden Sie sich an den technischen Support o </message> <message> <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="84"/> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="195"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="192"/> <source>Enable Auto Activate</source> <translation type="unfinished">Automatisches Aktivieren aktivieren</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="144"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="141"/> <source>BASIC INFO</source> <translation type="unfinished">GRUNDINFO</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="146"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="143"/> <source>ID</source> <translation type="unfinished">ID</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="148"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="145"/> <source>Version</source> <translation type="unfinished">Version</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="150"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="147"/> <source>SDK Version</source> <translation type="unfinished">SDK-Version</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="152"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="149"/> <source>Qt ENV Version</source> <translation type="unfinished">Qt ENV Version</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="154"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="151"/> <source>Hash</source> <translation type="unfinished">Hash</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="155"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="152"/> <source>Path</source> <translation type="unfinished">Pfad</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="159"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="156"/> <source>Auto Activate</source> <translation type="unfinished">Automatisch aktivieren</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="160"/> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="162"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="157"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="159"/> <source>True</source> <translation type="unfinished">Wahr</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="160"/> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="162"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="157"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="159"/> <source>False</source> <translation type="unfinished">Falsch</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="161"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="158"/> <source>Active</source> <translation type="unfinished">Aktiv</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="166"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="163"/> <source>METADATA</source> <translation type="unfinished">METADATEN</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="182"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="179"/> <source>Listening Event</source> <translation type="unfinished">Anhören von Veranstaltungen</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="191"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="188"/> <source>Deactivate</source> <translation type="unfinished">Deaktivieren</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="192"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="189"/> <source>Activate</source> <translation type="unfinished">Aktivieren</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="194"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="191"/> <source>Disable Auto Activate</source> <translation type="unfinished">Automatisches Aktivieren deaktivieren</translation> </message> @@ -5544,42 +5553,42 @@ Wenn das Problem weiterhin besteht, wenden Sie sich an den technischen Support o <translation type="unfinished">Tipps: Diese Optionsänderungen werden erst nach dem Neustart der Anwendung wirksam.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsNetwork.cpp" line="173"/> + <location filename="../../../../src/ui/dialog/settings/SettingsNetwork.cpp" line="172"/> <source>Test Server Url Accessibility</source> <translation type="unfinished">Server-URL Erreichbarkeit testen</translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsNetwork.cpp" line="174"/> + <location filename="../../../../src/ui/dialog/settings/SettingsNetwork.cpp" line="173"/> <source>Server Url</source> <translation>Server-URL</translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsNetwork.cpp" line="184"/> + <location filename="../../../../src/ui/dialog/settings/SettingsNetwork.cpp" line="183"/> <source>Success</source> <translation type="unfinished">Erfolg</translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsNetwork.cpp" line="185"/> + <location filename="../../../../src/ui/dialog/settings/SettingsNetwork.cpp" line="184"/> <source>Successfully connect to the target server through the proxy server.</source> <translation type="unfinished">Verbinden Sie sich erfolgreich über den Proxyserver mit dem Zielserver.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsNetwork.cpp" line="189"/> + <location filename="../../../../src/ui/dialog/settings/SettingsNetwork.cpp" line="188"/> <source>Failed</source> <translation type="unfinished">Gescheitert</translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsNetwork.cpp" line="190"/> + <location filename="../../../../src/ui/dialog/settings/SettingsNetwork.cpp" line="189"/> <source>Unable to connect to the target server through the proxy server. Proxy settings may be invalid.</source> <translation type="unfinished">Es kann keine Verbindung zum Zielserver über den Proxyserver hergestellt werden. Die Proxy-Einstellungen sind möglicherweise ungültig.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsNetwork.cpp" line="200"/> + <location filename="../../../../src/ui/dialog/settings/SettingsNetwork.cpp" line="199"/> <source>Test Proxy Server Connection...</source> <translation type="unfinished">Proxyserververbindung testen…</translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsNetwork.cpp" line="201"/> + <location filename="../../../../src/ui/dialog/settings/SettingsNetwork.cpp" line="200"/> <source>Is using your proxy settings to access the url. Note that this test operation will apply your proxy settings to the entire software.</source> <translation type="unfinished">Verwendet Ihre Proxy-Einstellungen, um auf die URL zuzugreifen. Beachten Sie, dass dieser Testvorgang Ihre Proxy-Einstellungen auf die gesamte Software anwendet.</translation> </message> @@ -5763,27 +5772,27 @@ Wenn das Problem weiterhin besteht, wenden Sie sich an den technischen Support o <translation type="unfinished">Abbrechen</translation> </message> <message> - <location filename="../../../../src/ui/dialog/SignersPicker.cpp" line="52"/> + <location filename="../../../../src/ui/dialog/SignersPicker.cpp" line="53"/> <source>Signers</source> <translation type="unfinished">Unterzeichner</translation> </message> <message> - <location filename="../../../../src/ui/dialog/SignersPicker.cpp" line="60"/> + <location filename="../../../../src/ui/dialog/SignersPicker.cpp" line="58"/> <source>Select Signer(s)</source> <translation type="unfinished">Unterzeichner auswählen</translation> </message> <message> - <location filename="../../../../src/ui/dialog/SignersPicker.cpp" line="63"/> + <location filename="../../../../src/ui/dialog/SignersPicker.cpp" line="61"/> <source>Please select one or more private keys you use for signing.</source> <translation type="unfinished">Bitte wählen Sie einen oder mehrere private Schlüssel aus, die Sie zum Signieren verwenden.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/SignersPicker.cpp" line="64"/> + <location filename="../../../../src/ui/dialog/SignersPicker.cpp" line="62"/> <source>If no key is selected, the default key will be used for signing.</source> <translation type="unfinished">Wenn kein Schlüssel ausgewählt ist, wird der Standardschlüssel zum Signieren verwendet.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/SignersPicker.cpp" line="74"/> + <location filename="../../../../src/ui/dialog/SignersPicker.cpp" line="72"/> <source>Signers Picker</source> <translation>Signierungswähler</translation> </message> @@ -5791,7 +5800,7 @@ Wenn das Problem weiterhin besteht, wenden Sie sich an den technischen Support o <context> <name>GpgFrontend::UI::SubkeyGenerateDialog</name> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="72"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="82"/> <source>Tipps: if the key pair has a passphrase, the subkey's passphrase must be equal to it.</source> <translation type="unfinished">Tipps: Wenn das Schlüsselpaar eine Passphrase hat, muss die Passphrase des Unterschlüssels die gleiche sein.</translation> </message> @@ -5801,77 +5810,72 @@ Wenn das Problem weiterhin besteht, wenden Sie sich an den technischen Support o <translation type="unfinished">Neuen Unterschlüssel erstellen</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="98"/> - <source>Key Usage</source> - <translation type="unfinished">Schlüsselverwendung</translation> - </message> - <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="100"/> - <source>Encryption</source> - <translation type="unfinished">Verschlüsselung</translation> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="65"/> + <source>Authentication</source> + <translation type="unfinished">Authentifizierung</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="103"/> - <source>Signing</source> - <translation type="unfinished">Unterzeichnen</translation> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="59"/> + <source>Algorithm</source> + <translation type="unfinished">Algorithmus</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="106"/> - <source>Certification</source> - <translation type="unfinished">Zertifizierung</translation> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="60"/> + <source>Key Length</source> + <translation type="unfinished">Länge des Schlüssels</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="109"/> - <source>Authentication</source> - <translation type="unfinished">Authentifizierung</translation> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="61"/> + <source>Expire Date</source> + <translation type="unfinished">Ablaufdatum</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="153"/> - <source>Key Type</source> - <translation type="unfinished">Schlüsselart</translation> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="62"/> + <source>Usage</source> + <translation type="unfinished">Verwendungszweck</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="154"/> - <source>KeySize (in Bit)</source> - <translation type="unfinished">Schlüsselgröße (in Bit)</translation> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="63"/> + <source>Encrypt</source> + <translation type="unfinished">Verschlüsseln</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="155"/> - <source>Expiration Date</source> - <translation type="unfinished">Ablaufdatum</translation> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="64"/> + <source>Sign</source> + <translation type="unfinished">Unterschreiben</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="156"/> - <source>Never Expire</source> - <translation type="unfinished">Nie ablaufen</translation> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="66"/> + <source>Non Expired</source> + <translation type="unfinished">Nicht abgelaufen</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="157"/> - <source>Non Pass Phrase</source> - <translation type="unfinished">Nicht-Passphrase</translation> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="67"/> + <source>No Passphrase</source> + <translation type="unfinished">Keine Passphrase</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="167"/> - <source>Basic Information</source> - <translation type="unfinished">Grundlegende Informationen</translation> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="183"/> + <source>Please give a valid subkey algorithm.</source> + <translation type="unfinished">Bitte geben Sie einen gültigen Unterschlüssel-Algorithmus an.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="280"/> - <source>Expiration time no more than 2 years.</source> - <translation type="unfinished">Ablaufzeit nicht länger als 2 Jahre.</translation> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="192"/> + <source>Time to subkey expiration must not be less than 120 seconds.</source> + <translation type="unfinished">Die Zeit bis zum Ablauf des Unterschlüssels darf nicht weniger als 120 Sekunden betragen.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="295"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="204"/> <source>Generating</source> <translation type="unfinished">Erstellen</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="306"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="215"/> <source>Error</source> <translation type="unfinished">Fehler</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="307"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="216"/> <source>Unknown error occurred</source> <translation>Unbekannter Fehler ist aufgetreten</translation> </message> @@ -5922,21 +5926,21 @@ Wenn das Problem weiterhin besteht, wenden Sie sich an den technischen Support o <context> <name>GpgFrontend::UI::TextEdit</name> <message> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="73"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="74"/> <source>Open Directory</source> <translation type="unfinished">Verzeichnis öffnen</translation> </message> <message> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="182"/> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="196"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="183"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="197"/> <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="449"/> <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="486"/> <source>Warning</source> <translation type="unfinished">Warnung</translation> </message> <message> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="183"/> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="197"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="184"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="198"/> <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="450"/> <source>Cannot read file %1: %2.</source> @@ -5944,69 +5948,69 @@ Wenn das Problem weiterhin besteht, wenden Sie sich an den technischen Support o %2.</translation> </message> <message> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="120"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="121"/> <source>Open file</source> <translation type="unfinished">Datei öffnen</translation> </message> <message> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="83"/> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="91"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="84"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="92"/> <source>Error</source> <translation type="unfinished">Fehler</translation> </message> <message> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="84"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="85"/> <source>Cannot open this file. Please make sure that this is a regular file and it's readable.</source> <translation type="unfinished">Kann diese Datei nicht öffnen. Bitte stellen Sie sicher, dass es sich um eine reguläre, lesbare Datei handelt.</translation> </message> <message> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="92"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="93"/> <source>Cannot open this file. The file is TOO LARGE (>1MB) for GpgFrontend Text Editor.</source> <translation type="unfinished">Kann diese Datei nicht öffen. DIe Datei ist ZU GROSS (>1MB) für den GpgFrontend Texteditor.</translation> </message> <message> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="100"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="101"/> <source>File Open Error</source> <translation type="unfinished">Fehler beim Öffnen von Dateien</translation> </message> <message> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="101"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="102"/> <source>The file "%1" could not be opened.</source> <translation type="unfinished">Die Datei "%1" konnte nicht geöffnet werden.</translation> </message> <message> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="109"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="110"/> <source>Binary File Detected</source> <translation type="unfinished">Binäre Datei erkannt</translation> </message> <message> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="110"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="111"/> <source>The file "%1" appears to be a binary file and will not be opened.</source> <translation type="unfinished">Die Datei "%1" scheint eine Binärdatei zu sein und kann nicht geöffnet werden.</translation> </message> <message> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="232"/> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="248"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="233"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="249"/> <source>Save file</source> <translation type="unfinished">Datei speichern</translation> </message> <message> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="309"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="310"/> <source>Unsaved document</source> <translation type="unfinished">Nicht gespeichertes Dokument</translation> </message> <message> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="310"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="311"/> <source>The document "%1" has been modified. Do you want to save your changes?</source> <translation type="unfinished">Das Dokument "%1" wurde geändert. Wollen Sie Ihre Änderungen speichern?</translation> </message> <message> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="313"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="314"/> <source>Note:</source> <translation type="unfinished">Notiz:</translation> </message> <message> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="314"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="315"/> <source>If you don't save these files, all changes are lost.</source> <translation type="unfinished">Wenn Sie diese Dateien nicht speichern, gehen alle Änderungen verloren.</translation> </message> @@ -6073,9 +6077,9 @@ Wenn das Problem weiterhin besteht, wenden Sie sich an den technischen Support o %2.</translation> </message> <message> - <location filename="../../../../src/ui/widgets/TextEditTabWidget.cpp" line="254"/> - <location filename="../../../../src/ui/widgets/TextEditTabWidget.cpp" line="268"/> - <location filename="../../../../src/ui/widgets/TextEditTabWidget.cpp" line="284"/> + <location filename="../../../../src/ui/widgets/TextEditTabWidget.cpp" line="251"/> + <location filename="../../../../src/ui/widgets/TextEditTabWidget.cpp" line="265"/> + <location filename="../../../../src/ui/widgets/TextEditTabWidget.cpp" line="281"/> <source>untitled</source> <translation type="unfinished">ohne Titel</translation> </message> @@ -6125,154 +6129,154 @@ Wenn das Problem weiterhin besteht, wenden Sie sich an den technischen Support o <context> <name>GpgFrontend::UI::VerifyKeyDetailBox</name> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="57"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="56"/> <source>Import from keyserver</source> <translation type="unfinished">Vom Schlüsselserver importieren</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="62"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="61"/> <source>Key not present with id 0x</source> <translation type="unfinished">Schlüssel nicht vorhanden mit der ID 0x</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="66"/> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="91"/> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="106"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="65"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="90"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="105"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="120"/> <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="121"/> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="122"/> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="137"/> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="152"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="136"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="151"/> <source>Status</source> <translation type="unfinished">Status</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="66"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="65"/> <source>:</source> <translation type="unfinished">:</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="68"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="67"/> <source>Key not present in key list</source> <translation type="unfinished">Schlüssel nicht in Schlüsselliste vorhanden</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="76"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="75"/> <source>A Signature</source> <translation type="unfinished">Eine Unterschrift</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="81"/> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="96"/> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="111"/> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="127"/> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="142"/> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="157"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="80"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="95"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="110"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="126"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="141"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="156"/> <source>Key Information is NOT Available</source> <translation type="unfinished">Schlüssel Informationen sind NICHT verfügbar</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="83"/> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="98"/> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="113"/> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="129"/> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="144"/> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="159"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="82"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="97"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="112"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="128"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="143"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="158"/> <source>Fingerprint</source> <translation type="unfinished">Fingerabdruck</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="91"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="90"/> <source>Cert Revoked</source> <translation type="unfinished">Zertifikat widerrufen</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="106"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="105"/> <source>Signature Expired</source> <translation type="unfinished">Signatur abgelaufen</translation> </message> <message> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="120"/> <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="121"/> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="122"/> <source>Key Expired</source> <translation type="unfinished">Schlüssel abgelaufen</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="137"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="136"/> <source>General Error</source> <translation type="unfinished">Allgemeiner Fehler</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="152"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="151"/> <source>Unknown Error </source> <translation type="unfinished">Unbekannter Fehler </translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="182"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="181"/> <source>Signer Name</source> <translation type="unfinished">Name des Unterzeichners</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="183"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="182"/> <source>Signer Email</source> <translation type="unfinished">E-Mail des Unterzeichners</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="184"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="183"/> <source>Key's Fingerprint</source> <translation type="unfinished">Fingerabdruck des Schlüssels</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="185"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="184"/> <source>Valid</source> <translation type="unfinished">Gültig</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="186"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="185"/> <source>Flags</source> <translation type="unfinished">Kennzeichnungen</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="193"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="192"/> <source>Fully Valid</source> <translation type="unfinished">Voll gültig</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="195"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="194"/> <source>NOT Fully Valid</source> <translation type="unfinished">NICHT vollständig gültig</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="202"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="201"/> <source>Good</source> <translation type="unfinished">Gut</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="205"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="204"/> <source>Bad</source> <translation type="unfinished">Schlecht</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="208"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="207"/> <source>Expired</source> <translation type="unfinished">Abgelaufen</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="211"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="210"/> <source>Missing Key</source> <translation type="unfinished">Fehlender Schlüssel</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="214"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="213"/> <source>Revoked Key</source> <translation type="unfinished">Widerrufener Schlüssel</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="217"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="216"/> <source>Expired Key</source> <translation type="unfinished">Abgelaufener Schlüssel</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="220"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="219"/> <source>Missing CRL</source> <translation type="unfinished">Fehlende Zertifikatssperrliste</translation> </message> @@ -6280,7 +6284,7 @@ Wenn das Problem weiterhin besteht, wenden Sie sich an den technischen Support o <context> <name>GpgFrontend::UI::Wizard</name> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="43"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="45"/> <source>First Start Wizard</source> <translation type="unfinished">Assistent für den ersten Start</translation> </message> @@ -6288,32 +6292,32 @@ Wenn das Problem weiterhin besteht, wenden Sie sich an den technischen Support o <context> <name>GpgKey</name> <message> - <location filename="../../../../src/core/model/GpgKey.cpp" line="91"/> + <location filename="../../../../src/core/model/GpgKey.cpp" line="89"/> <source>Unknown</source> <translation type="unfinished">Unbekannt</translation> </message> <message> - <location filename="../../../../src/core/model/GpgKey.cpp" line="93"/> + <location filename="../../../../src/core/model/GpgKey.cpp" line="91"/> <source>Undefined</source> <translation type="unfinished">Undefiniert</translation> </message> <message> - <location filename="../../../../src/core/model/GpgKey.cpp" line="95"/> + <location filename="../../../../src/core/model/GpgKey.cpp" line="93"/> <source>Never</source> <translation type="unfinished">Niemals</translation> </message> <message> - <location filename="../../../../src/core/model/GpgKey.cpp" line="97"/> + <location filename="../../../../src/core/model/GpgKey.cpp" line="95"/> <source>Marginal</source> <translation type="unfinished">Geringfügig</translation> </message> <message> - <location filename="../../../../src/core/model/GpgKey.cpp" line="99"/> + <location filename="../../../../src/core/model/GpgKey.cpp" line="97"/> <source>Full</source> <translation type="unfinished">Voll</translation> </message> <message> - <location filename="../../../../src/core/model/GpgKey.cpp" line="101"/> + <location filename="../../../../src/core/model/GpgKey.cpp" line="99"/> <source>Ultimate</source> <translation type="unfinished">Ultimativ</translation> </message> @@ -6384,57 +6388,57 @@ Wenn das Problem weiterhin besteht, wenden Sie sich an den technischen Support o <translation type="unfinished">Sollte dieser Vorgang zu langsam sein, stellen Sie bitte die Keyserver-Adresse entsprechend in der gnupg-Konfigurationsdatei ein (abhängig von der Netzwerksituation in Ihrem Land oder Ihrer Region).</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="67"/> - <source>Show Verify Details</source> - <translation type="unfinished">Verifizierungsdetails anzeigen</translation> - </message> - <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="75"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="64"/> <source>Public key not found locally</source> <translation type="unfinished">Öffentlicher Schlüssel lokal nicht gefunden</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="76"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="65"/> <source>There is no target public key content in local for GpgFrontend to gather enough information about this Signature. Do you want to import the public key from Keyserver now?</source> <translation type="unfinished">Es gibt lokal keinen öffentlichen Zielschlüsselinhalt für GpgFrontend, um genügend Informationen über diese Signatur zu sammeln. Möchten Sie jetzt den öffentlichen Schlüssel vom Keyserver importieren?</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="578"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="555"/> <source>Sync All Public Key</source> <translation type="unfinished">Alle öffentlichen Schlüssel synchronisieren</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="579"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="556"/> <source>You have not checked any public keys that you want to synchronize, do you want to synchronize all local public keys from the key server?</source> <translation type="unfinished">Sie haben keine öffentlichen Schlüssel angekreuzt, die Sie synchronisieren möchten. Möchten Sie alle lokalen öffentlichen Schlüssel mit dem Schlüsselserver synchronisieren?</translation> </message> <message> - <location filename="../../../../src/core/GpgCoreInit.cpp" line="398"/> + <location filename="../../../../src/core/GpgCoreInit.cpp" line="422"/> <source>Cannot Find GpgConf</source> <translation type="unfinished">GpgConf kann nicht gefunden werden</translation> </message> <message> - <location filename="../../../../src/core/GpgCoreInit.cpp" line="406"/> + <location filename="../../../../src/core/GpgCoreInit.cpp" line="430"/> <source>Cannot Find GnuPG</source> <translation type="unfinished">GnuPG kann nicht gefunden werden</translation> </message> <message> - <location filename="../../../../src/core/GpgCoreInit.cpp" line="421"/> - <source>Cannot Find Home Path</source> - <translation type="unfinished">Heimatpfad nicht gefunden</translation> + <location filename="../../../../src/core/GpgCoreInit.cpp" line="405"/> + <source>Cannot get Infos from GpgConf</source> + <translation type="unfinished">Kann keine Infos von GpgConf erhalten</translation> + </message> + <message> + <location filename="../../../../src/core/GpgCoreInit.cpp" line="445"/> + <source>Cannot Find Default Home Path</source> + <translation type="unfinished">Standard-GnuPG-Startpfad kann nicht gefunden werden</translation> </message> <message> - <location filename="../../../../src/core/GpgCoreInit.cpp" line="473"/> + <location filename="../../../../src/core/GpgCoreInit.cpp" line="471"/> <source>GpgME Initiation Failed</source> <translation type="unfinished">GpgME-Initiation fehlgeschlagen</translation> </message> <message> - <location filename="../../../../src/core/GpgCoreInit.cpp" line="547"/> + <location filename="../../../../src/core/GpgCoreInit.cpp" line="545"/> <source>GpgME Default Context Initiation Failed</source> <translation type="unfinished">GpgME-Standardkontext-Initiation fehlgeschlagen</translation> </message> <message> - <location filename="../../../../src/core/GpgCoreInit.cpp" line="558"/> + <location filename="../../../../src/core/GpgCoreInit.cpp" line="556"/> <source>Gpg Default Key Database Initiation Failed</source> <translation type="unfinished">Gpg-Standard-Schlüsseldatenbank-Initiation fehlgeschlagen</translation> </message> diff --git a/resource/lfs/locale/ts/GpgFrontend.en_US.ts b/resource/lfs/locale/ts/GpgFrontend.en_US.ts index 88120b41..e738217e 100644 --- a/resource/lfs/locale/ts/GpgFrontend.en_US.ts +++ b/resource/lfs/locale/ts/GpgFrontend.en_US.ts @@ -137,57 +137,57 @@ <context> <name>GpgFrontend::GpgKeyTableModel</name> <message> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="42"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="40"/> <source>Select</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="42"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="40"/> <source>Type</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="42"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="40"/> <source>Name</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="43"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="41"/> <source>Email Address</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="43"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="41"/> <source>Usage</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="43"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="41"/> <source>Trust</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="44"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="42"/> <source>Key ID</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="44"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="42"/> <source>Create Date</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="44"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="42"/> <source>Algorithm</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="45"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="43"/> <source>Subkey(s)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="45"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="43"/> <source>Comment</source> <translation type="unfinished"></translation> </message> @@ -538,6 +538,14 @@ </message> </context> <context> + <name>GpgFrontend::KeyGenerateInfo</name> + <message> + <location filename="../../../../src/core/model/GpgKeyGenerateInfo.cpp" line="39"/> + <source>None</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> <name>GpgFrontend::Module::GlobalRegisterTable</name> <message> <location filename="../../../../src/core/module/GlobalRegisterTable.cpp" line="47"/> @@ -687,58 +695,58 @@ <context> <name>GpgFrontend::UI::ChoosePage</name> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="107"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="106"/> <source>Choose your action...</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="108"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="107"/> <source>...by clicking on the appropriate link.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="111"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="110"/> <source>If you have never used GpgFrontend before and also don't own a gpg key yet you may possibly want to read how to</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="114"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="113"/> <source>Generate Key</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="121"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="120"/> <source>If you want to learn how to encrypt, decrypt, sign and verify text, you can read </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="124"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="123"/> <source>Encrypt & Decrypt Text</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="124"/> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="136"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="123"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="135"/> <source>or</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="126"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="125"/> <source>Sign & Verify Text</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="134"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="133"/> <source>If you want to operate file, you can read </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="136"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="135"/> <source>Encrypt & Sign File</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="138"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="137"/> <source>Sign & Verify File</source> <translation type="unfinished"></translation> </message> @@ -746,24 +754,24 @@ <context> <name>GpgFrontend::UI::CommonUtils</name> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="224"/> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="356"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="162"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="294"/> <source>Success</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="225"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="163"/> <source>Gpg Operation succeed.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="235"/> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="348"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="173"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="286"/> <source>Failure</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="236"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="174"/> <source>Gpg Operation failed. Error code: %1 @@ -772,116 +780,116 @@ Description: %3</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="255"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="193"/> <source>Open Key</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="256"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="194"/> <source>Keyring files</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="263"/> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="270"/> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="538"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="201"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="208"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="476"/> <source>Error</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="264"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="202"/> <source>Cannot open this file. Please make sure that this is a regular file and it's readable.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="271"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="209"/> <source>The target file is too large for a keyring.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="277"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="215"/> <source>File Open Failed</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="278"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="216"/> <source>Failed to open file: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="329"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="267"/> <source>Processing</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="349"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="287"/> <source>Failed to execute command.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="357"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="295"/> <source>Succeed in executing command.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="359"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="297"/> <source>Warning</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="360"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="298"/> <source>Finished executing command.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="381"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="319"/> <source>Default Keyserver Not Found</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="382"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="320"/> <source>Cannot read default keyserver from your settings, please set a default keyserver first</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="478"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="416"/> <source>Key Not Found</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="481"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="419"/> <source>Timeout</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="484"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="422"/> <source>Key Server Not Found</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="487"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="425"/> <source>Connection Error</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="426"/> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="498"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="364"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="436"/> <source>The key has been updated</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="159"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="119"/> <source>Failed to Load GnuPG Context</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="161"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="121"/> <source>It seems that GnuPG (gpg) is not properly installed. Please refer to the <a href='https://www.gpgfrontend.bktus.com/overview/faq/#troubleshooting-gnupg-installation-issues'>FAQ</a> for instructions on fixing the installation. After resolving the issue, relaunch GpgFrontend.<br /><br />Alternatively, you can open the GnuPG Controller to configure a custom GnuPG installation for GpgFrontend to use. Once set, GpgFrontend will restart automatically.<br /><br />Details: %1</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="428"/> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="500"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="366"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="438"/> <source>No need to update the key</source> <translation type="unfinished"></translation> </message> @@ -889,37 +897,37 @@ Description: %3</source> <context> <name>GpgFrontend::UI::ConclusionPage</name> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="204"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="203"/> <source>Ready.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="205"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="204"/> <source>Have fun with GpgFrontend!</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="208"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="207"/> <source>You are ready to use GpgFrontend now.<br><br></source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="210"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="209"/> <source>The Online Document</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="211"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="210"/> <source> will get you started with GpgFrontend. Anytime you encounter problems, please try to find help from the documentation</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="220"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="219"/> <source>Open offline help.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="224"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="223"/> <source>Don't show the wizard again.</source> <translation type="unfinished"></translation> </message> @@ -948,8 +956,8 @@ Description: %3</source> </message> <message> <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="74"/> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="112"/> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="146"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="111"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="145"/> <source>Error</source> <translation type="unfinished"></translation> </message> @@ -975,82 +983,82 @@ Description: %3</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="113"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="112"/> <source>No key is suitable to export.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="118"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="117"/> <source>Generating</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="129"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="128"/> <source>Success</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="131"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="130"/> <source>The Key Package has been successfully generated and has been protected by encryption algorithms(AES-256-ECB). You can safely transfer your Key Package.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="136"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="135"/> <source>But the key file cannot be leaked under any circumstances. Please delete the Key Package and key file as soon as possible after completing the transfer operation.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="147"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="146"/> <source>An error occurred while exporting the key package.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="156"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="155"/> <source>Key Package Name</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="157"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="156"/> <source>Output Path</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="158"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="157"/> <source>Passphrase</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="160"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="159"/> <source>Tips: You can use Key Package to safely and conveniently transfer your public and private keys between devices.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="162"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="161"/> <source>Generate and Save Passphrase</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="163"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="162"/> <source>Generate Key Package Name</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="164"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="163"/> <source>Select Output Path</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="167"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="166"/> <source>Include secret key (Think twice before acting)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="169"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="168"/> <source>Exclude keys that do not have a private key</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="172"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="171"/> <source>Export As Key Package</source> <translation type="unfinished"></translation> </message> @@ -1058,141 +1066,151 @@ Description: %3</source> <context> <name>GpgFrontend::UI::FilePage</name> <message> - <location filename="../../../../src/ui/widgets/FilePage.cpp" line="63"/> + <location filename="../../../../src/ui/widgets/FilePage.cpp" line="46"/> + <source>Switch Batch Mode</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/widgets/FilePage.cpp" line="66"/> <source>Show Hidden File</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/FilePage.cpp" line="69"/> + <location filename="../../../../src/ui/widgets/FilePage.cpp" line="72"/> <source>Show System File</source> <translation type="unfinished"></translation> </message> + <message> + <location filename="../../../../src/ui/widgets/FilePage.cpp" line="78"/> + <source>ASCII Mode</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>GpgFrontend::UI::FileTreeView</name> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="88"/> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="101"/> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="159"/> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="204"/> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="225"/> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="266"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="93"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="106"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="164"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="209"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="232"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="279"/> <source>Error</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="89"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="94"/> <source>The path is not exists, unprivileged or unreachable.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="102"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="107"/> <source>The file is unprivileged or unreachable.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="152"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="157"/> <source>Warning</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="153"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="158"/> <source>Are you sure you want to delete it?</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="160"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="165"/> <source>Unable to delete the file or folder.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="169"/> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="182"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="174"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="187"/> <source>Make New Directory</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="170"/> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="183"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="175"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="188"/> <source>Directory Name</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="197"/> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="218"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="202"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="225"/> <source>Create Empty File</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="197"/> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="218"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="202"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="225"/> <source>Filename (you can given extension)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="205"/> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="226"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="210"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="233"/> <source>Unable to create the file.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="258"/> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="289"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="271"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="303"/> <source>Rename</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="258"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="271"/> <source>New Filename</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="267"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="280"/> <source>Unable to rename the file or folder.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="284"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="297"/> <source>Open</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="294"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="308"/> <source>Delete</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="299"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="313"/> <source>Calculate Hash</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="304"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="318"/> <source>Directory</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="309"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="323"/> <source>File</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="314"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="328"/> <source>Compress...</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="321"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="335"/> <source>Open with Default System Application</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="326"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="340"/> <source>New</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="382"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="402"/> <source>Calculating</source> <translation type="unfinished"></translation> </message> @@ -1229,68 +1247,63 @@ Description: %3</source> </message> <message> <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="52"/> - <source>Enable to use longer key expiration date.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="54"/> <source>Import files dropped on the Key List without confirmation.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="56"/> + <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="54"/> <source>Disable loading of all modules (including integrated modules)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="58"/> + <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="56"/> <source>Language</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="60"/> + <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="58"/> <source>NOTE</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="60"/> + <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="58"/> <source>: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="61"/> + <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="59"/> <source>GpgFrontend will restart automatically if you change the language!</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="63"/> + <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="61"/> <source>Data</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="65"/> - <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="83"/> + <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="63"/> + <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="81"/> <source>Clear All Log (Total Size: %1)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="68"/> - <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="97"/> + <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="66"/> + <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="95"/> <source>Clear All Data Objects (Total Size: %1)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="71"/> + <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="69"/> <source>Reveal in File Explorer</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="90"/> + <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="88"/> <source>Confirm</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="91"/> + <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="89"/> <source>Are you sure you want to clear all data objects? This will result in loss of all cached form positions, statuses, key servers, etc.</source> <translation type="unfinished"></translation> @@ -1299,150 +1312,182 @@ This will result in loss of all cached form positions, statuses, key servers, et <context> <name>GpgFrontend::UI::GnuPGControllerDialog</name> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="69"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="70"/> <source>General</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="70"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="71"/> <source>Key Database</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="71"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="72"/> <source>Advanced</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="51"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="52"/> <source>Use Binary Mode for File Operations</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="53"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="54"/> <source>Use Pinentry as Password Input Dialog</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="54"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="55"/> <source>Enable GpgME Debug Log</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="55"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="56"/> <source>Use Custom GnuPG</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="56"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="57"/> <source>Select GnuPG Path</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="58"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="59"/> <source>Restart Gpg Agent on start</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="60"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="61"/> <source>Kill all gnupg daemon at close</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="64"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="65"/> <source>Tips: please select a directory where "gpgconf" is located in.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="66"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="67"/> <source>Tips: notice that modify any of these settings will cause an Application restart.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="76"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="77"/> <source>Name</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="76"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="77"/> <source>Path</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="107"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="77"/> + <source>Status</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="77"/> + <source>Real Path</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="108"/> <source>Open Directory</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="183"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="184"/> <source>GnuPG Controller</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="331"/> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="338"/> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="350"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="328"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="335"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="347"/> <source>Illegal GnuPG Path</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="332"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="329"/> <source>Target GnuPG Path is not an exists readable directory.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="339"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="336"/> <source>Target GnuPG Path is not an absolute path.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="351"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="348"/> <source>Target GnuPG Path contains no "gpgconf" executable.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="363"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="360"/> <source>Maximum Key Database Limit Reached</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="364"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="361"/> <source>Currently, GpgFrontend supports a maximum of 8 key databases. Please remove an existing database to add a new one.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="375"/> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="605"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="372"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="618"/> <source>Duplicate Key Database Paths</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="376"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="373"/> <source>The newly added key database path duplicates a previously existing one.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="445"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="382"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="629"/> + <source>Invalid Key Database Paths</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="383"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="630"/> + <source>The edited key database path is not a valid path that GpgFrontend can use</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="430"/> + <source>Active</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="430"/> + <source>Inactive</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="458"/> <source>Confirm Deletion</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="446"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="459"/> <source>Are you sure you want to delete the selected key database?</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="584"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="597"/> <source>No Key Database Selected</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="585"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="598"/> <source>Please select a key database to edit.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="606"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="619"/> <source>The edited key database path duplicates a previously existing one.</source> <translation type="unfinished"></translation> </message> @@ -1450,27 +1495,38 @@ This will result in loss of all cached form positions, statuses, key servers, et <context> <name>GpgFrontend::UI::GpgFrontendApplication</name> <message> - <location filename="../../../../src/ui/GpgFrontendApplication.cpp" line="71"/> + <location filename="../../../../src/ui/GpgFrontendApplication.cpp" line="77"/> <source>Standard Exception Thrown</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/GpgFrontendApplication.cpp" line="72"/> + <location filename="../../../../src/ui/GpgFrontendApplication.cpp" line="78"/> <source>Oops, an standard exception was thrown during the running of the program. This is not a serious problem, it may be the negligence of the programmer, please report this problem if you can.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/GpgFrontendApplication.cpp" line="80"/> + <location filename="../../../../src/ui/GpgFrontendApplication.cpp" line="86"/> <source>Unhandled Exception Thrown</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/GpgFrontendApplication.cpp" line="81"/> + <location filename="../../../../src/ui/GpgFrontendApplication.cpp" line="87"/> <source>Oops, an unhandled exception was thrown during the running of the program. This is not a serious problem, it may be the negligence of the programmer, please report this problem if you can.</source> <translation type="unfinished"></translation> </message> </context> <context> + <name>GpgFrontend::UI::GpgOperaHelper</name> + <message> + <location filename="../../../../src/ui/function/GpgOperaHelper.cpp" line="97"/> + <location filename="../../../../src/ui/function/GpgOperaHelper.cpp" line="133"/> + <location filename="../../../../src/ui/function/GpgOperaHelper.cpp" line="175"/> + <location filename="../../../../src/ui/function/GpgOperaHelper.cpp" line="213"/> + <source>Critical Error</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> <name>GpgFrontend::UI::InfoBoardWidget</name> <message> <location filename="../../../../src/ui/widgets/InfoBoardWidget.cpp" line="46"/> @@ -1554,42 +1610,42 @@ This will result in loss of all cached form positions, statuses, key servers, et <context> <name>GpgFrontend::UI::IntroPage</name> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="71"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="70"/> <source>Getting Started...</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="72"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="71"/> <source>... with GpgFrontend</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="75"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="74"/> <source>Welcome to GpgFrontend for decrypting and signing text or files!</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="77"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="76"/> <source>is a Powerful, Easy-to-Use, Compact, Cross-Platform, and Installation-Free OpenPGP Crypto Tool. </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="79"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="78"/> <source>To get started, be sure to check out the</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="82"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="81"/> <source>by clicking the link, the page will open in your web browser</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="81"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="80"/> <source>Overview</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="91"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="90"/> <source>If it supports the language currently being used in your system, GpgFrontend will automatically set it.</source> <translation type="unfinished"></translation> </message> @@ -1597,52 +1653,57 @@ This will result in loss of all cached form positions, statuses, key servers, et <context> <name>GpgFrontend::UI::KeyDatabaseEditDialog</name> <message> - <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="47"/> + <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="50"/> <source>Key Database Name</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="48"/> + <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="51"/> <source>Key Database Path</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="49"/> + <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="52"/> <source>Select A Key Database Path</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="51"/> - <source>Key Database Info</source> + <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="53"/> + <source>Convert to Relative Path</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="55"/> + <source>Key Database Info</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="59"/> <source>Open Directory</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="58"/> + <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="62"/> <source>Illegal GnuPG Key Database Path</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="59"/> + <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="63"/> <source>Target GnuPG Key Database Path is not an exists readable directory.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="81"/> + <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="85"/> <source>The key database name cannot be empty.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="86"/> + <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="90"/> <source>The key database path cannot be empty.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="92"/> + <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="96"/> <source>A key database with the name '%1' already exists. Please choose a different name.</source> <translation type="unfinished"></translation> </message> @@ -1676,143 +1737,249 @@ This will result in loss of all cached form positions, statuses, key servers, et </message> </context> <context> - <name>GpgFrontend::UI::KeyGenDialog</name> + <name>GpgFrontend::UI::KeyGenPage</name> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="66"/> - <source>Generate Key</source> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="163"/> + <source>Create a keypair...</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="100"/> - <source>Name must contain at least five characters.</source> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="164"/> + <source>...for decrypting and signing messages</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="105"/> - <source>Please give a email address.</source> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="166"/> + <source>You should create a new keypair.The pair consists of a public and a private key.<br>Other users can use the public key to encrypt messages for you and verify messages signed by you.You can use the private key to decrypt and sign messages.<br>For more information have a look at the offline tutorial (which then is shown in the main window):</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="113"/> - <source>Expiration time too long.</source> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="178"/> + <source>Offline tutorial</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="158"/> - <source>Generating</source> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="182"/> + <source>Create New Key</source> <translation type="unfinished"></translation> </message> +</context> +<context> + <name>GpgFrontend::UI::KeyGenerateDialog</name> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="169"/> - <source>Error</source> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="63"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="70"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="578"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="584"/> + <source>Custom</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="170"/> - <source>Unknown error occurred</source> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="71"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="527"/> + <source>3 Months</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="206"/> - <source>Key Usage</source> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="72"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="532"/> + <source>6 Months</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="208"/> - <source>Encryption</source> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="73"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="537"/> + <source>1 Year</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="211"/> - <source>Signing</source> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="74"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="139"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="144"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="542"/> + <source>2 Years</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="214"/> - <source>Certification</source> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="75"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="547"/> + <source>5 Years</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="217"/> - <source>Authentication</source> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="76"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="552"/> + <source>10 Years</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="455"/> - <source>Key Database</source> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="77"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="100"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="109"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="558"/> + <source>Non Expired</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="456"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="81"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="290"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="589"/> + <source>Primary Key Only</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="82"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="338"/> + <source>Primary Key With Subkey</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="85"/> <source>Name</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="457"/> - <source>Email Address</source> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="86"/> + <source>Email</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="458"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="87"/> <source>Comment</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="459"/> - <source>Expiration Date</source> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="88"/> + <source>Key Database</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="460"/> - <source>Never Expire</source> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="89"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="92"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="102"/> + <source>Algorithm</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="461"/> - <source>KeySize (in Bit)</source> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="90"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="93"/> + <source>Validity Period</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="462"/> - <source>Key Type</source> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="94"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="104"/> + <source>Key Length</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="463"/> - <source>Non Pass Phrase</source> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="95"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="105"/> + <source>Usage</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="477"/> - <source>Basic Information</source> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="96"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="106"/> + <source>Encrypt</source> <translation type="unfinished"></translation> </message> -</context> -<context> - <name>GpgFrontend::UI::KeyGenPage</name> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="164"/> - <source>Create a keypair...</source> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="97"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="107"/> + <source>Sign</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="165"/> - <source>...for decrypting and signing messages</source> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="98"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="108"/> + <source>Authentication</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="167"/> - <source>You should create a new keypair.The pair consists of a public and a private key.<br>Other users can use the public key to encrypt messages for you and verify messages signed by you.You can use the private key to decrypt and sign messages.<br>For more information have a look at the offline tutorial (which then is shown in the main window):</source> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="99"/> + <source>No Passphrase</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="179"/> - <source>Offline tutorial</source> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="103"/> + <source>Expire Date</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="183"/> - <source>Create New Key</source> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="112"/> + <source>Easy Mode</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="113"/> + <source>Primary Key</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="114"/> + <source>Subkey</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="117"/> + <source>Generate</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="134"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="261"/> + <source>None</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="146"/> + <source>Generate Key</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="156"/> + <source>Name must contain at least five characters.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="161"/> + <source>Please give a valid email address.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="166"/> + <source>Please give a valid primary key algorithm.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="175"/> + <source>Time to primary key expiration must not be less than 120 seconds.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="182"/> + <source>Please give a valid subkey algorithm.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="190"/> + <source>Time to subkey expiration must not be less than 120 seconds.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="617"/> + <source>Error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="618"/> + <source>Unknown error occurred</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="630"/> + <source>Generating</source> <translation type="unfinished"></translation> </message> </context> @@ -1933,122 +2100,132 @@ This will result in loss of all cached form positions, statuses, key servers, et <context> <name>GpgFrontend::UI::KeyList</name> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="254"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="250"/> <source>Refresh</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="256"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="252"/> <source>Refresh the key list to synchronize changes.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="257"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="253"/> <source>Sync Public Key</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="259"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="255"/> <source>Sync public key with your default keyserver.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="260"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="256"/> <source>Uncheck ALL</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="262"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="258"/> <source>Cancel all checked items in the current tab at once.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="263"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="259"/> <source>Check ALL</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="265"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="261"/> <source>Check all items in the current tab at once</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="266"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="262"/> <source>Search for keys...</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="108"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="645"/> + <source>Error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="645"/> + <source>Key Not Found.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="106"/> <source>Key ID</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="300"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="296"/> <source>Refreshing Key List...</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="477"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="473"/> <source>Import Keys</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="479"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="475"/> <source>You've dropped something on the table.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="480"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="476"/> <source>GpgFrontend will now try to import key(s).</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="483"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="479"/> <source>Always import without bothering.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="305"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="301"/> <source>Key List Refreshed.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="119"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="117"/> <source>Algorithm</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="130"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="128"/> <source>Owner Trust</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="142"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="140"/> <source>Create Date</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="154"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="152"/> <source>Subkey(s)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="168"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="166"/> <source>Comment</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="600"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="577"/> <source>Syncing Key List...</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="609"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="586"/> <source>Sync [%1/%2] %3 %4</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="619"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="596"/> <source>Key List Sync Done.</source> <translation type="unfinished"></translation> </message> @@ -2056,368 +2233,354 @@ This will result in loss of all cached form positions, statuses, key servers, et <context> <name>GpgFrontend::UI::KeyMgmt</name> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="58"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="59"/> <source>All</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="63"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="64"/> <source>Only Public Key</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="70"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="71"/> <source>Has Private Key</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="77"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="78"/> <source>No Primary Key</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="86"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="87"/> <source>Revoked</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="93"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="94"/> <source>Expired</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="117"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="114"/> <source>KeyPair Management</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="138"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="135"/> <source>Open</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="140"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="137"/> <source>Open Key File</source> <translation type="unfinished"></translation> </message> <message> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="143"/> <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="146"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="149"/> <source>Close</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="152"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="149"/> <source>New Keypair</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="155"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="152"/> <source>Generate KeyPair</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="159"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="156"/> <source>New Subkey</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="163"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="160"/> <source>Generate Subkey For Selected KeyPair</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="167"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="266"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="164"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="262"/> <source>File</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="169"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="166"/> <source>Import New Key From File</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="175"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="172"/> <source>Clipboard</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="179"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="176"/> <source>Import New Key From Clipboard</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="191"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="187"/> <source>Keyserver</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="195"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="191"/> <source>Import New Key From Keyserver</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="202"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="568"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="198"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="543"/> <source>Key Package</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="205"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="201"/> <source>Import Key(s) From a Key Package</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="209"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="205"/> <source>Export To Clipboard</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="213"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="209"/> <source>Export Checked Key(s) To Clipboard</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="217"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="213"/> <source>Export As Key Package</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="220"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="216"/> <source>Export Checked Key(s) To a Key Package</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="224"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="220"/> <source>Export As OpenSSH</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="227"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="223"/> <source>Export Checked Key As OpenSSH Format to File</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="231"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="227"/> <source>Delete Selected Key(s)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="233"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="229"/> <source>Delete the Selected keys</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="237"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="233"/> <source>Delete Checked Key(s)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="239"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="235"/> <source>Delete the Checked keys</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="244"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="240"/> <source>Show Key Details</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="246"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="242"/> <source>Show Details for this Key</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="250"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="252"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="246"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="248"/> <source>Set Owner Trust Level</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="270"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="290"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="266"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="286"/> <source>Key</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="271"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="267"/> <source>Generate Key</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="275"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="303"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="271"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="299"/> <source>Import Key</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="281"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="311"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="312"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="277"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="307"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="308"/> <source>Export Key</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="302"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="298"/> <source>Import key</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="347"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="343"/> <source>Deleting Keys</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="348"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="344"/> <source>Are you sure that you want to delete the following keys?</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="350"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="346"/> <source>The action can not be undone.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="368"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="431"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="443"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="473"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="522"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="533"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="546"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="577"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="585"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="601"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="609"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="625"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="418"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="430"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="497"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="508"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="521"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="552"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="560"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="576"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="584"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="600"/> <source>Error</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="368"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="473"/> - <source>Key Not Found.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="379"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="393"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="493"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="499"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="367"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="381"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="469"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="475"/> <source>Forbidden</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="380"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="394"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="368"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="382"/> <source>Please check some keys before doing this operation.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="386"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="560"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="374"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="535"/> <source>key(s) exported</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="421"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="512"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="408"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="487"/> <source>Exporting</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="432"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="444"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="523"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="534"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="419"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="431"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="498"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="509"/> <source>Unknown error occurred</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="465"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="477"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="453"/> <source>Invalid Operation</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="466"/> - <source>Please select one KeyPair before doing this operation.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="478"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="454"/> <source>If a key pair does not have a private key then it will not be able to generate sub-keys.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="494"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="470"/> <source>Please check a key before performing this operation.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="500"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="476"/> <source>This operation accepts just a single key.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="547"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="522"/> <source>This key may not be able to export as OpenSSH format. Please check the key-size of the subkey(s) used to sign.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="555"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="530"/> <source>Export OpenSSH Key To File</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="556"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="531"/> <source>OpenSSH Public Key Files</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="568"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="543"/> <source>Import Key Package</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="578"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="602"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="553"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="577"/> <source>Cannot open this file. Please make sure that this is a regular file and it's readable.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="586"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="561"/> <source>The target file is too large for a key package.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="591"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="566"/> <source>Import Key Package Passphrase File</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="592"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="567"/> <source>Key Package Passphrase File</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="610"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="585"/> <source>The target file is too large for a key package passphrase.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="615"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="590"/> <source>Importing</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="626"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="601"/> <source>An error occur in importing key package.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="632"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="607"/> <source>key(s) imported</source> <translation type="unfinished"></translation> </message> @@ -2623,7 +2786,7 @@ This will result in loss of all cached form positions, statuses, key servers, et <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairDetailTab.cpp" line="350"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairDetailTab.cpp" line="344"/> <source>Notice: The public key has been published on keys.openpgp.org.</source> <translation type="unfinished"></translation> </message> @@ -2631,204 +2794,204 @@ This will result in loss of all cached form positions, statuses, key servers, et <context> <name>GpgFrontend::UI::KeyPairOperaTab</name> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="62"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="61"/> <source>General Operations</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="68"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="67"/> <source>Export Public Key</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="74"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="73"/> <source>Export Private Key</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="81"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="80"/> <source>Modify Expiration Datetime (Primary Key)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="84"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="83"/> <source>Modify Password</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="119"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="118"/> <source>Revoke Certificate Operation</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="125"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="124"/> <source>Modify TOFU Policy</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="132"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="131"/> <source>Set Owner Trust Level</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="179"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="178"/> <source>Export Full Secret Key</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="185"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="184"/> <source>Export Shortest Secret Key</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="208"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="207"/> <source>Generate Revoke Certificate</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="213"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="212"/> <source>Import Revoke Certificate</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="242"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="291"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="342"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="635"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="241"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="290"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="341"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="633"/> <source>Export Key To File</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="243"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="292"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="343"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="636"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="242"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="291"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="342"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="634"/> <source>Key Files</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="248"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="297"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="348"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="659"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="247"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="296"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="347"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="657"/> <source>Export Error</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="249"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="298"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="349"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="660"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="248"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="297"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="348"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="658"/> <source>Couldn't open %1 for writing</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="101"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="100"/> <source>Key Server Operations</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="109"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="689"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="108"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="687"/> <source>Import A Paper Key</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="196"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="195"/> <source>Export Secret Key As A Paper Key</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="256"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="307"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="596"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="255"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="306"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="594"/> <source>WARNING: You are about to export your</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="257"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="308"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="597"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="256"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="307"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="595"/> <source>PRIVATE KEY</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="258"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="598"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="257"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="596"/> <source>This is NOT your Public Key, so <b>DO NOT</b> share it with anyone.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="261"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="260"/> <source>You are exporting a <b>minimum size</b> private key, which removes all signatures except for the latest self-signatures.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="263"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="262"/> <source>Do you <b>REALLY</b> want to proceed?</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="265"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="264"/> <source>Exporting Short Private Key</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="309"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="308"/> <source>This operation will export your <b>private key</b>, including both the main key and all subkeys, into an external file. This key is extremely sensitive, and anyone with access to it can impersonate you. DO NOT share this file with anyone!</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="315"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="608"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="314"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="606"/> <source>Are you <b>ABSOLUTELY SURE</b> you want to proceed?</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="318"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="317"/> <source>Exporting Private Key</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="390"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="389"/> <source>Key Upload Failed</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="406"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="405"/> <source>The following email addresses have status: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="418"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="417"/> <source>Could not parse status information.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="391"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="390"/> <source>Failed to upload public key to the server. Fingerprint: %1 Error: %2</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="156"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="155"/> <source>Publish Public Key to Key Server</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="164"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="163"/> <source>Refresh Public Key From Key Server</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="423"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="422"/> <source>Public Key Upload Successful</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="424"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="423"/> <source>The public key was successfully uploaded to the key server keys.openpgp.org. Fingerprint: %1 @@ -2839,169 +3002,169 @@ Note: For verification, you can find more information here: https://keys.openpgp <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="458"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="456"/> <source>0 -> No Reason.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="458"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="456"/> <source>1 -> This key is no more safe.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="459"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="457"/> <source>2 -> Key is outdated.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="459"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="457"/> <source>3 -> Key is no longer used</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="466"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="555"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="464"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="553"/> <source>Revocation Certificates</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="477"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="475"/> <source>Generate revocation certificate</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="504"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="513"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="502"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="511"/> <source>Policy Auto</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="504"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="515"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="502"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="513"/> <source>Policy Good</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="504"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="517"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="502"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="515"/> <source>Policy Bad</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="505"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="519"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="503"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="517"/> <source>Policy Ask</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="505"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="521"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="503"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="519"/> <source>Policy Unknown</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="509"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="507"/> <source>Modify TOFU Policy(Default is Auto)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="510"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="508"/> <source>Policy for the Key Pair:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="527"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="525"/> <source>Not Successful</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="528"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="526"/> <source>Modify TOFU policy not successfully.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="542"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="554"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="540"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="552"/> <source>Import Key Revocation Certificate</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="543"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="541"/> <source>You are about to import the</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="544"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="542"/> <source>REVOCATION CERTIFICATE</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="545"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="543"/> <source>A successful import will result in the key being irreversibly revoked.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="547"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="545"/> <source>Do you REALLY want to execute this operation?</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="563"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="572"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="581"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="652"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="698"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="706"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="714"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="732"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="561"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="570"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="579"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="650"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="696"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="704"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="712"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="730"/> <source>Error</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="564"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="582"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="699"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="715"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="562"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="580"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="697"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="713"/> <source>Cannot open this file. Please make sure that this is a regular file and it's readable.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="573"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="571"/> <source>The target file is too large for a key revocation certificate.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="601"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="599"/> <source>A <b>PaperKey</b> is a human-readable printout of your private key, which can be used to recover your key if you lose access to your digital copy. </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="605"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="603"/> <source>Keep this paper copy in a safe and secure place, such as a fireproof safe or a trusted vault.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="611"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="609"/> <source>Exporting Private Key as a PaperKey</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="653"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="651"/> <source>An error occurred trying to generate Paper Key.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="690"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="688"/> <source>Paper Key File</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="707"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="705"/> <source>The target file is too large for a paper key keyring.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="733"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="731"/> <source>An error occurred trying to recover the Paper Key back to the private key.</source> <translation type="unfinished"></translation> </message> @@ -3090,7 +3253,7 @@ Note: For verification, you can find more information here: https://keys.openpgp </message> <message> <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="124"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="353"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="351"/> <source>Export Subkey</source> <translation type="unfinished"></translation> </message> @@ -3105,227 +3268,227 @@ Note: For verification, you can find more information here: https://keys.openpgp <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="209"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="359"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="208"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="355"/> <source>Primary Key</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="210"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="359"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="209"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="356"/> <source>Subkey</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="233"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="232"/> <source>Never Expire</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="289"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="288"/> <source>Never Expires</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="311"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="310"/> <source>Certificate</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="313"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="312"/> <source>Encrypt</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="314"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="313"/> <source>Sign</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="315"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="314"/> <source>Auth</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="320"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="319"/> <source>Exists</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="321"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="320"/> <source>Not Exists</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="324"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="361"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="323"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="358"/> <source>Yes</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="324"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="361"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="323"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="358"/> <source>No</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="352"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="351"/> <source>Export Primary Key</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="375"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="372"/> <source>Edit Expire Date</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="379"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="376"/> <source>Export</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="383"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="380"/> <source>Delete</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="387"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="384"/> <source>Revoke</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="440"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="437"/> <source>Exporting Subkey</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="441"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="438"/> <source>You are about to export a private subkey.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="442"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="439"/> <source>While subkeys are less critical than the primary key, they should still be handled with care.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="445"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="442"/> <source>Do you want to proceed with exporting this subkey?</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="472"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="469"/> <source>Export Key To File</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="473"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="470"/> <source>Key Files</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="478"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="475"/> <source>Export Error</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="479"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="476"/> <source>Couldn't open %1 for writing</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="488"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="485"/> <source><h3>You are about to delete the subkey:</h3><br /><b>KeyID:</b> %1<br /><br />This action is irreversible. Please confirm.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="494"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="491"/> <source>Delete Subkey Confirmation</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="509"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="559"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="506"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="556"/> <source>Illegal Operation</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="510"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="507"/> <source>Cannot delete the primary key or an invalid subkey.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="518"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="515"/> <source>Operation Failed</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="519"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="516"/> <source>The selected subkey could not be deleted. Please check your permissions or try again.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="525"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="522"/> <source>Operation Successful</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="526"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="523"/> <source>The subkey with KeyID %1 has been successfully deleted.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="536"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="533"/> <source><h3>Revoke Subkey Confirmation</h3><br /><b>KeyID:</b> %1<br /><br />Revoking a subkey will make it permanently unusable. This action is <b>irreversible</b>.<br />Are you sure you want to revoke this subkey?</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="543"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="540"/> <source>Revoke Subkey</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="560"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="557"/> <source>Cannot revoke the primary key or an invalid subkey.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="565"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="562"/> <source>0 -> No Reason.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="565"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="562"/> <source>1 -> This key is no more safe.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="566"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="563"/> <source>2 -> Key is outdated.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="566"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="563"/> <source>3 -> Key is no longer used</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="577"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="574"/> <source>Revocation Failed</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="578"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="575"/> <source>Failed to revoke the subkey. Please try again.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="581"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="578"/> <source>Revocation Successful</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="582"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="579"/> <source>The subkey has been successfully revoked.</source> <translation type="unfinished"></translation> </message> @@ -3403,8 +3566,8 @@ Note: For verification, you can find more information here: https://keys.openpgp <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="355"/> <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="481"/> <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="490"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="535"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="564"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="536"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="565"/> <source>Invalid Operation</source> <translation type="unfinished"></translation> </message> @@ -3414,37 +3577,37 @@ Note: For verification, you can find more information here: https://keys.openpgp <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="542"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="543"/> <source><h3>Revoke UID Confirmation</h3><br /><b>UID:</b> %1<br /><br />Revoking a UID will make it permanently unusable. This action is <b>irreversible</b>.<br />Are you sure you want to revoke this UID?</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="570"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="571"/> <source>0 -> No Reason.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="570"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="571"/> <source>4 -> User ID is no longer valid.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="581"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="582"/> <source>Revocation Failed</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="582"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="583"/> <source>Failed to revoke the UID. Please try again.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="585"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="586"/> <source>Revocation Successful</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="586"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="587"/> <source>The UID has been successfully revoked.</source> <translation type="unfinished"></translation> </message> @@ -3475,7 +3638,7 @@ Note: For verification, you can find more information here: https://keys.openpgp </message> <message> <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="356"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="565"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="566"/> <source>Cannot delete the Primary UID.</source> <translation type="unfinished"></translation> </message> @@ -3518,7 +3681,7 @@ Note: For verification, you can find more information here: https://keys.openpgp </message> <message> <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="431"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="549"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="550"/> <source>Revoke UID</source> <translation type="unfinished"></translation> </message> @@ -3528,7 +3691,7 @@ Note: For verification, you can find more information here: https://keys.openpgp <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="536"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="537"/> <source>Please select one UID before doing this operation.</source> <translation type="unfinished"></translation> </message> @@ -3561,139 +3724,139 @@ Note: For verification, you can find more information here: https://keys.openpgp <context> <name>GpgFrontend::UI::KeyServerImportDialog</name> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="57"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="56"/> <source>Close</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="60"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="59"/> <source>Import ALL</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="64"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="63"/> <source>Search</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="69"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="68"/> <source>Search String</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="69"/> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="73"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="68"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="72"/> <source>: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="73"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="72"/> <source>Key Server</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="114"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="113"/> <source>Import Keys from key server</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="157"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="156"/> <source>UID</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="157"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="156"/> <source>Creation date</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="157"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="156"/> <source>KeyID</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="157"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="156"/> <source>Tag</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="180"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="179"/> <source>Text is empty.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="223"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="222"/> <source>Not Key Found</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="226"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="225"/> <source>Timeout</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="229"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="228"/> <source>Key Server Not Found</source> <translation type="unfinished"></translation> </message> <message> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="231"/> <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="232"/> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="233"/> <source>Connection Error</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="242"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="241"/> <source>Too many responses from keyserver!</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="254"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="253"/> <source>No keys found, input may be kexId, retrying search with 0x.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="264"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="263"/> <source>No keys found containing the search string!</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="271"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="270"/> <source>Insufficiently specific search string!</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="306"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="305"/> <source>revoked</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="309"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="308"/> <source>disabled</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="354"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="353"/> <source>%1 keys found. Double click a key to import it.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="375"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="374"/> <source>Warning</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="376"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="375"/> <source>Please select one KeyPair before doing this operation.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="423"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="421"/> <source>Key Imported</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="436"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="434"/> <source>Processing ...</source> <translation type="unfinished"></translation> </message> @@ -3701,27 +3864,27 @@ Note: For verification, you can find more information here: https://keys.openpgp <context> <name>GpgFrontend::UI::KeyServerImportTask</name> <message> - <location filename="../../../../src/ui/thread/KeyServerImportTask.cpp" line="78"/> + <location filename="../../../../src/ui/thread/KeyServerImportTask.cpp" line="81"/> <source>Key not found in the Keyserver.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/thread/KeyServerImportTask.cpp" line="81"/> + <location filename="../../../../src/ui/thread/KeyServerImportTask.cpp" line="84"/> <source>Network connection timeout.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/thread/KeyServerImportTask.cpp" line="84"/> + <location filename="../../../../src/ui/thread/KeyServerImportTask.cpp" line="87"/> <source>Cannot resolve the address of target key server.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/thread/KeyServerImportTask.cpp" line="87"/> + <location filename="../../../../src/ui/thread/KeyServerImportTask.cpp" line="90"/> <source>General connection error occurred.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/thread/KeyServerImportTask.cpp" line="96"/> + <location filename="../../../../src/ui/thread/KeyServerImportTask.cpp" line="99"/> <source>Success</source> <translation type="unfinished"></translation> </message> @@ -3749,22 +3912,17 @@ Note: For verification, you can find more information here: https://keys.openpgp <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeySetExpireDateDialog.cpp" line="135"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeySetExpireDateDialog.cpp" line="124"/> <source>Modified Expiration Date (Local Time)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeySetExpireDateDialog.cpp" line="136"/> - <source>Tips: For the sake of security, the key is valid for up to two years. If you are an expert user, please unlock it for a longer time in the settings.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeySetExpireDateDialog.cpp" line="140"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeySetExpireDateDialog.cpp" line="125"/> <source>No Expiration</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeySetExpireDateDialog.cpp" line="141"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeySetExpireDateDialog.cpp" line="126"/> <source>Modified Expiration Date</source> <translation type="unfinished"></translation> </message> @@ -3772,12 +3930,12 @@ Note: For verification, you can find more information here: https://keys.openpgp <context> <name>GpgFrontend::UI::KeyTable</name> <message> - <location filename="../../../../src/ui/widgets/KeyTable.cpp" line="83"/> + <location filename="../../../../src/ui/widgets/KeyTable.cpp" line="84"/> <source>Error</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyTable.cpp" line="83"/> + <location filename="../../../../src/ui/widgets/KeyTable.cpp" line="84"/> <source>Key Not Found.</source> <translation type="unfinished"></translation> </message> @@ -3800,22 +3958,22 @@ Note: For verification, you can find more information here: https://keys.openpgp <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyUIDSignDialog.cpp" line="121"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyUIDSignDialog.cpp" line="120"/> <source>Unsuccessful Operation</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyUIDSignDialog.cpp" line="122"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyUIDSignDialog.cpp" line="121"/> <source>Signature operation failed for UID %1</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyUIDSignDialog.cpp" line="126"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyUIDSignDialog.cpp" line="125"/> <source>Operation Complete</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyUIDSignDialog.cpp" line="127"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyUIDSignDialog.cpp" line="126"/> <source>The signature operation of the UID is complete</source> <translation type="unfinished"></translation> </message> @@ -3823,52 +3981,52 @@ Note: For verification, you can find more information here: https://keys.openpgp <context> <name>GpgFrontend::UI::KeyUploadDialog</name> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="66"/> + <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="65"/> <source>Uploading Public Key</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="84"/> + <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="83"/> <source>Error</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="85"/> + <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="84"/> <source>Unknown error occurred</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="155"/> + <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="154"/> <source>Key Not Found</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="158"/> + <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="157"/> <source>Timeout</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="161"/> + <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="160"/> <source>Key Server Not Found</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="164"/> + <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="163"/> <source>Connection Error</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="166"/> + <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="165"/> <source>Upload Failed</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="170"/> + <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="169"/> <source>Upload Success</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="171"/> + <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="170"/> <source>Upload Public Key Successfully</source> <translation type="unfinished"></translation> </message> @@ -3982,22 +4140,22 @@ Note: For verification, you can find more information here: https://keys.openpgp <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsKeyServer.cpp" line="245"/> + <location filename="../../../../src/ui/dialog/settings/SettingsKeyServer.cpp" line="244"/> <source>Reachable</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsKeyServer.cpp" line="248"/> + <location filename="../../../../src/ui/dialog/settings/SettingsKeyServer.cpp" line="247"/> <source>Not Reachable</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsKeyServer.cpp" line="260"/> + <location filename="../../../../src/ui/dialog/settings/SettingsKeyServer.cpp" line="259"/> <source>Test Key Server Connection...</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsKeyServer.cpp" line="261"/> + <location filename="../../../../src/ui/dialog/settings/SettingsKeyServer.cpp" line="260"/> <source>This test only tests the network connectivity of the key server. Passing the test does not mean that the key server is functionally available.</source> <translation type="unfinished"></translation> </message> @@ -4005,329 +4163,154 @@ Note: For verification, you can find more information here: https://keys.openpgp <context> <name>GpgFrontend::UI::MainWindow</name> <message> - <location filename="../../../../src/ui/main_window/MainWindow.cpp" line="156"/> - <location filename="../../../../src/ui/main_window/MainWindow.cpp" line="159"/> + <location filename="../../../../src/ui/main_window/MainWindow.cpp" line="163"/> + <location filename="../../../../src/ui/main_window/MainWindow.cpp" line="166"/> <source>Critical error occur while loading GpgFrontend.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindow.cpp" line="158"/> + <location filename="../../../../src/ui/main_window/MainWindow.cpp" line="165"/> <source>Loading Failed</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="50"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="75"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="103"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="156"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="176"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="201"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="229"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="282"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="302"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="319"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="336"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="355"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="372"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="389"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="409"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="471"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="492"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="528"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="546"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="571"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="616"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="661"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="690"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="735"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="781"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="810"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="818"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="845"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="910"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="919"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="947"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="988"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="77"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="135"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="202"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="239"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="278"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="320"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="440"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="491"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="111"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="137"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="159"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="177"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="192"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="207"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="224"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="106"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="143"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="522"/> <source>Error</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="51"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="177"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="303"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="356"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="410"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="493"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="572"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="691"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="811"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="911"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="989"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="523"/> <source>Cannot read from file: %1</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="64"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="190"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="119"/> <source>The target file %1 already exists, do you need to overwrite it?</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="67"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="193"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="310"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="363"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="450"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="623"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="742"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="824"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="925"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="122"/> <source>Warning</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="76"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="202"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="320"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="373"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="617"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="736"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="819"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="920"/> - <source>Cannot write to file: %1</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="85"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="211"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="55"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="50"/> <source>Symmetric Encryption</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="86"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="212"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="51"/> <source>No Key Selected. Do you want to encrypt with a symmetric cipher using a passphrase?</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="92"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="64"/> - <source>Symmetrically Encrypting</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="104"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="157"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="230"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="283"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="337"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="390"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="472"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="547"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="662"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="782"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="846"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="948"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="78"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="136"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="203"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="240"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="279"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="321"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="441"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="492"/> - <source>Unknown error occurred</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="135"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="261"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="598"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="717"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="396"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="172"/> <source>Invalid KeyPair</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="136"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="262"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="599"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="718"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="397"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="60"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="261"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="448"/> <source>The selected keypair cannot be used for encryption.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="137"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="263"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="600"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="719"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="115"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="181"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="398"/> - <source>For example the Following Key:</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="144"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="123"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="632"/> - <source>Encrypting</source> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="107"/> + <source>Cannot read from the following files: + +%1</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="218"/> - <source>Archiving & Symmetrically Encrypting</source> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="144"/> + <source>Cannot write to the following files: + +%1</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="270"/> - <source>Archiving & Encrypting</source> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="174"/> + <source>For example the Following Key:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="311"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="364"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="624"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="743"/> - <source>The target file already exists, do you need to overwrite it?</source> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="196"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="323"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="654"/> + <source>Encrypting</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="325"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="229"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="231"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="358"/> <source>Decrypting</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="378"/> - <source>Decrypting & Extrating</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="424"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="587"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="706"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="163"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="379"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="158"/> <source>No Key Checked</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="425"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="588"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="707"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="164"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="159"/> <source>Please check the key in the key toolbox on the right.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="432"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="112"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="178"/> - <source>Invalid Operation</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="433"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="208"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="369"/> <source>The selected key contains a key that does not actually have a sign usage.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="435"/> - <source>for example the Following Key:</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="451"/> - <source>The signature file "%1" exists, do you need to overwrite it?</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="460"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="190"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="703"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="217"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="388"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="721"/> <source>Signing</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="513"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="414"/> <source>File to be Verified</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="514"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="415"/> <source>Please provide An ABSOLUTE Path If Data And Signature is COMBINED within a single file, KEEP THIS EMPTY: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="529"/> - <source>Please select the appropriate origin file or signature file. Ensure that both are in this directory.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="535"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="267"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="307"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="370"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="245"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="434"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="326"/> <source>Verifying</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="648"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="425"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="786"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="271"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="478"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="804"/> <source>Encrypting and Signing</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="767"/> - <source>Archiving & Encrypting & Signing</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="825"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="926"/> - <source>The output file %1 already exists, do you need to overwrite it?</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="834"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="479"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="850"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="285"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="512"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="868"/> <source>Decrypting and Verifying</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="882"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="347"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="533"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="445"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="402"/> <source>Missing Keys</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="883"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="348"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="534"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="446"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="403"/> <source>Some signatures cannot be verified because the corresponding keys are missing. The following fingerprints are missing: @@ -4337,216 +4320,230 @@ Would you like to fetch these keys from the key server?</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="898"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="363"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="548"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="462"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="417"/> <source>Verification Incomplete</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="899"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="364"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="549"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="463"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="418"/> <source>Verification was incomplete due to missing keys. You can manually import the keys later.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="935"/> - <source>Decrypting & Verifying & Extracting</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="996"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="529"/> <source>EML File Too Large</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="997"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="530"/> <source>The EML file "%1" is larger than 32MB and will not be opened.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="56"/> - <source>No Key Checked. Do you want to encrypt with a symmetric cipher using a passphrase?</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="113"/> - <source>The selected key contains a key that does not actually have a encrypt usage.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="179"/> - <source>The selected key contains a key that does not actually have a signature usage.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="380"/> - <source>Please check some key in the key toolbox on the right.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="111"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="137"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="159"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="177"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="192"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="207"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="224"/> - <source>Key Not Found.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="116"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="106"/> <source>Localize</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="119"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="109"/> <source>UTC</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="142"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="120"/> <source>Local Time</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="324"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="274"/> <source>This version(%1) may have been withdrawn by the developer due to serious problems. Please stop using this version immediately and download the latest stable version (%2) on the Github Releases Page.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="339"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="288"/> <source>This may be a BETA Version (Latest Stable Version: %1).</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="345"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="301"/> <source>Commit Hash Mismatch</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="346"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="302"/> <source>The current version's commit hash does not match the official release. This may indicate a modified or unofficial build. For security reasons, please verify your installation or download the official release from the Github Releases Page.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="478"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="492"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="494"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="496"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="573"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="590"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="592"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="594"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="880"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="896"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="899"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="902"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="432"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="446"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="448"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="450"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="595"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="612"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="614"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="616"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="898"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="914"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="917"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="920"/> <source>None</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="486"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="584"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="889"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="440"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="606"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="907"/> <source>From</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="487"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="489"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="585"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="587"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="890"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="893"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="441"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="443"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="607"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="609"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="908"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="911"/> <source>Unknown</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="489"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="587"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="892"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="443"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="609"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="910"/> <source>To</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="491"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="589"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="895"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="445"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="611"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="913"/> <source>Subject</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="494"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="592"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="898"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="448"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="614"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="916"/> <source>CC</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="496"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="594"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="901"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="450"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="616"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="919"/> <source>BCC</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="497"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="595"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="904"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="451"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="617"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="922"/> <source>Date</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="502"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="909"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="456"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="927"/> <source>Signed EML Data Hash (SHA1)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="505"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="913"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="459"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="931"/> <source>Message Integrity Check Algorithm</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="625"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="689"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="755"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="772"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="517"/> + <source>FAIL</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="521"/> + <source>OK</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="524"/> + <source>WARN</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="535"/> + <source>Summary Report</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="536"/> + <source>Total Operations: %1 +</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="537"/> + <source>Successful: %1 +</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="538"/> + <source>Warnings: %1 +</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="539"/> + <source>Failures: %1 +</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="543"/> + <source>Failed Objects: %1 +</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="548"/> + <source>Warning Objects: %1 +</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="647"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="707"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="773"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="790"/> <source>No Key Selected</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="626"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="756"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="648"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="774"/> <source>Please select a key for encrypt the EML.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="690"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="773"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="708"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="791"/> <source>Please select a key for signing the EML.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="695"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="778"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="713"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="796"/> <source>Multiple Keys Selected</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="696"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="779"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="714"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="797"/> <source>Please select only one key to sign the EML.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="959"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="976"/> <source># EML Data Error The provided EML data does not conform to RFC 3156 standards and cannot be processed. @@ -4564,7 +4561,7 @@ After correcting the EML data, try the operation again.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="985"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="1002"/> <source># Email Operation Error An error occurred during the email operation. The process could not be completed. @@ -4588,17 +4585,19 @@ If the issue persists, consider seeking technical support or consulting the docu <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="319"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="262"/> <source>GpgFrontend Upgradeable (New Version: %1).</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="297"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="269"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="296"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="296"/> <source>Update</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="323"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="273"/> <source>Withdrawn Version</source> <translation type="unfinished"></translation> </message> @@ -4864,8 +4863,8 @@ If the issue persists, consider seeking technical support or consulting the docu </message> <message> <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="184"/> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="402"/> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="487"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="401"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="486"/> <source>File</source> <translation type="unfinished"></translation> </message> @@ -4885,406 +4884,406 @@ If the issue persists, consider seeking technical support or consulting the docu <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="208"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="207"/> <source>Keyserver</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="210"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="209"/> <source>Import New Key From Keyserver</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="218"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="217"/> <source>Editor</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="219"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="218"/> <source>Import New Key From Editor</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="224"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="223"/> <source>Manage Keys</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="225"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="224"/> <source>Open Key Management</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="230"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="229"/> <source>Clear Password Cache</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="231"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="230"/> <source>Clear Password Cache of GnuPG</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="459"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="458"/> <source>Advanced</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="600"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="594"/> <source>Status Panel</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="346"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="360"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="378"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="309"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="323"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="338"/> <source>Successful Operation</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="347"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="310"/> <source>Clear password cache successfully</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="349"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="364"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="382"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="312"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="327"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="342"/> <source>Failed Operation</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="350"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="313"/> <source>Failed to clear password cache of GnuPG</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="236"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="235"/> <source>Reload All Components</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="237"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="236"/> <source>Reload All GnuPG's Components</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="361"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="324"/> <source>Reload all the GnuPG's components successfully</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="365"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="328"/> <source>Failed to reload all or one of the GnuPG's component(s)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="242"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="241"/> <source>Restart All Components</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="243"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="242"/> <source>Restart All GnuPG's Components</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="379"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="339"/> <source>Restart all the GnuPG's components successfully</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="383"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="343"/> <source>Failed to restart all or one of the GnuPG's component(s)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="248"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="247"/> <source>Open GnuPG Controller</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="249"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="248"/> <source>Open GnuPG Controller Dialog</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="254"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="253"/> <source>Open Module Controller</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="255"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="254"/> <source>Open Module Controller Dialog</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="264"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="263"/> <source>New E-Mail</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="265"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="264"/> <source>Create A New E-Mail Tab</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="273"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="272"/> <source>About</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="274"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="273"/> <source>Show the application's About box</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="280"/> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="283"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="279"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="282"/> <source>GnuPG</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="281"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="280"/> <source>Information about Gnupg</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="287"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="286"/> <source>Translate</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="288"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="287"/> <source>Information about translation</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="290"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="289"/> <source>Translators</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="294"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="293"/> <source>Check for Updates</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="295"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="294"/> <source>Check for updates</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="301"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="300"/> <source>Open Wizard</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="302"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="301"/> <source>Open the wizard</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="307"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="306"/> <source>Append Public Key to Editor</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="308"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="307"/> <source>Append selected Keypair's Public Key to Editor</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="313"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="312"/> <source>Append Create DateTime to Editor</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="314"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="313"/> <source>Append selected Key's creation date and time to Editor</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="319"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="318"/> <source>Append Expire DateTime to Editor</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="320"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="319"/> <source>Append selected Key's expiration date and time to Editor</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="325"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="324"/> <source>Append Fingerprint to Editor</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="326"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="325"/> <source>Append selected Key's Fingerprint to Editor</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="331"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="330"/> <source>Copy Email</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="332"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="331"/> <source>Copy selected Keypair's to clipboard</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="337"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="336"/> <source>Copy Default UID</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="338"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="337"/> <source>Copy selected Keypair's default UID to clipboard</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="343"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="342"/> <source>Copy Key ID</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="344"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="343"/> <source>Copy selected Keypair's ID to clipboard</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="349"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="348"/> <source>Show Key Details</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="350"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="349"/> <source>Show Details for this Key</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="355"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="354"/> <source>Add To Favourite</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="356"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="355"/> <source>Add this key to Favourite Table</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="362"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="361"/> <source>Remove From Favourite</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="363"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="362"/> <source>Remove this key from Favourite Table</source> <translation type="unfinished"></translation> </message> <message> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="369"/> <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="370"/> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="371"/> <source>Set Owner Trust Level</source> <translation type="unfinished"></translation> </message> <message> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="389"/> <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="390"/> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="391"/> <source>Remove PGP Header</source> <translation type="unfinished"></translation> </message> <message> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="394"/> <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="395"/> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="396"/> <source>Add PGP Header</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="420"/> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="514"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="419"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="508"/> <source>Edit</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="440"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="439"/> <source>Crypt</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="450"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="449"/> <source>Keys</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="451"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="450"/> <source>Import Key</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="467"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="466"/> <source>View</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="469"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="468"/> <source>Help</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="499"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="498"/> <source>Operations</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="509"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="503"/> <source>Key</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="522"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="516"/> <source>Special Edit</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="536"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="530"/> <source>Import key from...</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="537"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="531"/> <source>Import key</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="553"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="547"/> <source>Ready</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="560"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="554"/> <source>Key ToolBox</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="568"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="562"/> <source>Default</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="575"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="569"/> <source>Favourite</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="582"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="576"/> <source>Only Public Key</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="589"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="583"/> <source>Has Private Key</source> <translation type="unfinished"></translation> </message> @@ -5333,89 +5332,89 @@ If the issue persists, consider seeking technical support or consulting the docu </message> <message> <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="84"/> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="195"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="192"/> <source>Enable Auto Activate</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="144"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="141"/> <source>BASIC INFO</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="146"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="143"/> <source>ID</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="148"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="145"/> <source>Version</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="150"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="147"/> <source>SDK Version</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="152"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="149"/> <source>Qt ENV Version</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="154"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="151"/> <source>Hash</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="155"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="152"/> <source>Path</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="159"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="156"/> <source>Auto Activate</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="160"/> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="162"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="157"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="159"/> <source>True</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="160"/> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="162"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="157"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="159"/> <source>False</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="161"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="158"/> <source>Active</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="166"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="163"/> <source>METADATA</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="182"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="179"/> <source>Listening Event</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="191"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="188"/> <source>Deactivate</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="192"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="189"/> <source>Activate</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="194"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="191"/> <source>Disable Auto Activate</source> <translation type="unfinished"></translation> </message> @@ -5494,42 +5493,42 @@ If the issue persists, consider seeking technical support or consulting the docu <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsNetwork.cpp" line="173"/> + <location filename="../../../../src/ui/dialog/settings/SettingsNetwork.cpp" line="172"/> <source>Test Server Url Accessibility</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsNetwork.cpp" line="174"/> + <location filename="../../../../src/ui/dialog/settings/SettingsNetwork.cpp" line="173"/> <source>Server Url</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsNetwork.cpp" line="184"/> + <location filename="../../../../src/ui/dialog/settings/SettingsNetwork.cpp" line="183"/> <source>Success</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsNetwork.cpp" line="185"/> + <location filename="../../../../src/ui/dialog/settings/SettingsNetwork.cpp" line="184"/> <source>Successfully connect to the target server through the proxy server.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsNetwork.cpp" line="189"/> + <location filename="../../../../src/ui/dialog/settings/SettingsNetwork.cpp" line="188"/> <source>Failed</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsNetwork.cpp" line="190"/> + <location filename="../../../../src/ui/dialog/settings/SettingsNetwork.cpp" line="189"/> <source>Unable to connect to the target server through the proxy server. Proxy settings may be invalid.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsNetwork.cpp" line="200"/> + <location filename="../../../../src/ui/dialog/settings/SettingsNetwork.cpp" line="199"/> <source>Test Proxy Server Connection...</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsNetwork.cpp" line="201"/> + <location filename="../../../../src/ui/dialog/settings/SettingsNetwork.cpp" line="200"/> <source>Is using your proxy settings to access the url. Note that this test operation will apply your proxy settings to the entire software.</source> <translation type="unfinished"></translation> </message> @@ -5713,27 +5712,27 @@ If the issue persists, consider seeking technical support or consulting the docu <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/SignersPicker.cpp" line="52"/> + <location filename="../../../../src/ui/dialog/SignersPicker.cpp" line="53"/> <source>Signers</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/SignersPicker.cpp" line="60"/> + <location filename="../../../../src/ui/dialog/SignersPicker.cpp" line="58"/> <source>Select Signer(s)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/SignersPicker.cpp" line="63"/> + <location filename="../../../../src/ui/dialog/SignersPicker.cpp" line="61"/> <source>Please select one or more private keys you use for signing.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/SignersPicker.cpp" line="64"/> + <location filename="../../../../src/ui/dialog/SignersPicker.cpp" line="62"/> <source>If no key is selected, the default key will be used for signing.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/SignersPicker.cpp" line="74"/> + <location filename="../../../../src/ui/dialog/SignersPicker.cpp" line="72"/> <source>Signers Picker</source> <translation type="unfinished"></translation> </message> @@ -5741,7 +5740,7 @@ If the issue persists, consider seeking technical support or consulting the docu <context> <name>GpgFrontend::UI::SubkeyGenerateDialog</name> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="72"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="82"/> <source>Tipps: if the key pair has a passphrase, the subkey's passphrase must be equal to it.</source> <translation type="unfinished"></translation> </message> @@ -5751,77 +5750,72 @@ If the issue persists, consider seeking technical support or consulting the docu <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="98"/> - <source>Key Usage</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="100"/> - <source>Encryption</source> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="65"/> + <source>Authentication</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="103"/> - <source>Signing</source> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="59"/> + <source>Algorithm</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="106"/> - <source>Certification</source> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="60"/> + <source>Key Length</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="109"/> - <source>Authentication</source> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="61"/> + <source>Expire Date</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="153"/> - <source>Key Type</source> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="62"/> + <source>Usage</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="154"/> - <source>KeySize (in Bit)</source> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="63"/> + <source>Encrypt</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="155"/> - <source>Expiration Date</source> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="64"/> + <source>Sign</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="156"/> - <source>Never Expire</source> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="66"/> + <source>Non Expired</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="157"/> - <source>Non Pass Phrase</source> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="67"/> + <source>No Passphrase</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="167"/> - <source>Basic Information</source> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="183"/> + <source>Please give a valid subkey algorithm.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="280"/> - <source>Expiration time no more than 2 years.</source> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="192"/> + <source>Time to subkey expiration must not be less than 120 seconds.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="295"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="204"/> <source>Generating</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="306"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="215"/> <source>Error</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="307"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="216"/> <source>Unknown error occurred</source> <translation type="unfinished"></translation> </message> @@ -5872,90 +5866,90 @@ If the issue persists, consider seeking technical support or consulting the docu <context> <name>GpgFrontend::UI::TextEdit</name> <message> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="73"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="74"/> <source>Open Directory</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="182"/> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="196"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="183"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="197"/> <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="449"/> <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="486"/> <source>Warning</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="183"/> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="197"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="184"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="198"/> <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="450"/> <source>Cannot read file %1: %2.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="120"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="121"/> <source>Open file</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="83"/> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="91"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="84"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="92"/> <source>Error</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="84"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="85"/> <source>Cannot open this file. Please make sure that this is a regular file and it's readable.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="92"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="93"/> <source>Cannot open this file. The file is TOO LARGE (>1MB) for GpgFrontend Text Editor.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="100"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="101"/> <source>File Open Error</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="101"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="102"/> <source>The file "%1" could not be opened.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="109"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="110"/> <source>Binary File Detected</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="110"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="111"/> <source>The file "%1" appears to be a binary file and will not be opened.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="232"/> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="248"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="233"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="249"/> <source>Save file</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="309"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="310"/> <source>Unsaved document</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="310"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="311"/> <source>The document "%1" has been modified. Do you want to save your changes?</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="313"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="314"/> <source>Note:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="314"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="315"/> <source>If you don't save these files, all changes are lost.</source> <translation type="unfinished"></translation> </message> @@ -6021,9 +6015,9 @@ If the issue persists, consider seeking technical support or consulting the docu <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/TextEditTabWidget.cpp" line="254"/> - <location filename="../../../../src/ui/widgets/TextEditTabWidget.cpp" line="268"/> - <location filename="../../../../src/ui/widgets/TextEditTabWidget.cpp" line="284"/> + <location filename="../../../../src/ui/widgets/TextEditTabWidget.cpp" line="251"/> + <location filename="../../../../src/ui/widgets/TextEditTabWidget.cpp" line="265"/> + <location filename="../../../../src/ui/widgets/TextEditTabWidget.cpp" line="281"/> <source>untitled</source> <translation type="unfinished"></translation> </message> @@ -6073,154 +6067,154 @@ If the issue persists, consider seeking technical support or consulting the docu <context> <name>GpgFrontend::UI::VerifyKeyDetailBox</name> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="57"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="56"/> <source>Import from keyserver</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="62"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="61"/> <source>Key not present with id 0x</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="66"/> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="91"/> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="106"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="65"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="90"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="105"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="120"/> <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="121"/> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="122"/> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="137"/> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="152"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="136"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="151"/> <source>Status</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="66"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="65"/> <source>:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="68"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="67"/> <source>Key not present in key list</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="76"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="75"/> <source>A Signature</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="81"/> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="96"/> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="111"/> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="127"/> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="142"/> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="157"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="80"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="95"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="110"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="126"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="141"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="156"/> <source>Key Information is NOT Available</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="83"/> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="98"/> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="113"/> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="129"/> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="144"/> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="159"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="82"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="97"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="112"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="128"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="143"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="158"/> <source>Fingerprint</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="91"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="90"/> <source>Cert Revoked</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="106"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="105"/> <source>Signature Expired</source> <translation type="unfinished"></translation> </message> <message> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="120"/> <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="121"/> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="122"/> <source>Key Expired</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="137"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="136"/> <source>General Error</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="152"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="151"/> <source>Unknown Error </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="182"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="181"/> <source>Signer Name</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="183"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="182"/> <source>Signer Email</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="184"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="183"/> <source>Key's Fingerprint</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="185"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="184"/> <source>Valid</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="186"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="185"/> <source>Flags</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="193"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="192"/> <source>Fully Valid</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="195"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="194"/> <source>NOT Fully Valid</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="202"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="201"/> <source>Good</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="205"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="204"/> <source>Bad</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="208"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="207"/> <source>Expired</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="211"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="210"/> <source>Missing Key</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="214"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="213"/> <source>Revoked Key</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="217"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="216"/> <source>Expired Key</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="220"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="219"/> <source>Missing CRL</source> <translation type="unfinished"></translation> </message> @@ -6228,7 +6222,7 @@ If the issue persists, consider seeking technical support or consulting the docu <context> <name>GpgFrontend::UI::Wizard</name> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="43"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="45"/> <source>First Start Wizard</source> <translation type="unfinished"></translation> </message> @@ -6236,32 +6230,32 @@ If the issue persists, consider seeking technical support or consulting the docu <context> <name>GpgKey</name> <message> - <location filename="../../../../src/core/model/GpgKey.cpp" line="91"/> + <location filename="../../../../src/core/model/GpgKey.cpp" line="89"/> <source>Unknown</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/core/model/GpgKey.cpp" line="93"/> + <location filename="../../../../src/core/model/GpgKey.cpp" line="91"/> <source>Undefined</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/core/model/GpgKey.cpp" line="95"/> + <location filename="../../../../src/core/model/GpgKey.cpp" line="93"/> <source>Never</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/core/model/GpgKey.cpp" line="97"/> + <location filename="../../../../src/core/model/GpgKey.cpp" line="95"/> <source>Marginal</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/core/model/GpgKey.cpp" line="99"/> + <location filename="../../../../src/core/model/GpgKey.cpp" line="97"/> <source>Full</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/core/model/GpgKey.cpp" line="101"/> + <location filename="../../../../src/core/model/GpgKey.cpp" line="99"/> <source>Ultimate</source> <translation type="unfinished"></translation> </message> @@ -6332,57 +6326,57 @@ If the issue persists, consider seeking technical support or consulting the docu <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="67"/> - <source>Show Verify Details</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="75"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="64"/> <source>Public key not found locally</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="76"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="65"/> <source>There is no target public key content in local for GpgFrontend to gather enough information about this Signature. Do you want to import the public key from Keyserver now?</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="578"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="555"/> <source>Sync All Public Key</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="579"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="556"/> <source>You have not checked any public keys that you want to synchronize, do you want to synchronize all local public keys from the key server?</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/core/GpgCoreInit.cpp" line="398"/> + <location filename="../../../../src/core/GpgCoreInit.cpp" line="422"/> <source>Cannot Find GpgConf</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/core/GpgCoreInit.cpp" line="406"/> + <location filename="../../../../src/core/GpgCoreInit.cpp" line="430"/> <source>Cannot Find GnuPG</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/core/GpgCoreInit.cpp" line="421"/> - <source>Cannot Find Home Path</source> + <location filename="../../../../src/core/GpgCoreInit.cpp" line="405"/> + <source>Cannot get Infos from GpgConf</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/core/GpgCoreInit.cpp" line="445"/> + <source>Cannot Find Default Home Path</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/core/GpgCoreInit.cpp" line="473"/> + <location filename="../../../../src/core/GpgCoreInit.cpp" line="471"/> <source>GpgME Initiation Failed</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/core/GpgCoreInit.cpp" line="547"/> + <location filename="../../../../src/core/GpgCoreInit.cpp" line="545"/> <source>GpgME Default Context Initiation Failed</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/core/GpgCoreInit.cpp" line="558"/> + <location filename="../../../../src/core/GpgCoreInit.cpp" line="556"/> <source>Gpg Default Key Database Initiation Failed</source> <translation type="unfinished"></translation> </message> diff --git a/resource/lfs/locale/ts/GpgFrontend.fr_FR.ts b/resource/lfs/locale/ts/GpgFrontend.fr_FR.ts index 8c3d3733..9824085e 100644 --- a/resource/lfs/locale/ts/GpgFrontend.fr_FR.ts +++ b/resource/lfs/locale/ts/GpgFrontend.fr_FR.ts @@ -137,57 +137,57 @@ <context> <name>GpgFrontend::GpgKeyTableModel</name> <message> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="42"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="40"/> <source>Select</source> <translation type="unfinished">Sélectionner</translation> </message> <message> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="42"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="40"/> <source>Type</source> <translation type="unfinished">Taper</translation> </message> <message> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="42"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="40"/> <source>Name</source> <translation type="unfinished">Nom</translation> </message> <message> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="43"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="41"/> <source>Email Address</source> <translation type="unfinished">Adresse e-mail</translation> </message> <message> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="43"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="41"/> <source>Usage</source> <translation type="unfinished">Usage</translation> </message> <message> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="43"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="41"/> <source>Trust</source> <translation type="unfinished">Confiance</translation> </message> <message> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="44"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="42"/> <source>Key ID</source> <translation type="unfinished">Identifiant de clé</translation> </message> <message> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="44"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="42"/> <source>Create Date</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="44"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="42"/> <source>Algorithm</source> <translation type="unfinished">Algorithme</translation> </message> <message> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="45"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="43"/> <source>Subkey(s)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="45"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="43"/> <source>Comment</source> <translation type="unfinished">Commentaire</translation> </message> @@ -538,6 +538,14 @@ </message> </context> <context> + <name>GpgFrontend::KeyGenerateInfo</name> + <message> + <location filename="../../../../src/core/model/GpgKeyGenerateInfo.cpp" line="39"/> + <source>None</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> <name>GpgFrontend::Module::GlobalRegisterTable</name> <message> <location filename="../../../../src/core/module/GlobalRegisterTable.cpp" line="47"/> @@ -687,58 +695,58 @@ <context> <name>GpgFrontend::UI::ChoosePage</name> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="107"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="106"/> <source>Choose your action...</source> <translation type="unfinished">Choisissez votre action...</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="108"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="107"/> <source>...by clicking on the appropriate link.</source> <translation type="unfinished">...en cliquant sur le lien approprié.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="111"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="110"/> <source>If you have never used GpgFrontend before and also don't own a gpg key yet you may possibly want to read how to</source> <translation type="unfinished">Si vous n'avez jamais utilisé GpgFrontend auparavant et que vous ne possédez pas encore de clé gpg, vous voudrez peut-être lire comment</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="114"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="113"/> <source>Generate Key</source> <translation type="unfinished">Générer la clé</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="121"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="120"/> <source>If you want to learn how to encrypt, decrypt, sign and verify text, you can read </source> <translation type="unfinished">Si vous voulez apprendre à chiffrer, déchiffrer, signer et vérifier du texte, vous pouvez lire</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="124"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="123"/> <source>Encrypt & Decrypt Text</source> <translation type="unfinished">Chiffrer et déchiffrer le texte</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="124"/> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="136"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="123"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="135"/> <source>or</source> <translation type="unfinished">ou</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="126"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="125"/> <source>Sign & Verify Text</source> <translation type="unfinished">Signer et vérifier le texte</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="134"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="133"/> <source>If you want to operate file, you can read </source> <translation type="unfinished">Si vous voulez utiliser le fichier, vous pouvez lire</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="136"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="135"/> <source>Encrypt & Sign File</source> <translation type="unfinished">Chiffrer et signer le fichier</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="138"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="137"/> <source>Sign & Verify File</source> <translation type="unfinished">Signer et vérifier le fichier</translation> </message> @@ -746,39 +754,39 @@ <context> <name>GpgFrontend::UI::CommonUtils</name> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="481"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="419"/> <source>Timeout</source> <translation type="unfinished">Temps libre</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="224"/> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="356"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="162"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="294"/> <source>Success</source> <translation type="unfinished">Succès</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="159"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="119"/> <source>Failed to Load GnuPG Context</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="161"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="121"/> <source>It seems that GnuPG (gpg) is not properly installed. Please refer to the <a href='https://www.gpgfrontend.bktus.com/overview/faq/#troubleshooting-gnupg-installation-issues'>FAQ</a> for instructions on fixing the installation. After resolving the issue, relaunch GpgFrontend.<br /><br />Alternatively, you can open the GnuPG Controller to configure a custom GnuPG installation for GpgFrontend to use. Once set, GpgFrontend will restart automatically.<br /><br />Details: %1</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="225"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="163"/> <source>Gpg Operation succeed.</source> <translation type="unfinished">Opération Gpg réussie.</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="235"/> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="348"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="173"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="286"/> <source>Failure</source> <translation type="unfinished">Échec</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="236"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="174"/> <source>Gpg Operation failed. Error code: %1 @@ -791,101 +799,101 @@ Source : %2 Description : %3</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="263"/> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="270"/> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="538"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="201"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="208"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="476"/> <source>Error</source> <translation type="unfinished">Erreur</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="255"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="193"/> <source>Open Key</source> <translation type="unfinished">Ouvrir la clé</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="256"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="194"/> <source>Keyring files</source> <translation type="unfinished">Fichiers de porte-clés</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="264"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="202"/> <source>Cannot open this file. Please make sure that this is a regular file and it's readable.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="271"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="209"/> <source>The target file is too large for a keyring.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="277"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="215"/> <source>File Open Failed</source> <translation type="unfinished">L'ouverture du fichier a échoué</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="278"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="216"/> <source>Failed to open file: </source> <translation type="unfinished">Échec de l'ouverture du fichier:</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="329"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="267"/> <source>Processing</source> <translation type="unfinished">Traitement</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="349"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="287"/> <source>Failed to execute command.</source> <translation type="unfinished">Échec de l'exécution de la commande.</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="357"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="295"/> <source>Succeed in executing command.</source> <translation type="unfinished">Réussir l'exécution de la commande.</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="359"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="297"/> <source>Warning</source> <translation type="unfinished">Avertissement</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="360"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="298"/> <source>Finished executing command.</source> <translation type="unfinished">Exécution de la commande terminée.</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="381"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="319"/> <source>Default Keyserver Not Found</source> <translation type="unfinished">Serveur de clés par défaut introuvable</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="382"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="320"/> <source>Cannot read default keyserver from your settings, please set a default keyserver first</source> <translation type="unfinished">Impossible de lire le serveur de clés par défaut à partir de vos paramètres, veuillez d'abord définir un serveur de clés par défaut</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="478"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="416"/> <source>Key Not Found</source> <translation type="unfinished">Clé introuvable</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="484"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="422"/> <source>Key Server Not Found</source> <translation type="unfinished">Serveur de clé introuvable</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="487"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="425"/> <source>Connection Error</source> <translation type="unfinished">Erreur de connexion</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="426"/> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="498"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="364"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="436"/> <source>The key has been updated</source> <translation type="unfinished">La clé a été mise à jour</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="428"/> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="500"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="366"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="438"/> <source>No need to update the key</source> <translation type="unfinished">Pas besoin de mettre à jour la clé</translation> </message> @@ -893,37 +901,37 @@ Description : %3</translation> <context> <name>GpgFrontend::UI::ConclusionPage</name> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="204"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="203"/> <source>Ready.</source> <translation type="unfinished">Prêt.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="205"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="204"/> <source>Have fun with GpgFrontend!</source> <translation type="unfinished">Amusez-vous avec GpgFrontend !</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="208"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="207"/> <source>You are ready to use GpgFrontend now.<br><br></source> <translation type="unfinished">Vous êtes prêt à utiliser GpgFrontend maintenant.<br><br></translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="210"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="209"/> <source>The Online Document</source> <translation type="unfinished">Le document en ligne</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="211"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="210"/> <source> will get you started with GpgFrontend. Anytime you encounter problems, please try to find help from the documentation</source> <translation type="unfinished"> vous permettra de démarrer avec GpgFrontend. Chaque fois que vous rencontrez des problèmes, veuillez essayer de trouver de l'aide dans la documentation</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="220"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="219"/> <source>Open offline help.</source> <translation type="unfinished">Ouvrez l'aide hors ligne.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="224"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="223"/> <source>Don't show the wizard again.</source> <translation type="unfinished"></translation> </message> @@ -952,8 +960,8 @@ Description : %3</translation> </message> <message> <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="74"/> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="112"/> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="146"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="111"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="145"/> <source>Error</source> <translation type="unfinished">Erreur</translation> </message> @@ -979,82 +987,82 @@ Description : %3</translation> <translation type="unfinished">Veuillez générer un mot de passe pour protéger votre clé avant d'exporter, c'est très important. N'oubliez pas de sauvegarder votre mot de passe dans un endroit sûr.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="113"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="112"/> <source>No key is suitable to export.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="118"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="117"/> <source>Generating</source> <translation type="unfinished">Générateur</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="129"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="128"/> <source>Success</source> <translation type="unfinished">Succès</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="131"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="130"/> <source>The Key Package has been successfully generated and has been protected by encryption algorithms(AES-256-ECB). You can safely transfer your Key Package.</source> <translation type="unfinished">Le package de clé a été généré avec succès et a été protégé par des algorithmes de chiffrement (AES-256-ECB). Vous pouvez transférer votre Key Package en toute sécurité.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="136"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="135"/> <source>But the key file cannot be leaked under any circumstances. Please delete the Key Package and key file as soon as possible after completing the transfer operation.</source> <translation type="unfinished">Mais le fichier de clé ne peut en aucun cas être divulgué. Veuillez supprimer le package de clés et le fichier de clés dès que possible après avoir terminé l'opération de transfert.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="147"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="146"/> <source>An error occurred while exporting the key package.</source> <translation type="unfinished">Une erreur s'est produite lors de l'exportation du package de clés.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="156"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="155"/> <source>Key Package Name</source> <translation type="unfinished">Nom du paquet de clés</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="157"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="156"/> <source>Output Path</source> <translation type="unfinished">Chemin de sortie</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="158"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="157"/> <source>Passphrase</source> <translation type="unfinished">Phrase secrète</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="160"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="159"/> <source>Tips: You can use Key Package to safely and conveniently transfer your public and private keys between devices.</source> <translation type="unfinished">Conseils : vous pouvez utiliser Key Package pour transférer en toute sécurité et facilement vos clés publiques et privées entre les appareils.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="162"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="161"/> <source>Generate and Save Passphrase</source> <translation type="unfinished">Générer et enregistrer la phrase secrète</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="163"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="162"/> <source>Generate Key Package Name</source> <translation type="unfinished">Générer le nom du package de clé</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="164"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="163"/> <source>Select Output Path</source> <translation type="unfinished">Sélectionnez le chemin de sortie</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="167"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="166"/> <source>Include secret key (Think twice before acting)</source> <translation type="unfinished">Inclure la clé secrète (Réfléchissez à deux fois avant d'agir)</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="169"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="168"/> <source>Exclude keys that do not have a private key</source> <translation type="unfinished">Exclure les clés qui n'ont pas de clé privée</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="172"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="171"/> <source>Export As Key Package</source> <translation type="unfinished">Exporter en tant que package clé</translation> </message> @@ -1062,141 +1070,151 @@ Description : %3</translation> <context> <name>GpgFrontend::UI::FilePage</name> <message> - <location filename="../../../../src/ui/widgets/FilePage.cpp" line="63"/> + <location filename="../../../../src/ui/widgets/FilePage.cpp" line="46"/> + <source>Switch Batch Mode</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/widgets/FilePage.cpp" line="66"/> <source>Show Hidden File</source> <translation type="unfinished">Afficher le fichier caché</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FilePage.cpp" line="69"/> + <location filename="../../../../src/ui/widgets/FilePage.cpp" line="72"/> <source>Show System File</source> <translation type="unfinished">Afficher le fichier système</translation> </message> + <message> + <location filename="../../../../src/ui/widgets/FilePage.cpp" line="78"/> + <source>ASCII Mode</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>GpgFrontend::UI::FileTreeView</name> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="88"/> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="101"/> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="159"/> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="204"/> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="225"/> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="266"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="93"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="106"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="164"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="209"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="232"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="279"/> <source>Error</source> <translation type="unfinished">Erreur</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="89"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="94"/> <source>The path is not exists, unprivileged or unreachable.</source> <translation type="unfinished">Le chemin n'existe pas, non privilégié ou inaccessible.</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="102"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="107"/> <source>The file is unprivileged or unreachable.</source> <translation type="unfinished">Le fichier n'est pas privilégié ou inaccessible.</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="152"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="157"/> <source>Warning</source> <translation type="unfinished">Avertissement</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="153"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="158"/> <source>Are you sure you want to delete it?</source> <translation type="unfinished">Es-tu sûr de vouloir le supprimer ?</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="160"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="165"/> <source>Unable to delete the file or folder.</source> <translation type="unfinished">Impossible de supprimer le fichier ou le dossier.</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="169"/> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="182"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="174"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="187"/> <source>Make New Directory</source> <translation type="unfinished">Créer un nouveau dossier</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="170"/> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="183"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="175"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="188"/> <source>Directory Name</source> <translation type="unfinished">Nom du dossier</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="197"/> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="218"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="202"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="225"/> <source>Create Empty File</source> <translation type="unfinished">Créer un fichier vide</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="197"/> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="218"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="202"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="225"/> <source>Filename (you can given extension)</source> <translation type="unfinished">Nom de fichier (vous pouvez donner l'extension)</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="205"/> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="226"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="210"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="233"/> <source>Unable to create the file.</source> <translation type="unfinished">Impossible de créer le fichier.</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="258"/> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="289"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="271"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="303"/> <source>Rename</source> <translation type="unfinished">Renommer</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="258"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="271"/> <source>New Filename</source> <translation type="unfinished">Nouveau nom de fichier</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="267"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="280"/> <source>Unable to rename the file or folder.</source> <translation type="unfinished">Impossible de renommer le fichier ou le dossier.</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="284"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="297"/> <source>Open</source> <translation type="unfinished">Ouvrir</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="294"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="308"/> <source>Delete</source> <translation type="unfinished">Effacer</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="299"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="313"/> <source>Calculate Hash</source> <translation type="unfinished">Calculer le hachage</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="304"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="318"/> <source>Directory</source> <translation type="unfinished">Annuaire</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="309"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="323"/> <source>File</source> <translation type="unfinished">Déposer</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="314"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="328"/> <source>Compress...</source> <translation type="unfinished">Compresse...</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="321"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="335"/> <source>Open with Default System Application</source> <translation type="unfinished">Ouvrir avec l&#39;application système par défaut</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="326"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="340"/> <source>New</source> <translation type="unfinished">Nouveau</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="382"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="402"/> <source>Calculating</source> <translation type="unfinished">Calculer</translation> </message> @@ -1233,68 +1251,63 @@ Description : %3</translation> </message> <message> <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="52"/> - <source>Enable to use longer key expiration date.</source> - <translation type="unfinished">Activer pour utiliser une date d'expiration de clé plus longue.</translation> - </message> - <message> - <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="54"/> <source>Import files dropped on the Key List without confirmation.</source> <translation type="unfinished">Importez des fichiers déposés sur la liste des clés sans confirmation.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="56"/> + <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="54"/> <source>Disable loading of all modules (including integrated modules)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="58"/> + <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="56"/> <source>Language</source> <translation type="unfinished">Langue</translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="60"/> + <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="58"/> <source>NOTE</source> <translation type="unfinished">REMARQUE</translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="60"/> + <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="58"/> <source>: </source> <translation type="unfinished">:</translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="61"/> + <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="59"/> <source>GpgFrontend will restart automatically if you change the language!</source> <translation type="unfinished">GpgFrontend redémarrera automatiquement si vous changez de langue !</translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="63"/> + <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="61"/> <source>Data</source> <translation type="unfinished">Données</translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="65"/> - <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="83"/> + <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="63"/> + <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="81"/> <source>Clear All Log (Total Size: %1)</source> <translation type="unfinished">Effacer tout le journal (taille totale : %1)</translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="68"/> - <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="97"/> + <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="66"/> + <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="95"/> <source>Clear All Data Objects (Total Size: %1)</source> <translation type="unfinished">Effacer tous les objets de données (taille totale : %1)</translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="71"/> + <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="69"/> <source>Reveal in File Explorer</source> <translation type="unfinished">Révéler dans l'explorateur de fichiers</translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="90"/> + <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="88"/> <source>Confirm</source> <translation type="unfinished">Confirmer</translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="91"/> + <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="89"/> <source>Are you sure you want to clear all data objects? This will result in loss of all cached form positions, statuses, key servers, etc.</source> <translation type="unfinished">Voulez-vous vraiment effacer tous les objets de données ? Cela entraînera la perte de toutes les positions de formulaire mises en cache, des statuts, des serveurs de clés, etc.</translation> @@ -1303,150 +1316,182 @@ This will result in loss of all cached form positions, statuses, key servers, et <context> <name>GpgFrontend::UI::GnuPGControllerDialog</name> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="69"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="70"/> <source>General</source> <translation type="unfinished">Général</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="70"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="71"/> <source>Key Database</source> <translation type="unfinished">Base de données de clés</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="71"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="72"/> <source>Advanced</source> <translation type="unfinished">Avancée</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="51"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="52"/> <source>Use Binary Mode for File Operations</source> <translation type="unfinished">Utiliser le mode binaire pour les opérations sur les fichiers</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="53"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="54"/> <source>Use Pinentry as Password Input Dialog</source> <translation type="unfinished">Utiliser Pinentry comme boîte de dialogue de saisie de mot de passe</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="54"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="55"/> <source>Enable GpgME Debug Log</source> <translation type="unfinished">Activer le journal de débogage de GpgME</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="55"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="56"/> <source>Use Custom GnuPG</source> <translation type="unfinished">Utiliser GnuPG personnalisé</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="56"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="57"/> <source>Select GnuPG Path</source> <translation type="unfinished">Sélectionnez le chemin GnuPG</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="76"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="77"/> <source>Name</source> <translation type="unfinished">Nom</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="76"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="77"/> <source>Path</source> <translation type="unfinished">Chemin d'accès</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="363"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="77"/> + <source>Status</source> + <translation type="unfinished">Statut</translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="77"/> + <source>Real Path</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="360"/> <source>Maximum Key Database Limit Reached</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="364"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="361"/> <source>Currently, GpgFrontend supports a maximum of 8 key databases. Please remove an existing database to add a new one.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="375"/> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="605"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="372"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="618"/> <source>Duplicate Key Database Paths</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="376"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="373"/> <source>The newly added key database path duplicates a previously existing one.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="445"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="382"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="629"/> + <source>Invalid Key Database Paths</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="383"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="630"/> + <source>The edited key database path is not a valid path that GpgFrontend can use</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="430"/> + <source>Active</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="430"/> + <source>Inactive</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="458"/> <source>Confirm Deletion</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="446"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="459"/> <source>Are you sure you want to delete the selected key database?</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="584"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="597"/> <source>No Key Database Selected</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="585"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="598"/> <source>Please select a key database to edit.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="606"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="619"/> <source>The edited key database path duplicates a previously existing one.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="58"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="59"/> <source>Restart Gpg Agent on start</source> <translation type="unfinished">Redémarrer l'agent Gpg au démarrage</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="60"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="61"/> <source>Kill all gnupg daemon at close</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="64"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="65"/> <source>Tips: please select a directory where "gpgconf" is located in.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="66"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="67"/> <source>Tips: notice that modify any of these settings will cause an Application restart.</source> <translation type="unfinished">Conseils : notez que la modification de l'un de ces paramètres entraînera un redémarrage de l'application.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="107"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="108"/> <source>Open Directory</source> <translation type="unfinished">Ouvrir le répertoire</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="183"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="184"/> <source>GnuPG Controller</source> <translation type="unfinished">Contrôleur GnuPGName</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="331"/> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="338"/> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="350"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="328"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="335"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="347"/> <source>Illegal GnuPG Path</source> <translation type="unfinished">Chemin GnuPG illégal</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="332"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="329"/> <source>Target GnuPG Path is not an exists readable directory.</source> <translation type="unfinished">Le chemin GnuPG cible n&#39;est pas un répertoire lisible existant.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="339"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="336"/> <source>Target GnuPG Path is not an absolute path.</source> <translation type="unfinished">Le chemin GnuPG cible n&#39;est pas un chemin absolu.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="351"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="348"/> <source>Target GnuPG Path contains no "gpgconf" executable.</source> <translation type="unfinished">Le chemin GnuPG cible ne contient pas d&#39;exécutable &quot;gpgconf&quot;.</translation> </message> @@ -1454,27 +1499,38 @@ This will result in loss of all cached form positions, statuses, key servers, et <context> <name>GpgFrontend::UI::GpgFrontendApplication</name> <message> - <location filename="../../../../src/ui/GpgFrontendApplication.cpp" line="71"/> + <location filename="../../../../src/ui/GpgFrontendApplication.cpp" line="77"/> <source>Standard Exception Thrown</source> <translation type="unfinished">Exception standard levée</translation> </message> <message> - <location filename="../../../../src/ui/GpgFrontendApplication.cpp" line="72"/> + <location filename="../../../../src/ui/GpgFrontendApplication.cpp" line="78"/> <source>Oops, an standard exception was thrown during the running of the program. This is not a serious problem, it may be the negligence of the programmer, please report this problem if you can.</source> <translation type="unfinished">Oups, une exception standard a été levée lors de l'exécution du programme. Ce n'est pas un problème grave, il peut s'agir de la négligence du programmeur, veuillez signaler ce problème si vous le pouvez.</translation> </message> <message> - <location filename="../../../../src/ui/GpgFrontendApplication.cpp" line="80"/> + <location filename="../../../../src/ui/GpgFrontendApplication.cpp" line="86"/> <source>Unhandled Exception Thrown</source> <translation type="unfinished">Exception non gérée levée</translation> </message> <message> - <location filename="../../../../src/ui/GpgFrontendApplication.cpp" line="81"/> + <location filename="../../../../src/ui/GpgFrontendApplication.cpp" line="87"/> <source>Oops, an unhandled exception was thrown during the running of the program. This is not a serious problem, it may be the negligence of the programmer, please report this problem if you can.</source> <translation type="unfinished">Oups, une exception non gérée a été levée lors de l'exécution du programme. Ce n'est pas un problème grave, il peut s'agir de la négligence du programmeur, veuillez signaler ce problème si vous le pouvez.</translation> </message> </context> <context> + <name>GpgFrontend::UI::GpgOperaHelper</name> + <message> + <location filename="../../../../src/ui/function/GpgOperaHelper.cpp" line="97"/> + <location filename="../../../../src/ui/function/GpgOperaHelper.cpp" line="133"/> + <location filename="../../../../src/ui/function/GpgOperaHelper.cpp" line="175"/> + <location filename="../../../../src/ui/function/GpgOperaHelper.cpp" line="213"/> + <source>Critical Error</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> <name>GpgFrontend::UI::InfoBoardWidget</name> <message> <location filename="../../../../src/ui/widgets/InfoBoardWidget.cpp" line="46"/> @@ -1558,42 +1614,42 @@ This will result in loss of all cached form positions, statuses, key servers, et <context> <name>GpgFrontend::UI::IntroPage</name> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="71"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="70"/> <source>Getting Started...</source> <translation type="unfinished">Commencer...</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="72"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="71"/> <source>... with GpgFrontend</source> <translation type="unfinished">... avec GpgFrontend</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="75"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="74"/> <source>Welcome to GpgFrontend for decrypting and signing text or files!</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="77"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="76"/> <source>is a Powerful, Easy-to-Use, Compact, Cross-Platform, and Installation-Free OpenPGP Crypto Tool. </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="79"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="78"/> <source>To get started, be sure to check out the</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="82"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="81"/> <source>by clicking the link, the page will open in your web browser</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="81"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="80"/> <source>Overview</source> <translation type="unfinished">Aperçu</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="91"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="90"/> <source>If it supports the language currently being used in your system, GpgFrontend will automatically set it.</source> <translation type="unfinished">S'il prend en charge la langue actuellement utilisée dans votre système, GpgFrontend la définira automatiquement.</translation> </message> @@ -1601,52 +1657,57 @@ This will result in loss of all cached form positions, statuses, key servers, et <context> <name>GpgFrontend::UI::KeyDatabaseEditDialog</name> <message> - <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="47"/> + <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="50"/> <source>Key Database Name</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="48"/> + <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="51"/> <source>Key Database Path</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="49"/> + <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="52"/> <source>Select A Key Database Path</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="51"/> - <source>Key Database Info</source> + <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="53"/> + <source>Convert to Relative Path</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="55"/> + <source>Key Database Info</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="59"/> <source>Open Directory</source> <translation type="unfinished">Ouvrir le répertoire</translation> </message> <message> - <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="58"/> + <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="62"/> <source>Illegal GnuPG Key Database Path</source> <translation type="unfinished">Chemin d'accès à la base de données de clés GnuPG illégal</translation> </message> <message> - <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="59"/> + <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="63"/> <source>Target GnuPG Key Database Path is not an exists readable directory.</source> <translation type="unfinished">Le chemin cible de la base de données de clés GnuPG n&#39;est pas un répertoire lisible existant.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="81"/> + <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="85"/> <source>The key database name cannot be empty.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="86"/> + <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="90"/> <source>The key database path cannot be empty.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="92"/> + <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="96"/> <source>A key database with the name '%1' already exists. Please choose a different name.</source> <translation type="unfinished"></translation> </message> @@ -1680,144 +1741,250 @@ This will result in loss of all cached form positions, statuses, key servers, et </message> </context> <context> - <name>GpgFrontend::UI::KeyGenDialog</name> + <name>GpgFrontend::UI::KeyGenPage</name> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="66"/> - <source>Generate Key</source> - <translation type="unfinished">Générer la clé</translation> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="163"/> + <source>Create a keypair...</source> + <translation type="unfinished">Créer une paire de clés...</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="100"/> - <source>Name must contain at least five characters.</source> - <translation type="unfinished">Le nom doit contenir au moins cinq caractères.</translation> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="164"/> + <source>...for decrypting and signing messages</source> + <translation type="unfinished">...pour déchiffrer et signer des messages</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="105"/> - <source>Please give a email address.</source> - <translation type="unfinished">Veuillez indiquer une adresse e-mail.</translation> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="166"/> + <source>You should create a new keypair.The pair consists of a public and a private key.<br>Other users can use the public key to encrypt messages for you and verify messages signed by you.You can use the private key to decrypt and sign messages.<br>For more information have a look at the offline tutorial (which then is shown in the main window):</source> + <translation type="unfinished">Vous devez créer une nouvelle paire de clés. La paire se compose d'une clé publique et d'une clé privée.<br>Les autres utilisateurs peuvent utiliser la clé publique pour chiffrer les messages pour vous et vérifier les messages signés par vous.Vous pouvez utiliser la clé privée pour déchiffrer et signer messages.<br>Pour plus d'informations, consultez le didacticiel hors ligne (qui s'affiche ensuite dans la fenêtre principale) :</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="113"/> - <source>Expiration time too long.</source> - <translation type="unfinished">Délai d'expiration trop long.</translation> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="178"/> + <source>Offline tutorial</source> + <translation type="unfinished">Tutoriel hors ligne</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="158"/> - <source>Generating</source> - <translation type="unfinished">Générateur</translation> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="182"/> + <source>Create New Key</source> + <translation type="unfinished">Créer une nouvelle clé</translation> </message> +</context> +<context> + <name>GpgFrontend::UI::KeyGenerateDialog</name> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="169"/> - <source>Error</source> - <translation type="unfinished">Erreur</translation> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="63"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="70"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="578"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="584"/> + <source>Custom</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="170"/> - <source>Unknown error occurred</source> - <translation type="unfinished">Une erreur inconnue s'est produite</translation> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="71"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="527"/> + <source>3 Months</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="206"/> - <source>Key Usage</source> - <translation type="unfinished">Utilisation des clés</translation> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="72"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="532"/> + <source>6 Months</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="208"/> - <source>Encryption</source> - <translation type="unfinished">Chiffrement</translation> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="73"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="537"/> + <source>1 Year</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="211"/> - <source>Signing</source> - <translation type="unfinished">Signature</translation> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="74"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="139"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="144"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="542"/> + <source>2 Years</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="214"/> - <source>Certification</source> - <translation type="unfinished">Attestation</translation> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="75"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="547"/> + <source>5 Years</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="217"/> - <source>Authentication</source> - <translation type="unfinished">Authentification</translation> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="76"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="552"/> + <source>10 Years</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="455"/> - <source>Key Database</source> - <translation type="unfinished">Base de données de clés</translation> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="77"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="100"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="109"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="558"/> + <source>Non Expired</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="456"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="81"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="290"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="589"/> + <source>Primary Key Only</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="82"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="338"/> + <source>Primary Key With Subkey</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="85"/> <source>Name</source> <translation type="unfinished">Nom</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="457"/> - <source>Email Address</source> - <translation type="unfinished">Adresse e-mail</translation> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="86"/> + <source>Email</source> + <translation type="unfinished">E-mail</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="458"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="87"/> <source>Comment</source> <translation type="unfinished">Commentaire</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="459"/> - <source>Expiration Date</source> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="88"/> + <source>Key Database</source> + <translation type="unfinished">Base de données de clés</translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="89"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="92"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="102"/> + <source>Algorithm</source> + <translation type="unfinished">Algorithme</translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="90"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="93"/> + <source>Validity Period</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="94"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="104"/> + <source>Key Length</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="95"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="105"/> + <source>Usage</source> + <translation type="unfinished">Usage</translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="96"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="106"/> + <source>Encrypt</source> + <translation type="unfinished">Chiffrer</translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="97"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="107"/> + <source>Sign</source> + <translation type="unfinished">Signer</translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="98"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="108"/> + <source>Authentication</source> + <translation type="unfinished">Authentification</translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="99"/> + <source>No Passphrase</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="103"/> + <source>Expire Date</source> <translation type="unfinished">Date d'expiration</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="460"/> - <source>Never Expire</source> - <translation type="unfinished">N'expire jamais</translation> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="112"/> + <source>Easy Mode</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="113"/> + <source>Primary Key</source> + <translation type="unfinished">Clé primaire</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="461"/> - <source>KeySize (in Bit)</source> - <translation type="unfinished">Taille de clé (en bits)</translation> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="114"/> + <source>Subkey</source> + <translation type="unfinished">Sous-clé</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="462"/> - <source>Key Type</source> - <translation type="unfinished">Type de clé</translation> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="117"/> + <source>Generate</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="463"/> - <source>Non Pass Phrase</source> - <translation type="unfinished">Sans phrase secrète</translation> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="134"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="261"/> + <source>None</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="477"/> - <source>Basic Information</source> - <translation type="unfinished">Informations de base</translation> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="146"/> + <source>Generate Key</source> + <translation type="unfinished">Générer la clé</translation> </message> -</context> -<context> - <name>GpgFrontend::UI::KeyGenPage</name> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="164"/> - <source>Create a keypair...</source> - <translation type="unfinished">Créer une paire de clés...</translation> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="156"/> + <source>Name must contain at least five characters.</source> + <translation type="unfinished">Le nom doit contenir au moins cinq caractères.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="165"/> - <source>...for decrypting and signing messages</source> - <translation type="unfinished">...pour déchiffrer et signer des messages</translation> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="161"/> + <source>Please give a valid email address.</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="167"/> - <source>You should create a new keypair.The pair consists of a public and a private key.<br>Other users can use the public key to encrypt messages for you and verify messages signed by you.You can use the private key to decrypt and sign messages.<br>For more information have a look at the offline tutorial (which then is shown in the main window):</source> - <translation type="unfinished">Vous devez créer une nouvelle paire de clés. La paire se compose d'une clé publique et d'une clé privée.<br>Les autres utilisateurs peuvent utiliser la clé publique pour chiffrer les messages pour vous et vérifier les messages signés par vous.Vous pouvez utiliser la clé privée pour déchiffrer et signer messages.<br>Pour plus d'informations, consultez le didacticiel hors ligne (qui s'affiche ensuite dans la fenêtre principale) :</translation> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="166"/> + <source>Please give a valid primary key algorithm.</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="179"/> - <source>Offline tutorial</source> - <translation type="unfinished">Tutoriel hors ligne</translation> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="175"/> + <source>Time to primary key expiration must not be less than 120 seconds.</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="183"/> - <source>Create New Key</source> - <translation type="unfinished">Créer une nouvelle clé</translation> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="182"/> + <source>Please give a valid subkey algorithm.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="190"/> + <source>Time to subkey expiration must not be less than 120 seconds.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="617"/> + <source>Error</source> + <translation type="unfinished">Erreur</translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="618"/> + <source>Unknown error occurred</source> + <translation type="unfinished">Une erreur inconnue s'est produite</translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="630"/> + <source>Generating</source> + <translation type="unfinished">Générateur</translation> </message> </context> <context> @@ -1937,122 +2104,132 @@ This will result in loss of all cached form positions, statuses, key servers, et <context> <name>GpgFrontend::UI::KeyList</name> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="254"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="250"/> <source>Refresh</source> <translation type="unfinished">Rafraîchir</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="256"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="252"/> <source>Refresh the key list to synchronize changes.</source> <translation type="unfinished">Actualisez la liste des clés pour synchroniser les modifications.</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="257"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="253"/> <source>Sync Public Key</source> <translation type="unfinished">Synchroniser la clé publique</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="259"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="255"/> <source>Sync public key with your default keyserver.</source> <translation type="unfinished">Synchronisez la clé publique avec votre serveur de clés par défaut.</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="260"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="256"/> <source>Uncheck ALL</source> <translation type="unfinished">Décocher tout</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="262"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="258"/> <source>Cancel all checked items in the current tab at once.</source> <translation type="unfinished">Annuler tous les éléments cochés dans l'onglet actuel en une fois.</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="263"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="259"/> <source>Check ALL</source> <translation type="unfinished">Vérifie tout</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="265"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="261"/> <source>Check all items in the current tab at once</source> <translation type="unfinished">Vérifier tous les éléments de l'onglet actuel en une fois</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="266"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="262"/> <source>Search for keys...</source> <translation type="unfinished">Rechercher des clés...</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="108"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="106"/> <source>Key ID</source> <translation type="unfinished">Identifiant de clé</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="119"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="117"/> <source>Algorithm</source> <translation type="unfinished">Algorithme</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="130"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="128"/> <source>Owner Trust</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="142"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="140"/> <source>Create Date</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="154"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="152"/> <source>Subkey(s)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="168"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="166"/> <source>Comment</source> <translation type="unfinished">Commentaire</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="300"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="296"/> <source>Refreshing Key List...</source> <translation type="unfinished">Actualisation de la liste des clés...</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="477"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="473"/> <source>Import Keys</source> <translation type="unfinished">Importer des clés</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="479"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="475"/> <source>You've dropped something on the table.</source> <translation type="unfinished">Vous avez fait tomber quelque chose sur la table.</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="480"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="476"/> <source>GpgFrontend will now try to import key(s).</source> <translation type="unfinished">GpgFrontend va maintenant essayer d'importer des clés.</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="483"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="479"/> <source>Always import without bothering.</source> <translation type="unfinished">Importez toujours sans vous soucier.</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="305"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="645"/> + <source>Error</source> + <translation type="unfinished">Erreur</translation> + </message> + <message> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="645"/> + <source>Key Not Found.</source> + <translation type="unfinished">Clé introuvable.</translation> + </message> + <message> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="301"/> <source>Key List Refreshed.</source> <translation type="unfinished">Liste des clés actualisée.</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="600"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="577"/> <source>Syncing Key List...</source> <translation type="unfinished">Synchronisation de la liste des clés...</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="609"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="586"/> <source>Sync [%1/%2] %3 %4</source> <translation type="unfinished">Synchronisation [%1/%2] %3 %4</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="619"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="596"/> <source>Key List Sync Done.</source> <translation type="unfinished">Synchronisation de la liste des clés terminée.</translation> </message> @@ -2060,368 +2237,354 @@ This will result in loss of all cached form positions, statuses, key servers, et <context> <name>GpgFrontend::UI::KeyMgmt</name> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="58"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="59"/> <source>All</source> <translation type="unfinished">Tous</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="63"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="64"/> <source>Only Public Key</source> <translation type="unfinished">Clé publique uniquement</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="70"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="71"/> <source>Has Private Key</source> <translation type="unfinished">Possède une clé privée</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="77"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="78"/> <source>No Primary Key</source> <translation type="unfinished">Pas de clé primaire</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="86"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="87"/> <source>Revoked</source> <translation type="unfinished">Révoqué</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="93"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="94"/> <source>Expired</source> <translation type="unfinished">Expiré</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="117"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="114"/> <source>KeyPair Management</source> <translation type="unfinished">Gestion des paires de clés</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="138"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="135"/> <source>Open</source> <translation type="unfinished">Ouvrir</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="140"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="137"/> <source>Open Key File</source> <translation type="unfinished">Ouvrir le fichier clé</translation> </message> <message> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="143"/> <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="146"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="149"/> <source>Close</source> <translation type="unfinished">proche</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="152"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="149"/> <source>New Keypair</source> <translation type="unfinished">Nouvelle paire de clés</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="155"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="152"/> <source>Generate KeyPair</source> <translation type="unfinished">Générer une paire de clés</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="159"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="156"/> <source>New Subkey</source> <translation type="unfinished">Nouvelle sous-clé</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="163"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="160"/> <source>Generate Subkey For Selected KeyPair</source> <translation type="unfinished">Générer une sous-clé pour la paire de clés sélectionnée</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="167"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="266"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="164"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="262"/> <source>File</source> <translation type="unfinished">Déposer</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="169"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="166"/> <source>Import New Key From File</source> <translation type="unfinished">Importer une nouvelle clé à partir d'un fichier</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="175"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="172"/> <source>Clipboard</source> <translation type="unfinished">Presse-papiers</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="179"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="176"/> <source>Import New Key From Clipboard</source> <translation type="unfinished">Importer une nouvelle clé du presse-papiers</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="191"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="187"/> <source>Keyserver</source> <translation type="unfinished">Serveur de clés</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="195"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="191"/> <source>Import New Key From Keyserver</source> <translation type="unfinished">Importer une nouvelle clé à partir du serveur de clés</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="202"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="568"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="198"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="543"/> <source>Key Package</source> <translation type="unfinished">Paquet de clés</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="205"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="201"/> <source>Import Key(s) From a Key Package</source> <translation type="unfinished">Importer des clés à partir d'un package de clés</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="209"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="205"/> <source>Export To Clipboard</source> <translation type="unfinished">Exporter vers le presse-papiers</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="213"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="209"/> <source>Export Checked Key(s) To Clipboard</source> <translation type="unfinished">Exporter les clés vérifiées vers le presse-papiers</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="217"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="213"/> <source>Export As Key Package</source> <translation type="unfinished">Exporter en tant que package clé</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="220"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="216"/> <source>Export Checked Key(s) To a Key Package</source> <translation type="unfinished">Exporter les clés vérifiées vers un package de clés</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="224"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="220"/> <source>Export As OpenSSH</source> <translation type="unfinished">Exporter en tant qu'OpenSSH</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="227"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="223"/> <source>Export Checked Key As OpenSSH Format to File</source> <translation type="unfinished">Exporter la clé vérifiée au format OpenSSH vers un fichier</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="231"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="227"/> <source>Delete Selected Key(s)</source> <translation type="unfinished">Supprimer la ou les clés sélectionnées</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="233"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="229"/> <source>Delete the Selected keys</source> <translation type="unfinished">Supprimer les clés sélectionnées</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="237"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="233"/> <source>Delete Checked Key(s)</source> <translation type="unfinished">Supprimer les clés cochées</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="239"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="235"/> <source>Delete the Checked keys</source> <translation type="unfinished">Supprimer les clés cochées</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="244"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="240"/> <source>Show Key Details</source> <translation type="unfinished">Afficher les détails clés</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="246"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="242"/> <source>Show Details for this Key</source> <translation type="unfinished">Afficher les détails de cette clé</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="250"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="252"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="246"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="248"/> <source>Set Owner Trust Level</source> <translation type="unfinished">Définir le niveau de confiance du propriétaire</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="270"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="290"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="266"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="286"/> <source>Key</source> <translation type="unfinished">Clé</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="271"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="267"/> <source>Generate Key</source> <translation type="unfinished">Générer la clé</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="275"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="303"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="271"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="299"/> <source>Import Key</source> <translation type="unfinished">Importer la clé</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="281"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="311"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="312"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="277"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="307"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="308"/> <source>Export Key</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="302"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="298"/> <source>Import key</source> <translation type="unfinished">Importer la clé</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="347"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="343"/> <source>Deleting Keys</source> <translation type="unfinished">Suppression de clés</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="348"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="344"/> <source>Are you sure that you want to delete the following keys?</source> <translation type="unfinished">Êtes-vous sûr de vouloir supprimer les clés suivantes ?</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="350"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="346"/> <source>The action can not be undone.</source> <translation type="unfinished">L'action ne peut pas être annulée.</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="368"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="431"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="443"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="473"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="522"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="533"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="546"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="577"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="585"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="601"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="609"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="625"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="418"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="430"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="497"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="508"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="521"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="552"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="560"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="576"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="584"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="600"/> <source>Error</source> <translation type="unfinished">Erreur</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="368"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="473"/> - <source>Key Not Found.</source> - <translation type="unfinished">Clé introuvable.</translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="379"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="393"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="493"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="499"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="367"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="381"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="469"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="475"/> <source>Forbidden</source> <translation type="unfinished">Interdit</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="380"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="394"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="368"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="382"/> <source>Please check some keys before doing this operation.</source> <translation type="unfinished">Veuillez vérifier certaines touches avant de faire cette opération.</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="386"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="560"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="374"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="535"/> <source>key(s) exported</source> <translation type="unfinished">clé(s) exportée(s)</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="421"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="512"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="408"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="487"/> <source>Exporting</source> <translation type="unfinished">Exportation</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="432"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="444"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="523"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="534"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="419"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="431"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="498"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="509"/> <source>Unknown error occurred</source> <translation type="unfinished">Une erreur inconnue s'est produite</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="465"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="477"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="453"/> <source>Invalid Operation</source> <translation type="unfinished">Opération invalide</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="466"/> - <source>Please select one KeyPair before doing this operation.</source> - <translation type="unfinished">Veuillez sélectionner une KeyPair avant de faire cette opération.</translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="478"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="454"/> <source>If a key pair does not have a private key then it will not be able to generate sub-keys.</source> <translation type="unfinished">Si une paire de clés n'a pas de clé privée, elle ne pourra pas générer de sous-clés.</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="494"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="470"/> <source>Please check a key before performing this operation.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="500"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="476"/> <source>This operation accepts just a single key.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="547"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="522"/> <source>This key may not be able to export as OpenSSH format. Please check the key-size of the subkey(s) used to sign.</source> <translation type="unfinished">Cette clé peut ne pas être en mesure d'exporter au format OpenSSH. Veuillez vérifier la taille de la ou des sous-clés utilisées pour signer.</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="555"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="530"/> <source>Export OpenSSH Key To File</source> <translation type="unfinished">Exporter la clé OpenSSH vers un fichier</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="556"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="531"/> <source>OpenSSH Public Key Files</source> <translation type="unfinished">Fichiers de clé publique OpenSSH</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="568"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="543"/> <source>Import Key Package</source> <translation type="unfinished">Importer le paquet de clés</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="578"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="602"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="553"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="577"/> <source>Cannot open this file. Please make sure that this is a regular file and it's readable.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="586"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="561"/> <source>The target file is too large for a key package.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="591"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="566"/> <source>Import Key Package Passphrase File</source> <translation type="unfinished">Importer le fichier de mot de passe du package de clés</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="592"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="567"/> <source>Key Package Passphrase File</source> <translation type="unfinished">Fichier de mot de passe du package de clé</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="610"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="585"/> <source>The target file is too large for a key package passphrase.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="615"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="590"/> <source>Importing</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="632"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="607"/> <source>key(s) imported</source> <translation type="unfinished">clé(s) importée(s)</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="626"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="601"/> <source>An error occur in importing key package.</source> <translation type="unfinished">Une erreur s'est produite lors de l'importation du package de clés.</translation> </message> @@ -2627,7 +2790,7 @@ This will result in loss of all cached form positions, statuses, key servers, et <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairDetailTab.cpp" line="350"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairDetailTab.cpp" line="344"/> <source>Notice: The public key has been published on keys.openpgp.org.</source> <translation type="unfinished"></translation> </message> @@ -2635,204 +2798,204 @@ This will result in loss of all cached form positions, statuses, key servers, et <context> <name>GpgFrontend::UI::KeyPairOperaTab</name> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="62"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="61"/> <source>General Operations</source> <translation type="unfinished">Opérations générales</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="68"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="67"/> <source>Export Public Key</source> <translation type="unfinished">Exporter la clé publique</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="74"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="73"/> <source>Export Private Key</source> <translation type="unfinished">Exporter la clé privée</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="81"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="80"/> <source>Modify Expiration Datetime (Primary Key)</source> <translation type="unfinished">Modifier la date d'expiration (clé principale)</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="84"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="83"/> <source>Modify Password</source> <translation type="unfinished">Modifier le mot de passe</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="208"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="207"/> <source>Generate Revoke Certificate</source> <translation type="unfinished">Générer un certificat de révocation</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="125"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="124"/> <source>Modify TOFU Policy</source> <translation type="unfinished">Modifier la politique TOFU</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="101"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="100"/> <source>Key Server Operations</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="109"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="689"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="108"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="687"/> <source>Import A Paper Key</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="119"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="118"/> <source>Revoke Certificate Operation</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="132"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="131"/> <source>Set Owner Trust Level</source> <translation type="unfinished">Définir le niveau de confiance du propriétaire</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="179"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="178"/> <source>Export Full Secret Key</source> <translation type="unfinished">Exporter la clé secrète complète</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="185"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="184"/> <source>Export Shortest Secret Key</source> <translation type="unfinished">Exporter la clé secrète la plus courte</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="213"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="212"/> <source>Import Revoke Certificate</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="242"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="291"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="342"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="635"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="241"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="290"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="341"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="633"/> <source>Export Key To File</source> <translation type="unfinished">Exporter la clé vers un fichier</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="243"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="292"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="343"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="636"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="242"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="291"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="342"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="634"/> <source>Key Files</source> <translation type="unfinished">Fichiers clés</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="248"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="297"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="348"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="659"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="247"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="296"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="347"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="657"/> <source>Export Error</source> <translation type="unfinished">Erreur d'exportation</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="249"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="298"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="349"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="660"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="248"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="297"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="348"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="658"/> <source>Couldn't open %1 for writing</source> <translation type="unfinished">Impossible d'ouvrir %1 pour l'écriture</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="196"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="195"/> <source>Export Secret Key As A Paper Key</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="256"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="307"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="596"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="255"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="306"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="594"/> <source>WARNING: You are about to export your</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="257"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="308"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="597"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="256"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="307"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="595"/> <source>PRIVATE KEY</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="258"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="598"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="257"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="596"/> <source>This is NOT your Public Key, so <b>DO NOT</b> share it with anyone.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="261"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="260"/> <source>You are exporting a <b>minimum size</b> private key, which removes all signatures except for the latest self-signatures.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="263"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="262"/> <source>Do you <b>REALLY</b> want to proceed?</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="265"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="264"/> <source>Exporting Short Private Key</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="309"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="308"/> <source>This operation will export your <b>private key</b>, including both the main key and all subkeys, into an external file. This key is extremely sensitive, and anyone with access to it can impersonate you. DO NOT share this file with anyone!</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="315"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="608"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="314"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="606"/> <source>Are you <b>ABSOLUTELY SURE</b> you want to proceed?</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="318"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="317"/> <source>Exporting Private Key</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="390"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="389"/> <source>Key Upload Failed</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="406"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="405"/> <source>The following email addresses have status: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="418"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="417"/> <source>Could not parse status information.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="391"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="390"/> <source>Failed to upload public key to the server. Fingerprint: %1 Error: %2</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="156"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="155"/> <source>Publish Public Key to Key Server</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="164"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="163"/> <source>Refresh Public Key From Key Server</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="423"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="422"/> <source>Public Key Upload Successful</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="424"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="423"/> <source>The public key was successfully uploaded to the key server keys.openpgp.org. Fingerprint: %1 @@ -2843,169 +3006,169 @@ Note: For verification, you can find more information here: https://keys.openpgp <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="458"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="456"/> <source>0 -> No Reason.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="458"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="456"/> <source>1 -> This key is no more safe.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="459"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="457"/> <source>2 -> Key is outdated.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="459"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="457"/> <source>3 -> Key is no longer used</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="466"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="555"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="464"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="553"/> <source>Revocation Certificates</source> <translation type="unfinished">Certificats de révocation</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="477"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="475"/> <source>Generate revocation certificate</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="504"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="513"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="502"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="511"/> <source>Policy Auto</source> <translation type="unfinished">Stratégie automatique</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="504"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="515"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="502"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="513"/> <source>Policy Good</source> <translation type="unfinished">Bonne politique</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="504"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="517"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="502"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="515"/> <source>Policy Bad</source> <translation type="unfinished">Politique incorrecte</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="505"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="519"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="503"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="517"/> <source>Policy Ask</source> <translation type="unfinished">Politique Demander</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="505"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="521"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="503"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="519"/> <source>Policy Unknown</source> <translation type="unfinished">Stratégie inconnue</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="509"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="507"/> <source>Modify TOFU Policy(Default is Auto)</source> <translation type="unfinished">Modifier la politique TOFU (la valeur par défaut est Auto)</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="510"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="508"/> <source>Policy for the Key Pair:</source> <translation type="unfinished">Politique pour la paire de clés :</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="527"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="525"/> <source>Not Successful</source> <translation type="unfinished">Sans succès</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="528"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="526"/> <source>Modify TOFU policy not successfully.</source> <translation type="unfinished">Échec de la modification de la stratégie TOFU.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="542"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="554"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="540"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="552"/> <source>Import Key Revocation Certificate</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="543"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="541"/> <source>You are about to import the</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="544"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="542"/> <source>REVOCATION CERTIFICATE</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="545"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="543"/> <source>A successful import will result in the key being irreversibly revoked.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="547"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="545"/> <source>Do you REALLY want to execute this operation?</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="563"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="572"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="581"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="652"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="698"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="706"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="714"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="732"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="561"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="570"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="579"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="650"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="696"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="704"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="712"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="730"/> <source>Error</source> <translation type="unfinished">Erreur</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="564"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="582"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="699"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="715"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="562"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="580"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="697"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="713"/> <source>Cannot open this file. Please make sure that this is a regular file and it's readable.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="573"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="571"/> <source>The target file is too large for a key revocation certificate.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="601"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="599"/> <source>A <b>PaperKey</b> is a human-readable printout of your private key, which can be used to recover your key if you lose access to your digital copy. </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="605"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="603"/> <source>Keep this paper copy in a safe and secure place, such as a fireproof safe or a trusted vault.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="611"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="609"/> <source>Exporting Private Key as a PaperKey</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="653"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="651"/> <source>An error occurred trying to generate Paper Key.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="690"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="688"/> <source>Paper Key File</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="707"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="705"/> <source>The target file is too large for a paper key keyring.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="733"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="731"/> <source>An error occurred trying to recover the Paper Key back to the private key.</source> <translation type="unfinished"></translation> </message> @@ -3094,7 +3257,7 @@ Note: For verification, you can find more information here: https://keys.openpgp </message> <message> <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="124"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="353"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="351"/> <source>Export Subkey</source> <translation type="unfinished"></translation> </message> @@ -3109,227 +3272,227 @@ Note: For verification, you can find more information here: https://keys.openpgp <translation type="unfinished">Date d'expiration</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="209"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="359"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="208"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="355"/> <source>Primary Key</source> <translation type="unfinished">Clé primaire</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="210"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="359"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="209"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="356"/> <source>Subkey</source> <translation type="unfinished">Sous-clé</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="233"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="232"/> <source>Never Expire</source> <translation type="unfinished">N'expire jamais</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="289"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="288"/> <source>Never Expires</source> <translation type="unfinished">N'expire jamais</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="311"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="310"/> <source>Certificate</source> <translation type="unfinished">Certificat</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="313"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="312"/> <source>Encrypt</source> <translation type="unfinished">Chiffrer</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="314"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="313"/> <source>Sign</source> <translation type="unfinished">Signer</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="315"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="314"/> <source>Auth</source> <translation type="unfinished">Authentification</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="320"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="319"/> <source>Exists</source> <translation type="unfinished">Existe</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="321"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="320"/> <source>Not Exists</source> <translation type="unfinished">N'existe pas</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="324"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="361"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="323"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="358"/> <source>Yes</source> <translation type="unfinished">Oui</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="324"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="361"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="323"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="358"/> <source>No</source> <translation type="unfinished">Non</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="352"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="351"/> <source>Export Primary Key</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="375"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="372"/> <source>Edit Expire Date</source> <translation type="unfinished">Modifier la date d'expiration</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="379"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="376"/> <source>Export</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="383"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="380"/> <source>Delete</source> <translation type="unfinished">Effacer</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="387"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="384"/> <source>Revoke</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="440"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="437"/> <source>Exporting Subkey</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="441"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="438"/> <source>You are about to export a private subkey.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="442"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="439"/> <source>While subkeys are less critical than the primary key, they should still be handled with care.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="445"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="442"/> <source>Do you want to proceed with exporting this subkey?</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="472"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="469"/> <source>Export Key To File</source> <translation type="unfinished">Exporter la clé vers un fichier</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="473"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="470"/> <source>Key Files</source> <translation type="unfinished">Fichiers clés</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="478"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="475"/> <source>Export Error</source> <translation type="unfinished">Erreur d'exportation</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="479"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="476"/> <source>Couldn't open %1 for writing</source> <translation type="unfinished">Impossible d'ouvrir %1 pour l'écriture</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="488"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="485"/> <source><h3>You are about to delete the subkey:</h3><br /><b>KeyID:</b> %1<br /><br />This action is irreversible. Please confirm.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="494"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="491"/> <source>Delete Subkey Confirmation</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="509"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="559"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="506"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="556"/> <source>Illegal Operation</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="510"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="507"/> <source>Cannot delete the primary key or an invalid subkey.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="518"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="515"/> <source>Operation Failed</source> <translation type="unfinished">L'opération a échoué</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="519"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="516"/> <source>The selected subkey could not be deleted. Please check your permissions or try again.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="525"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="522"/> <source>Operation Successful</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="526"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="523"/> <source>The subkey with KeyID %1 has been successfully deleted.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="536"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="533"/> <source><h3>Revoke Subkey Confirmation</h3><br /><b>KeyID:</b> %1<br /><br />Revoking a subkey will make it permanently unusable. This action is <b>irreversible</b>.<br />Are you sure you want to revoke this subkey?</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="543"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="540"/> <source>Revoke Subkey</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="560"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="557"/> <source>Cannot revoke the primary key or an invalid subkey.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="565"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="562"/> <source>0 -> No Reason.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="565"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="562"/> <source>1 -> This key is no more safe.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="566"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="563"/> <source>2 -> Key is outdated.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="566"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="563"/> <source>3 -> Key is no longer used</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="577"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="574"/> <source>Revocation Failed</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="578"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="575"/> <source>Failed to revoke the subkey. Please try again.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="581"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="578"/> <source>Revocation Successful</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="582"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="579"/> <source>The subkey has been successfully revoked.</source> <translation type="unfinished"></translation> </message> @@ -3407,8 +3570,8 @@ Note: For verification, you can find more information here: https://keys.openpgp <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="355"/> <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="481"/> <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="490"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="535"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="564"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="536"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="565"/> <source>Invalid Operation</source> <translation type="unfinished">Opération invalide</translation> </message> @@ -3418,37 +3581,37 @@ Note: For verification, you can find more information here: https://keys.openpgp <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="542"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="543"/> <source><h3>Revoke UID Confirmation</h3><br /><b>UID:</b> %1<br /><br />Revoking a UID will make it permanently unusable. This action is <b>irreversible</b>.<br />Are you sure you want to revoke this UID?</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="570"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="571"/> <source>0 -> No Reason.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="570"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="571"/> <source>4 -> User ID is no longer valid.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="581"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="582"/> <source>Revocation Failed</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="582"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="583"/> <source>Failed to revoke the UID. Please try again.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="585"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="586"/> <source>Revocation Successful</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="586"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="587"/> <source>The UID has been successfully revoked.</source> <translation type="unfinished"></translation> </message> @@ -3479,7 +3642,7 @@ Note: For verification, you can find more information here: https://keys.openpgp </message> <message> <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="356"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="565"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="566"/> <source>Cannot delete the Primary UID.</source> <translation type="unfinished"></translation> </message> @@ -3522,7 +3685,7 @@ Note: For verification, you can find more information here: https://keys.openpgp </message> <message> <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="431"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="549"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="550"/> <source>Revoke UID</source> <translation type="unfinished"></translation> </message> @@ -3532,7 +3695,7 @@ Note: For verification, you can find more information here: https://keys.openpgp <translation type="unfinished">Supprimer l'UID</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="536"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="537"/> <source>Please select one UID before doing this operation.</source> <translation type="unfinished">Veuillez sélectionner un UID avant d'effectuer cette opération.</translation> </message> @@ -3565,139 +3728,139 @@ Note: For verification, you can find more information here: https://keys.openpgp <context> <name>GpgFrontend::UI::KeyServerImportDialog</name> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="57"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="56"/> <source>Close</source> <translation type="unfinished">proche</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="60"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="59"/> <source>Import ALL</source> <translation type="unfinished">Importer TOUT</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="64"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="63"/> <source>Search</source> <translation type="unfinished">Chercher</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="69"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="68"/> <source>Search String</source> <translation type="unfinished">Chaîne de recherche</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="69"/> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="73"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="68"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="72"/> <source>: </source> <translation type="unfinished">:</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="73"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="72"/> <source>Key Server</source> <translation type="unfinished">Serveur de clés</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="114"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="113"/> <source>Import Keys from key server</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="157"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="156"/> <source>UID</source> <translation type="unfinished">UID</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="157"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="156"/> <source>Creation date</source> <translation type="unfinished">Date de création</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="157"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="156"/> <source>KeyID</source> <translation type="unfinished">ID clé</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="157"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="156"/> <source>Tag</source> <translation type="unfinished">Étiqueter</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="180"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="179"/> <source>Text is empty.</source> <translation type="unfinished">Le texte est vide.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="223"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="222"/> <source>Not Key Found</source> <translation type="unfinished">Pas de clé trouvée</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="226"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="225"/> <source>Timeout</source> <translation type="unfinished">Temps libre</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="229"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="228"/> <source>Key Server Not Found</source> <translation type="unfinished">Serveur de clé introuvable</translation> </message> <message> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="231"/> <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="232"/> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="233"/> <source>Connection Error</source> <translation type="unfinished">Erreur de connexion</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="242"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="241"/> <source>Too many responses from keyserver!</source> <translation type="unfinished">Trop de réponses du serveur de clés !</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="254"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="253"/> <source>No keys found, input may be kexId, retrying search with 0x.</source> <translation type="unfinished">Aucune clé trouvée, l'entrée peut être kexId, réessayer la recherche avec 0x.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="264"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="263"/> <source>No keys found containing the search string!</source> <translation type="unfinished">Aucune clé trouvée contenant la chaîne de recherche !</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="271"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="270"/> <source>Insufficiently specific search string!</source> <translation type="unfinished">Chaîne de recherche insuffisamment spécifique !</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="306"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="305"/> <source>revoked</source> <translation type="unfinished">révoqué</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="309"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="308"/> <source>disabled</source> <translation type="unfinished">désactivée</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="354"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="353"/> <source>%1 keys found. Double click a key to import it.</source> <translation type="unfinished">%1 clés trouvées. Double-cliquez sur une clé pour l'importer.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="375"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="374"/> <source>Warning</source> <translation type="unfinished">Avertissement</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="376"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="375"/> <source>Please select one KeyPair before doing this operation.</source> <translation type="unfinished">Veuillez sélectionner une KeyPair avant de faire cette opération.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="423"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="421"/> <source>Key Imported</source> <translation type="unfinished">Clé importée</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="436"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="434"/> <source>Processing ...</source> <translation type="unfinished"></translation> </message> @@ -3705,27 +3868,27 @@ Note: For verification, you can find more information here: https://keys.openpgp <context> <name>GpgFrontend::UI::KeyServerImportTask</name> <message> - <location filename="../../../../src/ui/thread/KeyServerImportTask.cpp" line="78"/> + <location filename="../../../../src/ui/thread/KeyServerImportTask.cpp" line="81"/> <source>Key not found in the Keyserver.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/thread/KeyServerImportTask.cpp" line="81"/> + <location filename="../../../../src/ui/thread/KeyServerImportTask.cpp" line="84"/> <source>Network connection timeout.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/thread/KeyServerImportTask.cpp" line="84"/> + <location filename="../../../../src/ui/thread/KeyServerImportTask.cpp" line="87"/> <source>Cannot resolve the address of target key server.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/thread/KeyServerImportTask.cpp" line="87"/> + <location filename="../../../../src/ui/thread/KeyServerImportTask.cpp" line="90"/> <source>General connection error occurred.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/thread/KeyServerImportTask.cpp" line="96"/> + <location filename="../../../../src/ui/thread/KeyServerImportTask.cpp" line="99"/> <source>Success</source> <translation type="unfinished">Succès</translation> </message> @@ -3753,22 +3916,17 @@ Note: For verification, you can find more information here: https://keys.openpgp <translation type="unfinished">Échec de la mise à jour de la date d'expiration de la paire de clés.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeySetExpireDateDialog.cpp" line="135"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeySetExpireDateDialog.cpp" line="124"/> <source>Modified Expiration Date (Local Time)</source> <translation type="unfinished">Date d'expiration modifiée (heure locale)</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeySetExpireDateDialog.cpp" line="136"/> - <source>Tips: For the sake of security, the key is valid for up to two years. If you are an expert user, please unlock it for a longer time in the settings.</source> - <translation type="unfinished">Conseils : Pour des raisons de sécurité, la clé est valable jusqu'à deux ans. Si vous êtes un utilisateur expert, veuillez le déverrouiller plus longtemps dans les paramètres.</translation> - </message> - <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeySetExpireDateDialog.cpp" line="140"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeySetExpireDateDialog.cpp" line="125"/> <source>No Expiration</source> <translation type="unfinished">Pas d'expiration</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeySetExpireDateDialog.cpp" line="141"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeySetExpireDateDialog.cpp" line="126"/> <source>Modified Expiration Date</source> <translation type="unfinished">Date d'expiration modifiée</translation> </message> @@ -3776,12 +3934,12 @@ Note: For verification, you can find more information here: https://keys.openpgp <context> <name>GpgFrontend::UI::KeyTable</name> <message> - <location filename="../../../../src/ui/widgets/KeyTable.cpp" line="83"/> + <location filename="../../../../src/ui/widgets/KeyTable.cpp" line="84"/> <source>Error</source> <translation type="unfinished">Erreur</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyTable.cpp" line="83"/> + <location filename="../../../../src/ui/widgets/KeyTable.cpp" line="84"/> <source>Key Not Found.</source> <translation type="unfinished">Clé introuvable.</translation> </message> @@ -3804,22 +3962,22 @@ Note: For verification, you can find more information here: https://keys.openpgp <translation type="unfinished">Signer pour les UID de la clé</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyUIDSignDialog.cpp" line="121"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyUIDSignDialog.cpp" line="120"/> <source>Unsuccessful Operation</source> <translation type="unfinished">Opération infructueuse</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyUIDSignDialog.cpp" line="122"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyUIDSignDialog.cpp" line="121"/> <source>Signature operation failed for UID %1</source> <translation type="unfinished">L'opération de signature a échoué pour l'UID %1</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyUIDSignDialog.cpp" line="126"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyUIDSignDialog.cpp" line="125"/> <source>Operation Complete</source> <translation type="unfinished">Opération terminée</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyUIDSignDialog.cpp" line="127"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyUIDSignDialog.cpp" line="126"/> <source>The signature operation of the UID is complete</source> <translation type="unfinished">L'opération de signature de l'UID est terminée</translation> </message> @@ -3827,52 +3985,52 @@ Note: For verification, you can find more information here: https://keys.openpgp <context> <name>GpgFrontend::UI::KeyUploadDialog</name> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="66"/> + <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="65"/> <source>Uploading Public Key</source> <translation type="unfinished">Téléchargement de la clé publique</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="84"/> + <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="83"/> <source>Error</source> <translation type="unfinished">Erreur</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="85"/> + <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="84"/> <source>Unknown error occurred</source> <translation type="unfinished">Une erreur inconnue s'est produite</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="155"/> + <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="154"/> <source>Key Not Found</source> <translation type="unfinished">Clé introuvable</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="158"/> + <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="157"/> <source>Timeout</source> <translation type="unfinished">Temps libre</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="161"/> + <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="160"/> <source>Key Server Not Found</source> <translation type="unfinished">Serveur de clé introuvable</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="164"/> + <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="163"/> <source>Connection Error</source> <translation type="unfinished">Erreur de connexion</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="166"/> + <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="165"/> <source>Upload Failed</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="170"/> + <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="169"/> <source>Upload Success</source> <translation type="unfinished">Télécharger le succès</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="171"/> + <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="170"/> <source>Upload Public Key Successfully</source> <translation type="unfinished">Télécharger la clé publique avec succès</translation> </message> @@ -3986,22 +4144,22 @@ Note: For verification, you can find more information here: https://keys.openpgp <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsKeyServer.cpp" line="245"/> + <location filename="../../../../src/ui/dialog/settings/SettingsKeyServer.cpp" line="244"/> <source>Reachable</source> <translation type="unfinished">Accessible</translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsKeyServer.cpp" line="248"/> + <location filename="../../../../src/ui/dialog/settings/SettingsKeyServer.cpp" line="247"/> <source>Not Reachable</source> <translation type="unfinished">Pas atteignable</translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsKeyServer.cpp" line="260"/> + <location filename="../../../../src/ui/dialog/settings/SettingsKeyServer.cpp" line="259"/> <source>Test Key Server Connection...</source> <translation type="unfinished">Tester la connexion au serveur de clés...</translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsKeyServer.cpp" line="261"/> + <location filename="../../../../src/ui/dialog/settings/SettingsKeyServer.cpp" line="260"/> <source>This test only tests the network connectivity of the key server. Passing the test does not mean that the key server is functionally available.</source> <translation type="unfinished">Ce test teste uniquement la connectivité réseau du serveur de clés. La réussite du test ne signifie pas que le serveur de clés est fonctionnellement disponible.</translation> </message> @@ -4009,329 +4167,154 @@ Note: For verification, you can find more information here: https://keys.openpgp <context> <name>GpgFrontend::UI::MainWindow</name> <message> - <location filename="../../../../src/ui/main_window/MainWindow.cpp" line="156"/> - <location filename="../../../../src/ui/main_window/MainWindow.cpp" line="159"/> + <location filename="../../../../src/ui/main_window/MainWindow.cpp" line="163"/> + <location filename="../../../../src/ui/main_window/MainWindow.cpp" line="166"/> <source>Critical error occur while loading GpgFrontend.</source> <translation type="unfinished">Une erreur critique s'est produite lors du chargement de GpgFrontend.</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindow.cpp" line="158"/> + <location filename="../../../../src/ui/main_window/MainWindow.cpp" line="165"/> <source>Loading Failed</source> <translation type="unfinished">Échec du chargement</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="50"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="75"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="103"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="156"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="176"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="201"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="229"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="282"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="302"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="319"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="336"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="355"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="372"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="389"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="409"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="471"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="492"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="528"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="546"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="571"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="616"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="661"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="690"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="735"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="781"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="810"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="818"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="845"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="910"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="919"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="947"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="988"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="77"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="135"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="202"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="239"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="278"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="320"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="440"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="491"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="111"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="137"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="159"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="177"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="192"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="207"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="224"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="106"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="143"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="522"/> <source>Error</source> <translation type="unfinished">Erreur</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="51"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="177"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="303"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="356"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="410"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="493"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="572"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="691"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="811"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="911"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="989"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="523"/> <source>Cannot read from file: %1</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="64"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="190"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="119"/> <source>The target file %1 already exists, do you need to overwrite it?</source> <translation type="unfinished">Le fichier cible %1 existe déjà, devez-vous l'écraser ?</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="67"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="193"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="310"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="363"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="450"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="623"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="742"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="824"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="925"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="122"/> <source>Warning</source> <translation type="unfinished">Avertissement</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="76"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="202"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="320"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="373"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="617"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="736"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="819"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="920"/> - <source>Cannot write to file: %1</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="85"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="211"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="55"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="50"/> <source>Symmetric Encryption</source> <translation type="unfinished">Chiffrement symétrique</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="86"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="212"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="51"/> <source>No Key Selected. Do you want to encrypt with a symmetric cipher using a passphrase?</source> <translation type="unfinished">Aucune clé sélectionnée. Voulez-vous chiffrer avec un chiffrement symétrique à l'aide d'une phrase secrète ?</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="92"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="64"/> - <source>Symmetrically Encrypting</source> - <translation type="unfinished">Chiffrement symétrique</translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="104"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="157"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="230"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="283"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="337"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="390"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="472"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="547"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="662"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="782"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="846"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="948"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="78"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="136"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="203"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="240"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="279"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="321"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="441"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="492"/> - <source>Unknown error occurred</source> - <translation type="unfinished">Une erreur inconnue s'est produite</translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="135"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="261"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="598"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="717"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="396"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="172"/> <source>Invalid KeyPair</source> <translation type="unfinished">Paire de clés invalide</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="136"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="262"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="599"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="718"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="397"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="60"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="261"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="448"/> <source>The selected keypair cannot be used for encryption.</source> <translation type="unfinished">La paire de clés sélectionnée ne peut pas être utilisée pour le chiffrement.</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="137"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="263"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="600"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="719"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="115"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="181"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="398"/> - <source>For example the Following Key:</source> - <translation type="unfinished">Par exemple la clé suivante :</translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="144"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="123"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="632"/> - <source>Encrypting</source> - <translation type="unfinished">Chiffrement</translation> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="107"/> + <source>Cannot read from the following files: + +%1</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="218"/> - <source>Archiving & Symmetrically Encrypting</source> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="144"/> + <source>Cannot write to the following files: + +%1</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="270"/> - <source>Archiving & Encrypting</source> - <translation type="unfinished"></translation> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="174"/> + <source>For example the Following Key:</source> + <translation type="unfinished">Par exemple la clé suivante :</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="311"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="364"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="624"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="743"/> - <source>The target file already exists, do you need to overwrite it?</source> - <translation type="unfinished">Le fichier cible existe déjà, devez-vous l'écraser ?</translation> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="196"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="323"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="654"/> + <source>Encrypting</source> + <translation type="unfinished">Chiffrement</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="325"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="229"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="231"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="358"/> <source>Decrypting</source> <translation type="unfinished">Déchiffrement</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="378"/> - <source>Decrypting & Extrating</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="424"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="587"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="706"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="163"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="379"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="158"/> <source>No Key Checked</source> <translation type="unfinished">Aucune clé vérifiée</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="425"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="588"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="707"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="164"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="159"/> <source>Please check the key in the key toolbox on the right.</source> <translation type="unfinished">Veuillez vérifier la clé dans la boîte à outils de clé à droite.</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="432"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="112"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="178"/> - <source>Invalid Operation</source> - <translation type="unfinished">Opération invalide</translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="433"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="208"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="369"/> <source>The selected key contains a key that does not actually have a sign usage.</source> <translation type="unfinished">La clé sélectionnée contient une clé qui n'a pas réellement d'utilisation de signe.</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="435"/> - <source>for example the Following Key:</source> - <translation type="unfinished">par exemple la clé suivante :</translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="451"/> - <source>The signature file "%1" exists, do you need to overwrite it?</source> - <translation type="unfinished">Le fichier de signature "%1" existe, devez-vous l'écraser ?</translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="460"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="190"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="703"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="217"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="388"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="721"/> <source>Signing</source> <translation type="unfinished">Signature</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="513"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="414"/> <source>File to be Verified</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="514"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="415"/> <source>Please provide An ABSOLUTE Path If Data And Signature is COMBINED within a single file, KEEP THIS EMPTY: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="529"/> - <source>Please select the appropriate origin file or signature file. Ensure that both are in this directory.</source> - <translation type="unfinished">Veuillez sélectionner le fichier d'origine ou le fichier de signature approprié. Assurez-vous que les deux sont dans ce dossier.</translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="535"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="267"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="307"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="370"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="245"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="434"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="326"/> <source>Verifying</source> <translation type="unfinished">Vérification</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="648"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="425"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="786"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="271"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="478"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="804"/> <source>Encrypting and Signing</source> <translation type="unfinished">Chiffrement et signature</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="767"/> - <source>Archiving & Encrypting & Signing</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="825"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="926"/> - <source>The output file %1 already exists, do you need to overwrite it?</source> - <translation type="unfinished">Le fichier de sortie %1 existe déjà, devez-vous l'écraser ?</translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="834"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="479"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="850"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="285"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="512"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="868"/> <source>Decrypting and Verifying</source> <translation type="unfinished">Déchiffrement et vérification</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="882"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="347"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="533"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="445"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="402"/> <source>Missing Keys</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="883"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="348"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="534"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="446"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="403"/> <source>Some signatures cannot be verified because the corresponding keys are missing. The following fingerprints are missing: @@ -4341,216 +4324,230 @@ Would you like to fetch these keys from the key server?</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="898"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="363"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="548"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="462"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="417"/> <source>Verification Incomplete</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="899"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="364"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="549"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="463"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="418"/> <source>Verification was incomplete due to missing keys. You can manually import the keys later.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="935"/> - <source>Decrypting & Verifying & Extracting</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="996"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="529"/> <source>EML File Too Large</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="997"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="530"/> <source>The EML file "%1" is larger than 32MB and will not be opened.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="56"/> - <source>No Key Checked. Do you want to encrypt with a symmetric cipher using a passphrase?</source> - <translation type="unfinished">Aucune clé vérifiée. Voulez-vous chiffrer avec un chiffrement symétrique à l'aide d'une phrase de passe ?</translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="113"/> - <source>The selected key contains a key that does not actually have a encrypt usage.</source> - <translation type="unfinished">La clé sélectionnée contient une clé qui n'a pas réellement d'utilisation de chiffrement.</translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="179"/> - <source>The selected key contains a key that does not actually have a signature usage.</source> - <translation type="unfinished">La clé sélectionnée contient une clé qui n'a pas réellement d'utilisation de signature.</translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="380"/> - <source>Please check some key in the key toolbox on the right.</source> - <translation type="unfinished">Veuillez cocher une clé dans la boîte à outils des clés à droite.</translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="111"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="137"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="159"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="177"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="192"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="207"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="224"/> - <source>Key Not Found.</source> - <translation type="unfinished">Clé introuvable.</translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="116"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="106"/> <source>Localize</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="119"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="109"/> <source>UTC</source> <translation type="unfinished">UTC</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="142"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="120"/> <source>Local Time</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="324"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="274"/> <source>This version(%1) may have been withdrawn by the developer due to serious problems. Please stop using this version immediately and download the latest stable version (%2) on the Github Releases Page.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="339"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="288"/> <source>This may be a BETA Version (Latest Stable Version: %1).</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="345"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="301"/> <source>Commit Hash Mismatch</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="346"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="302"/> <source>The current version's commit hash does not match the official release. This may indicate a modified or unofficial build. For security reasons, please verify your installation or download the official release from the Github Releases Page.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="478"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="492"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="494"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="496"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="573"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="590"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="592"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="594"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="880"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="896"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="899"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="902"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="432"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="446"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="448"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="450"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="595"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="612"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="614"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="616"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="898"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="914"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="917"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="920"/> <source>None</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="486"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="584"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="889"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="440"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="606"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="907"/> <source>From</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="487"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="489"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="585"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="587"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="890"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="893"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="441"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="443"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="607"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="609"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="908"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="911"/> <source>Unknown</source> <translation type="unfinished">Inconnu</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="489"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="587"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="892"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="443"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="609"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="910"/> <source>To</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="491"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="589"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="895"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="445"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="611"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="913"/> <source>Subject</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="494"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="592"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="898"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="448"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="614"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="916"/> <source>CC</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="496"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="594"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="901"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="450"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="616"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="919"/> <source>BCC</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="497"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="595"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="904"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="451"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="617"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="922"/> <source>Date</source> <translation type="unfinished">Date</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="502"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="909"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="456"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="927"/> <source>Signed EML Data Hash (SHA1)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="505"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="913"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="459"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="931"/> <source>Message Integrity Check Algorithm</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="625"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="689"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="755"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="772"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="517"/> + <source>FAIL</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="521"/> + <source>OK</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="524"/> + <source>WARN</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="535"/> + <source>Summary Report</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="536"/> + <source>Total Operations: %1 +</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="537"/> + <source>Successful: %1 +</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="538"/> + <source>Warnings: %1 +</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="539"/> + <source>Failures: %1 +</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="543"/> + <source>Failed Objects: %1 +</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="548"/> + <source>Warning Objects: %1 +</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="647"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="707"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="773"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="790"/> <source>No Key Selected</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="626"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="756"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="648"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="774"/> <source>Please select a key for encrypt the EML.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="690"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="773"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="708"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="791"/> <source>Please select a key for signing the EML.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="695"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="778"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="713"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="796"/> <source>Multiple Keys Selected</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="696"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="779"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="714"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="797"/> <source>Please select only one key to sign the EML.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="959"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="976"/> <source># EML Data Error The provided EML data does not conform to RFC 3156 standards and cannot be processed. @@ -4568,7 +4565,7 @@ After correcting the EML data, try the operation again.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="985"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="1002"/> <source># Email Operation Error An error occurred during the email operation. The process could not be completed. @@ -4592,17 +4589,19 @@ If the issue persists, consider seeking technical support or consulting the docu <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="319"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="262"/> <source>GpgFrontend Upgradeable (New Version: %1).</source> <translation type="unfinished">GpgFrontend évolutif (nouvelle version : %1).</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="297"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="269"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="296"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="296"/> <source>Update</source> <translation type="unfinished">Mettre à jour</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="323"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="273"/> <source>Withdrawn Version</source> <translation type="unfinished">Version retirée</translation> </message> @@ -4868,8 +4867,8 @@ If the issue persists, consider seeking technical support or consulting the docu </message> <message> <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="184"/> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="402"/> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="487"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="401"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="486"/> <source>File</source> <translation type="unfinished">Déposer</translation> </message> @@ -4889,406 +4888,406 @@ If the issue persists, consider seeking technical support or consulting the docu <translation type="unfinished">Importer une nouvelle clé du presse-papiers</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="208"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="207"/> <source>Keyserver</source> <translation type="unfinished">Serveur de clés</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="210"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="209"/> <source>Import New Key From Keyserver</source> <translation type="unfinished">Importer une nouvelle clé à partir du serveur de clés</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="218"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="217"/> <source>Editor</source> <translation type="unfinished">Éditeur</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="219"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="218"/> <source>Import New Key From Editor</source> <translation type="unfinished">Importer une nouvelle clé à partir de l'éditeur</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="224"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="223"/> <source>Manage Keys</source> <translation type="unfinished">Gérer les clés</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="225"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="224"/> <source>Open Key Management</source> <translation type="unfinished">Ouvrir la gestion des clés</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="230"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="229"/> <source>Clear Password Cache</source> <translation type="unfinished">Effacer le cache du mot de passe</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="231"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="230"/> <source>Clear Password Cache of GnuPG</source> <translation type="unfinished">Vider le cache des mots de passe de GnuPG</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="459"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="458"/> <source>Advanced</source> <translation type="unfinished">Avancée</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="600"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="594"/> <source>Status Panel</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="346"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="360"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="378"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="309"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="323"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="338"/> <source>Successful Operation</source> <translation type="unfinished">Opération réussie</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="347"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="310"/> <source>Clear password cache successfully</source> <translation type="unfinished">Effacer le cache du mot de passe avec succès</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="349"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="364"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="382"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="312"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="327"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="342"/> <source>Failed Operation</source> <translation type="unfinished">Échec de l'opération</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="350"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="313"/> <source>Failed to clear password cache of GnuPG</source> <translation type="unfinished">Impossible d'effacer le cache du mot de passe de GnuPG</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="236"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="235"/> <source>Reload All Components</source> <translation type="unfinished">Recharger tous les composants</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="237"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="236"/> <source>Reload All GnuPG's Components</source> <translation type="unfinished">Recharger tous les composants de GnuPG</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="361"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="324"/> <source>Reload all the GnuPG's components successfully</source> <translation type="unfinished">Rechargez tous les composants de GnuPG avec succès</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="365"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="328"/> <source>Failed to reload all or one of the GnuPG's component(s)</source> <translation type="unfinished">Échec du rechargement de tout ou partie des composants de GnuPG</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="242"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="241"/> <source>Restart All Components</source> <translation type="unfinished">Redémarrez tous les composants</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="243"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="242"/> <source>Restart All GnuPG's Components</source> <translation type="unfinished">Redémarrez tous les composants de GnuPG</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="379"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="339"/> <source>Restart all the GnuPG's components successfully</source> <translation type="unfinished">Redémarrez tous les composants de GnuPG avec succès</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="383"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="343"/> <source>Failed to restart all or one of the GnuPG's component(s)</source> <translation type="unfinished">Échec du redémarrage de tout ou partie des composants de GnuPG</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="248"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="247"/> <source>Open GnuPG Controller</source> <translation type="unfinished">Ouvrir le contrôleur GnuPG</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="249"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="248"/> <source>Open GnuPG Controller Dialog</source> <translation type="unfinished">Ouvrir la boîte de dialogue du contrôleur GnuPG</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="254"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="253"/> <source>Open Module Controller</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="255"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="254"/> <source>Open Module Controller Dialog</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="264"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="263"/> <source>New E-Mail</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="265"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="264"/> <source>Create A New E-Mail Tab</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="273"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="272"/> <source>About</source> <translation type="unfinished">A propos</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="274"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="273"/> <source>Show the application's About box</source> <translation type="unfinished">Afficher la zone À propos de l'application</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="280"/> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="283"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="279"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="282"/> <source>GnuPG</source> <translation type="unfinished">GnuPGGenericName</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="281"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="280"/> <source>Information about Gnupg</source> <translation type="unfinished">Informations sur Gnupg</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="287"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="286"/> <source>Translate</source> <translation type="unfinished">Traduire</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="288"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="287"/> <source>Information about translation</source> <translation type="unfinished">Informations sur la traduction</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="290"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="289"/> <source>Translators</source> <translation type="unfinished">Traducteurs</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="294"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="293"/> <source>Check for Updates</source> <translation type="unfinished">Vérifier les mises à jour</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="295"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="294"/> <source>Check for updates</source> <translation type="unfinished">Vérifier les mises à jour</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="301"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="300"/> <source>Open Wizard</source> <translation type="unfinished">Ouvrir l'assistant</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="302"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="301"/> <source>Open the wizard</source> <translation type="unfinished">Ouvrir l'assistant</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="307"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="306"/> <source>Append Public Key to Editor</source> <translation type="unfinished">Ajouter la clé publique à l'éditeur</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="308"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="307"/> <source>Append selected Keypair's Public Key to Editor</source> <translation type="unfinished">Ajouter la clé publique de la paire de clés sélectionnée à l'éditeur</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="313"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="312"/> <source>Append Create DateTime to Editor</source> <translation type="unfinished">Ajouter Créer DateTime à l'éditeur</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="314"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="313"/> <source>Append selected Key's creation date and time to Editor</source> <translation type="unfinished">Ajouter la date et l'heure de création de la clé sélectionnée à l'éditeur</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="319"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="318"/> <source>Append Expire DateTime to Editor</source> <translation type="unfinished">Ajouter la date d'expiration à l'éditeur</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="320"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="319"/> <source>Append selected Key's expiration date and time to Editor</source> <translation type="unfinished">Ajouter la date et l'heure d'expiration de la clé sélectionnée à l'éditeur</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="325"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="324"/> <source>Append Fingerprint to Editor</source> <translation type="unfinished">Ajouter l'empreinte digitale à l'éditeur</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="326"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="325"/> <source>Append selected Key's Fingerprint to Editor</source> <translation type="unfinished">Ajouter l'empreinte digitale de la clé sélectionnée à l'éditeur</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="331"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="330"/> <source>Copy Email</source> <translation type="unfinished">Copier l'e-mail</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="332"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="331"/> <source>Copy selected Keypair's to clipboard</source> <translation type="unfinished">Copier les paires de clés sélectionnées dans le presse-papiers</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="337"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="336"/> <source>Copy Default UID</source> <translation type="unfinished">Copier l'UID par défaut</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="338"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="337"/> <source>Copy selected Keypair's default UID to clipboard</source> <translation type="unfinished">Copiez l'UID par défaut de la paire de clés sélectionnée dans le presse-papiers</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="343"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="342"/> <source>Copy Key ID</source> <translation type="unfinished">Copier l'ID de clé</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="344"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="343"/> <source>Copy selected Keypair's ID to clipboard</source> <translation type="unfinished">Copier l'ID de la paire de clés sélectionnée dans le presse-papiers</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="349"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="348"/> <source>Show Key Details</source> <translation type="unfinished">Afficher les détails clés</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="350"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="349"/> <source>Show Details for this Key</source> <translation type="unfinished">Afficher les détails de cette clé</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="355"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="354"/> <source>Add To Favourite</source> <translation type="unfinished">Ajouter aux favoris</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="356"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="355"/> <source>Add this key to Favourite Table</source> <translation type="unfinished">Ajouter cette clé au tableau des favoris</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="362"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="361"/> <source>Remove From Favourite</source> <translation type="unfinished">Supprimer des favoris</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="363"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="362"/> <source>Remove this key from Favourite Table</source> <translation type="unfinished">Supprimer cette clé du tableau des favoris</translation> </message> <message> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="369"/> <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="370"/> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="371"/> <source>Set Owner Trust Level</source> <translation type="unfinished">Définir le niveau de confiance du propriétaire</translation> </message> <message> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="389"/> <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="390"/> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="391"/> <source>Remove PGP Header</source> <translation type="unfinished">Supprimer l'en-tête PGP</translation> </message> <message> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="394"/> <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="395"/> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="396"/> <source>Add PGP Header</source> <translation type="unfinished">Ajouter un en-tête PGP</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="420"/> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="514"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="419"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="508"/> <source>Edit</source> <translation type="unfinished">Éditer</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="440"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="439"/> <source>Crypt</source> <translation type="unfinished">Crypte</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="450"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="449"/> <source>Keys</source> <translation type="unfinished">Clés</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="451"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="450"/> <source>Import Key</source> <translation type="unfinished">Importer la clé</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="467"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="466"/> <source>View</source> <translation type="unfinished">Vue</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="469"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="468"/> <source>Help</source> <translation type="unfinished">Aider</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="499"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="498"/> <source>Operations</source> <translation type="unfinished">Opérations</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="509"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="503"/> <source>Key</source> <translation type="unfinished">Clé</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="522"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="516"/> <source>Special Edit</source> <translation type="unfinished">Édition spéciale</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="536"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="530"/> <source>Import key from...</source> <translation type="unfinished">Importer la clé de...</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="537"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="531"/> <source>Import key</source> <translation type="unfinished">Importer la clé</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="553"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="547"/> <source>Ready</source> <translation type="unfinished">Prêt</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="560"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="554"/> <source>Key ToolBox</source> <translation type="unfinished">Boîte à outils clé</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="568"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="562"/> <source>Default</source> <translation type="unfinished">Défaut</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="575"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="569"/> <source>Favourite</source> <translation type="unfinished">Préféré</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="582"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="576"/> <source>Only Public Key</source> <translation type="unfinished">Clé publique uniquement</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="589"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="583"/> <source>Has Private Key</source> <translation type="unfinished">Possède une clé privée</translation> </message> @@ -5337,89 +5336,89 @@ If the issue persists, consider seeking technical support or consulting the docu </message> <message> <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="84"/> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="195"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="192"/> <source>Enable Auto Activate</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="144"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="141"/> <source>BASIC INFO</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="146"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="143"/> <source>ID</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="148"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="145"/> <source>Version</source> <translation type="unfinished">Version</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="150"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="147"/> <source>SDK Version</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="152"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="149"/> <source>Qt ENV Version</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="154"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="151"/> <source>Hash</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="155"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="152"/> <source>Path</source> <translation type="unfinished">Chemin d'accès</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="159"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="156"/> <source>Auto Activate</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="160"/> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="162"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="157"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="159"/> <source>True</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="160"/> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="162"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="157"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="159"/> <source>False</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="161"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="158"/> <source>Active</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="166"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="163"/> <source>METADATA</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="182"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="179"/> <source>Listening Event</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="191"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="188"/> <source>Deactivate</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="192"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="189"/> <source>Activate</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="194"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="191"/> <source>Disable Auto Activate</source> <translation type="unfinished"></translation> </message> @@ -5498,42 +5497,42 @@ If the issue persists, consider seeking technical support or consulting the docu <translation type="unfinished">Conseils : Ces modifications d'options ne prennent effet qu'après le redémarrage de l'application.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsNetwork.cpp" line="173"/> + <location filename="../../../../src/ui/dialog/settings/SettingsNetwork.cpp" line="172"/> <source>Test Server Url Accessibility</source> <translation type="unfinished">Tester l'accessibilité de l'URL du serveur</translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsNetwork.cpp" line="174"/> + <location filename="../../../../src/ui/dialog/settings/SettingsNetwork.cpp" line="173"/> <source>Server Url</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsNetwork.cpp" line="184"/> + <location filename="../../../../src/ui/dialog/settings/SettingsNetwork.cpp" line="183"/> <source>Success</source> <translation type="unfinished">Succès</translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsNetwork.cpp" line="185"/> + <location filename="../../../../src/ui/dialog/settings/SettingsNetwork.cpp" line="184"/> <source>Successfully connect to the target server through the proxy server.</source> <translation type="unfinished">Connectez-vous avec succès au serveur cible via le serveur proxy.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsNetwork.cpp" line="189"/> + <location filename="../../../../src/ui/dialog/settings/SettingsNetwork.cpp" line="188"/> <source>Failed</source> <translation type="unfinished">Échoué</translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsNetwork.cpp" line="190"/> + <location filename="../../../../src/ui/dialog/settings/SettingsNetwork.cpp" line="189"/> <source>Unable to connect to the target server through the proxy server. Proxy settings may be invalid.</source> <translation type="unfinished">Impossible de se connecter au serveur cible via le serveur proxy. Les paramètres de proxy peuvent être invalides.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsNetwork.cpp" line="200"/> + <location filename="../../../../src/ui/dialog/settings/SettingsNetwork.cpp" line="199"/> <source>Test Proxy Server Connection...</source> <translation type="unfinished">Tester la connexion au serveur proxy...</translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsNetwork.cpp" line="201"/> + <location filename="../../../../src/ui/dialog/settings/SettingsNetwork.cpp" line="200"/> <source>Is using your proxy settings to access the url. Note that this test operation will apply your proxy settings to the entire software.</source> <translation type="unfinished">Utilise vos paramètres de proxy pour accéder à l'URL. Notez que cette opération de test appliquera vos paramètres de proxy à l'ensemble du logiciel.</translation> </message> @@ -5717,27 +5716,27 @@ If the issue persists, consider seeking technical support or consulting the docu <translation type="unfinished">Annuler</translation> </message> <message> - <location filename="../../../../src/ui/dialog/SignersPicker.cpp" line="52"/> + <location filename="../../../../src/ui/dialog/SignersPicker.cpp" line="53"/> <source>Signers</source> <translation type="unfinished">Signataires</translation> </message> <message> - <location filename="../../../../src/ui/dialog/SignersPicker.cpp" line="60"/> + <location filename="../../../../src/ui/dialog/SignersPicker.cpp" line="58"/> <source>Select Signer(s)</source> <translation type="unfinished">Sélectionnez le(s) signataire(s)</translation> </message> <message> - <location filename="../../../../src/ui/dialog/SignersPicker.cpp" line="63"/> + <location filename="../../../../src/ui/dialog/SignersPicker.cpp" line="61"/> <source>Please select one or more private keys you use for signing.</source> <translation type="unfinished">Veuillez sélectionner une ou plusieurs clés privées à utiliser pour la signature.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/SignersPicker.cpp" line="64"/> + <location filename="../../../../src/ui/dialog/SignersPicker.cpp" line="62"/> <source>If no key is selected, the default key will be used for signing.</source> <translation type="unfinished">Si aucune clé n'est sélectionnée, la clé par défaut sera utilisée pour la signature.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/SignersPicker.cpp" line="74"/> + <location filename="../../../../src/ui/dialog/SignersPicker.cpp" line="72"/> <source>Signers Picker</source> <translation type="unfinished"></translation> </message> @@ -5745,7 +5744,7 @@ If the issue persists, consider seeking technical support or consulting the docu <context> <name>GpgFrontend::UI::SubkeyGenerateDialog</name> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="72"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="82"/> <source>Tipps: if the key pair has a passphrase, the subkey's passphrase must be equal to it.</source> <translation type="unfinished">Conseil : si la paire de clés a une phrase secrète, la phrase secrète de la sous-clé doit lui être égale.</translation> </message> @@ -5755,77 +5754,72 @@ If the issue persists, consider seeking technical support or consulting the docu <translation type="unfinished">Générer une nouvelle sous-clé</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="98"/> - <source>Key Usage</source> - <translation type="unfinished">Utilisation des clés</translation> - </message> - <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="100"/> - <source>Encryption</source> - <translation type="unfinished">Chiffrement</translation> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="65"/> + <source>Authentication</source> + <translation type="unfinished">Authentification</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="103"/> - <source>Signing</source> - <translation type="unfinished">Signature</translation> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="59"/> + <source>Algorithm</source> + <translation type="unfinished">Algorithme</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="106"/> - <source>Certification</source> - <translation type="unfinished">Attestation</translation> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="60"/> + <source>Key Length</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="109"/> - <source>Authentication</source> - <translation type="unfinished">Authentification</translation> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="61"/> + <source>Expire Date</source> + <translation type="unfinished">Date d'expiration</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="153"/> - <source>Key Type</source> - <translation type="unfinished">Type de clé</translation> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="62"/> + <source>Usage</source> + <translation type="unfinished">Usage</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="154"/> - <source>KeySize (in Bit)</source> - <translation type="unfinished">Taille de clé (en bits)</translation> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="63"/> + <source>Encrypt</source> + <translation type="unfinished">Chiffrer</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="155"/> - <source>Expiration Date</source> - <translation type="unfinished">Date d'expiration</translation> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="64"/> + <source>Sign</source> + <translation type="unfinished">Signer</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="156"/> - <source>Never Expire</source> - <translation type="unfinished">N'expire jamais</translation> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="66"/> + <source>Non Expired</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="157"/> - <source>Non Pass Phrase</source> - <translation type="unfinished">Sans phrase secrète</translation> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="67"/> + <source>No Passphrase</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="167"/> - <source>Basic Information</source> - <translation type="unfinished">Informations de base</translation> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="183"/> + <source>Please give a valid subkey algorithm.</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="280"/> - <source>Expiration time no more than 2 years.</source> - <translation type="unfinished">Délai d'expiration pas plus de 2 ans.</translation> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="192"/> + <source>Time to subkey expiration must not be less than 120 seconds.</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="295"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="204"/> <source>Generating</source> <translation type="unfinished">Générateur</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="306"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="215"/> <source>Error</source> <translation type="unfinished">Erreur</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="307"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="216"/> <source>Unknown error occurred</source> <translation type="unfinished">Une erreur inconnue s'est produite</translation> </message> @@ -5876,21 +5870,21 @@ If the issue persists, consider seeking technical support or consulting the docu <context> <name>GpgFrontend::UI::TextEdit</name> <message> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="73"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="74"/> <source>Open Directory</source> <translation type="unfinished">Ouvrir le répertoire</translation> </message> <message> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="182"/> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="196"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="183"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="197"/> <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="449"/> <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="486"/> <source>Warning</source> <translation type="unfinished">Avertissement</translation> </message> <message> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="183"/> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="197"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="184"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="198"/> <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="450"/> <source>Cannot read file %1: %2.</source> @@ -5898,69 +5892,69 @@ If the issue persists, consider seeking technical support or consulting the docu %2.</translation> </message> <message> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="120"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="121"/> <source>Open file</source> <translation type="unfinished">Fichier ouvert</translation> </message> <message> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="83"/> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="91"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="84"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="92"/> <source>Error</source> <translation type="unfinished">Erreur</translation> </message> <message> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="84"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="85"/> <source>Cannot open this file. Please make sure that this is a regular file and it's readable.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="92"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="93"/> <source>Cannot open this file. The file is TOO LARGE (>1MB) for GpgFrontend Text Editor.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="100"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="101"/> <source>File Open Error</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="101"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="102"/> <source>The file "%1" could not be opened.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="109"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="110"/> <source>Binary File Detected</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="110"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="111"/> <source>The file "%1" appears to be a binary file and will not be opened.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="232"/> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="248"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="233"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="249"/> <source>Save file</source> <translation type="unfinished">Enregistrer le fichier</translation> </message> <message> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="309"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="310"/> <source>Unsaved document</source> <translation type="unfinished">Document non enregistré</translation> </message> <message> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="310"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="311"/> <source>The document "%1" has been modified. Do you want to save your changes?</source> <translation type="unfinished">Le document "%1" a été modifié. Voulez-vous enregistrer vos modifications ?</translation> </message> <message> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="313"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="314"/> <source>Note:</source> <translation type="unfinished">Noter:</translation> </message> <message> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="314"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="315"/> <source>If you don't save these files, all changes are lost.</source> <translation type="unfinished">Si vous n'enregistrez pas ces fichiers, toutes les modifications sont perdues.</translation> </message> @@ -6027,9 +6021,9 @@ If the issue persists, consider seeking technical support or consulting the docu %2.</translation> </message> <message> - <location filename="../../../../src/ui/widgets/TextEditTabWidget.cpp" line="254"/> - <location filename="../../../../src/ui/widgets/TextEditTabWidget.cpp" line="268"/> - <location filename="../../../../src/ui/widgets/TextEditTabWidget.cpp" line="284"/> + <location filename="../../../../src/ui/widgets/TextEditTabWidget.cpp" line="251"/> + <location filename="../../../../src/ui/widgets/TextEditTabWidget.cpp" line="265"/> + <location filename="../../../../src/ui/widgets/TextEditTabWidget.cpp" line="281"/> <source>untitled</source> <translation type="unfinished">sans titre</translation> </message> @@ -6079,154 +6073,154 @@ If the issue persists, consider seeking technical support or consulting the docu <context> <name>GpgFrontend::UI::VerifyKeyDetailBox</name> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="57"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="56"/> <source>Import from keyserver</source> <translation type="unfinished">Importer depuis le serveur de clés</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="62"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="61"/> <source>Key not present with id 0x</source> <translation type="unfinished">Clé non présente avec l'identifiant 0x</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="66"/> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="91"/> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="106"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="65"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="90"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="105"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="120"/> <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="121"/> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="122"/> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="137"/> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="152"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="136"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="151"/> <source>Status</source> <translation type="unfinished">Statut</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="66"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="65"/> <source>:</source> <translation type="unfinished">:</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="68"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="67"/> <source>Key not present in key list</source> <translation type="unfinished">Clé non présente dans la liste des clés</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="76"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="75"/> <source>A Signature</source> <translation type="unfinished">Une signature</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="81"/> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="96"/> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="111"/> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="127"/> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="142"/> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="157"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="80"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="95"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="110"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="126"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="141"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="156"/> <source>Key Information is NOT Available</source> <translation type="unfinished">Les informations clés ne sont PAS disponibles</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="83"/> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="98"/> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="113"/> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="129"/> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="144"/> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="159"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="82"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="97"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="112"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="128"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="143"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="158"/> <source>Fingerprint</source> <translation type="unfinished">Empreinte digitale</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="91"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="90"/> <source>Cert Revoked</source> <translation type="unfinished">Certificat révoqué</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="106"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="105"/> <source>Signature Expired</source> <translation type="unfinished">Signature expirée</translation> </message> <message> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="120"/> <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="121"/> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="122"/> <source>Key Expired</source> <translation type="unfinished">Clé expirée</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="137"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="136"/> <source>General Error</source> <translation type="unfinished">Erreur générale</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="152"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="151"/> <source>Unknown Error </source> <translation type="unfinished">Erreur inconnue</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="182"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="181"/> <source>Signer Name</source> <translation type="unfinished">Nom du signataire</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="183"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="182"/> <source>Signer Email</source> <translation type="unfinished">E-mail du signataire</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="184"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="183"/> <source>Key's Fingerprint</source> <translation type="unfinished">Empreinte digitale de la clé</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="185"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="184"/> <source>Valid</source> <translation type="unfinished">Valide</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="186"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="185"/> <source>Flags</source> <translation type="unfinished">Drapeaux</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="193"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="192"/> <source>Fully Valid</source> <translation type="unfinished">Entièrement valide</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="195"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="194"/> <source>NOT Fully Valid</source> <translation type="unfinished">PAS entièrement valide</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="202"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="201"/> <source>Good</source> <translation type="unfinished">Bon</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="205"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="204"/> <source>Bad</source> <translation type="unfinished">Mauvais</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="208"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="207"/> <source>Expired</source> <translation type="unfinished">Expiré</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="211"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="210"/> <source>Missing Key</source> <translation type="unfinished">Clé manquante</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="214"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="213"/> <source>Revoked Key</source> <translation type="unfinished">Clé révoquée</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="217"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="216"/> <source>Expired Key</source> <translation type="unfinished">Clé expirée</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="220"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="219"/> <source>Missing CRL</source> <translation type="unfinished">Liste de révocation de certificats manquante</translation> </message> @@ -6234,7 +6228,7 @@ If the issue persists, consider seeking technical support or consulting the docu <context> <name>GpgFrontend::UI::Wizard</name> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="43"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="45"/> <source>First Start Wizard</source> <translation type="unfinished">Assistant de premier démarrage</translation> </message> @@ -6242,32 +6236,32 @@ If the issue persists, consider seeking technical support or consulting the docu <context> <name>GpgKey</name> <message> - <location filename="../../../../src/core/model/GpgKey.cpp" line="91"/> + <location filename="../../../../src/core/model/GpgKey.cpp" line="89"/> <source>Unknown</source> <translation type="unfinished">Inconnu</translation> </message> <message> - <location filename="../../../../src/core/model/GpgKey.cpp" line="93"/> + <location filename="../../../../src/core/model/GpgKey.cpp" line="91"/> <source>Undefined</source> <translation type="unfinished">Indéfini</translation> </message> <message> - <location filename="../../../../src/core/model/GpgKey.cpp" line="95"/> + <location filename="../../../../src/core/model/GpgKey.cpp" line="93"/> <source>Never</source> <translation type="unfinished">Jamais</translation> </message> <message> - <location filename="../../../../src/core/model/GpgKey.cpp" line="97"/> + <location filename="../../../../src/core/model/GpgKey.cpp" line="95"/> <source>Marginal</source> <translation type="unfinished">Marginal</translation> </message> <message> - <location filename="../../../../src/core/model/GpgKey.cpp" line="99"/> + <location filename="../../../../src/core/model/GpgKey.cpp" line="97"/> <source>Full</source> <translation type="unfinished">Complet</translation> </message> <message> - <location filename="../../../../src/core/model/GpgKey.cpp" line="101"/> + <location filename="../../../../src/core/model/GpgKey.cpp" line="99"/> <source>Ultimate</source> <translation type="unfinished">Ultime</translation> </message> @@ -6285,17 +6279,12 @@ If the issue persists, consider seeking technical support or consulting the docu <translation type="unfinished">Si ce processus est trop lent, veuillez définir l'adresse du serveur de clés de manière appropriée dans le fichier de configuration gnupg (en fonction de la situation du réseau dans votre pays ou région).</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="67"/> - <source>Show Verify Details</source> - <translation type="unfinished">Afficher les détails de vérification</translation> - </message> - <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="75"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="64"/> <source>Public key not found locally</source> <translation type="unfinished">Clé publique introuvable localement</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="76"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="65"/> <source>There is no target public key content in local for GpgFrontend to gather enough information about this Signature. Do you want to import the public key from Keyserver now?</source> <translation type="unfinished">Il n'y a pas de contenu de clé publique cible en local pour que GpgFrontend recueille suffisamment d'informations sur cette signature. Voulez-vous importer la clé publique depuis Keyserver maintenant ?</translation> </message> @@ -6353,42 +6342,47 @@ If the issue persists, consider seeking technical support or consulting the docu <translation type="unfinished">Succès</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="578"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="555"/> <source>Sync All Public Key</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="579"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="556"/> <source>You have not checked any public keys that you want to synchronize, do you want to synchronize all local public keys from the key server?</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/core/GpgCoreInit.cpp" line="398"/> + <location filename="../../../../src/core/GpgCoreInit.cpp" line="422"/> <source>Cannot Find GpgConf</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/core/GpgCoreInit.cpp" line="406"/> + <location filename="../../../../src/core/GpgCoreInit.cpp" line="430"/> <source>Cannot Find GnuPG</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/core/GpgCoreInit.cpp" line="421"/> - <source>Cannot Find Home Path</source> + <location filename="../../../../src/core/GpgCoreInit.cpp" line="405"/> + <source>Cannot get Infos from GpgConf</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/core/GpgCoreInit.cpp" line="445"/> + <source>Cannot Find Default Home Path</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/core/GpgCoreInit.cpp" line="473"/> + <location filename="../../../../src/core/GpgCoreInit.cpp" line="471"/> <source>GpgME Initiation Failed</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/core/GpgCoreInit.cpp" line="547"/> + <location filename="../../../../src/core/GpgCoreInit.cpp" line="545"/> <source>GpgME Default Context Initiation Failed</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/core/GpgCoreInit.cpp" line="558"/> + <location filename="../../../../src/core/GpgCoreInit.cpp" line="556"/> <source>Gpg Default Key Database Initiation Failed</source> <translation type="unfinished"></translation> </message> diff --git a/resource/lfs/locale/ts/GpgFrontend.it_IT.ts b/resource/lfs/locale/ts/GpgFrontend.it_IT.ts index 81ace0d0..4ad679d1 100644 --- a/resource/lfs/locale/ts/GpgFrontend.it_IT.ts +++ b/resource/lfs/locale/ts/GpgFrontend.it_IT.ts @@ -36,7 +36,7 @@ <message> <location filename="../../../../src/core/function/result_analyse/GpgDecryptResultAnalyse.cpp" line="65"/> <source>MIME</source> - <translation>MIMO</translation> + <translation>MIME</translation> </message> <message> <location filename="../../../../src/core/function/result_analyse/GpgDecryptResultAnalyse.cpp" line="66"/> @@ -101,7 +101,7 @@ <message> <location filename="../../../../src/core/function/result_analyse/GpgEncryptResultAnalyse.cpp" line="40"/> <source>Encrypt Operation</source> - <translation>Operazione di crittografia</translation> + <translation>Operazione di cifratura</translation> </message> <message> <location filename="../../../../src/core/function/result_analyse/GpgEncryptResultAnalyse.cpp" line="43"/> @@ -137,59 +137,59 @@ <context> <name>GpgFrontend::GpgKeyTableModel</name> <message> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="42"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="40"/> <source>Select</source> - <translation type="unfinished">Selezionare</translation> + <translation>Selezionare</translation> </message> <message> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="42"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="40"/> <source>Type</source> - <translation type="unfinished">Tipo</translation> + <translation>Tipo</translation> </message> <message> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="42"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="40"/> <source>Name</source> - <translation type="unfinished">Nome</translation> + <translation>Nome</translation> </message> <message> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="43"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="41"/> <source>Email Address</source> - <translation type="unfinished">Indirizzo email</translation> + <translation>Indirizzo e-mail</translation> </message> <message> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="43"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="41"/> <source>Usage</source> - <translation type="unfinished">Utilizzo</translation> + <translation>Utilizzo</translation> </message> <message> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="43"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="41"/> <source>Trust</source> - <translation type="unfinished">Fiducia</translation> + <translation>Fiducia</translation> </message> <message> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="44"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="42"/> <source>Key ID</source> - <translation type="unfinished">ID chiave</translation> + <translation>ID chiave</translation> </message> <message> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="44"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="42"/> <source>Create Date</source> - <translation type="unfinished">Crea Data</translation> + <translation>Crea Data</translation> </message> <message> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="44"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="42"/> <source>Algorithm</source> - <translation type="unfinished">Algoritmo</translation> + <translation>Algoritmo</translation> </message> <message> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="45"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="43"/> <source>Subkey(s)</source> - <translation type="unfinished"></translation> + <translation>Sottochiave(i)</translation> </message> <message> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="45"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="43"/> <source>Comment</source> - <translation type="unfinished">Commento</translation> + <translation>Commento</translation> </message> </context> <context> @@ -300,7 +300,7 @@ <message> <location filename="../../../../src/core/function/result_analyse/GpgSignResultAnalyse.cpp" line="123"/> <source>Invalid Signers</source> - <translation>Firmatori non validi</translation> + <translation>Firmatari non validi</translation> </message> <message> <location filename="../../../../src/core/function/result_analyse/GpgSignResultAnalyse.cpp" line="99"/> @@ -379,7 +379,7 @@ <message> <location filename="../../../../src/core/function/result_analyse/GpgVerifyResultAnalyse.cpp" line="81"/> <source>A</source> - <translation>UN</translation> + <translation>A</translation> </message> <message> <location filename="../../../../src/core/function/result_analyse/GpgVerifyResultAnalyse.cpp" line="83"/> @@ -538,6 +538,14 @@ </message> </context> <context> + <name>GpgFrontend::KeyGenerateInfo</name> + <message> + <location filename="../../../../src/core/model/GpgKeyGenerateInfo.cpp" line="39"/> + <source>None</source> + <translation type="unfinished">Nessuno</translation> + </message> +</context> +<context> <name>GpgFrontend::Module::GlobalRegisterTable</name> <message> <location filename="../../../../src/core/module/GlobalRegisterTable.cpp" line="47"/> @@ -598,7 +606,7 @@ <message> <location filename="../../../../src/ui/dialog/help/AboutDialog.cpp" line="59"/> <source>Unnamed</source> - <translation type="unfinished"></translation> + <translation>Sconosciuto</translation> </message> <message> <location filename="../../../../src/ui/dialog/help/AboutDialog.cpp" line="50"/> @@ -646,7 +654,7 @@ <message> <location filename="../../../../src/ui/dialog/settings/SettingsAppearance.cpp" line="64"/> <source>Status Panel</source> - <translation type="unfinished"></translation> + <translation>Pannello di Stato</translation> </message> <message> <location filename="../../../../src/ui/dialog/settings/SettingsAppearance.cpp" line="57"/> @@ -687,58 +695,58 @@ <context> <name>GpgFrontend::UI::ChoosePage</name> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="107"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="106"/> <source>Choose your action...</source> <translation>Scegli la tua azione...</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="108"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="107"/> <source>...by clicking on the appropriate link.</source> <translation>...cliccando sul collegamento appropriato.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="111"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="110"/> <source>If you have never used GpgFrontend before and also don't own a gpg key yet you may possibly want to read how to</source> <translation>Se non hai mai usato GpgFrontend prima e non possiedi ancora una chiave gpg potresti voler leggere come</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="114"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="113"/> <source>Generate Key</source> <translation>Genera chiave</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="121"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="120"/> <source>If you want to learn how to encrypt, decrypt, sign and verify text, you can read </source> - <translation>Se vuoi imparare a crittografare, decifrare, firmare e verificare il testo, puoi leggere </translation> + <translation>Se vuoi imparare a cifrare, decifrare, firmare e verificare il testo, puoi leggere </translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="124"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="123"/> <source>Encrypt & Decrypt Text</source> - <translation>Crittografa e decifra il testo</translation> + <translation>Cifra e decifra il testo</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="124"/> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="136"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="123"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="135"/> <source>or</source> <translation>o</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="126"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="125"/> <source>Sign & Verify Text</source> <translation>Firma e verifica il testo</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="134"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="133"/> <source>If you want to operate file, you can read </source> - <translation>Se vuoi operare su file, puoi leggere </translation> + <translation>Se vuoi operare sul file, puoi leggere </translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="136"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="135"/> <source>Encrypt & Sign File</source> - <translation>Crittografa e firma file</translation> + <translation>Cifra e firma file</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="138"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="137"/> <source>Sign & Verify File</source> <translation>Firma e verifica file</translation> </message> @@ -746,39 +754,39 @@ <context> <name>GpgFrontend::UI::CommonUtils</name> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="481"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="419"/> <source>Timeout</source> <translation>Tempo scaduto</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="224"/> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="356"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="162"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="294"/> <source>Success</source> <translation>Successo</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="159"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="119"/> <source>Failed to Load GnuPG Context</source> - <translation type="unfinished"></translation> + <translation>Caricamento nuPG Context fallito</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="161"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="121"/> <source>It seems that GnuPG (gpg) is not properly installed. Please refer to the <a href='https://www.gpgfrontend.bktus.com/overview/faq/#troubleshooting-gnupg-installation-issues'>FAQ</a> for instructions on fixing the installation. After resolving the issue, relaunch GpgFrontend.<br /><br />Alternatively, you can open the GnuPG Controller to configure a custom GnuPG installation for GpgFrontend to use. Once set, GpgFrontend will restart automatically.<br /><br />Details: %1</source> - <translation type="unfinished"></translation> + <translation>Sembra che GnuPG (gpg) non sia installato correttamente. Consulta la pagina <a href='https://www.gpgfrontend.bktus.com/overview/faq/#troubleshooting-gnupg-installation-issues'>FAQ</a> per istruzioni su come risolvere l'installazione. Dopo aver risolto il problema, riavvia GpgFrontend.<br /><br />In alternativa, puoi aprire GnuPG Controller per configurare un'installazione GnuPG personalizzata da utilizzare per GpgFrontend. Una volta impostata, GpgFrontend si riavvierà automaticamente.<br /><br />Dettagli: %1</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="225"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="163"/> <source>Gpg Operation succeed.</source> <translation>Operazione Gpg riuscita.</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="235"/> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="348"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="173"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="286"/> <source>Failure</source> <translation>Fallimento</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="236"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="174"/> <source>Gpg Operation failed. Error code: %1 @@ -791,101 +799,101 @@ Origine: %2 Descrizione: %3</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="263"/> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="270"/> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="538"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="201"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="208"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="476"/> <source>Error</source> <translation>Errore</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="255"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="193"/> <source>Open Key</source> <translation>Chiave aperta</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="256"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="194"/> <source>Keyring files</source> <translation>File portachiavi</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="264"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="202"/> <source>Cannot open this file. Please make sure that this is a regular file and it's readable.</source> <translation>Impossibile aprire questo file. Assicurati che questo sia un file regolare e che sia leggibile.</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="271"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="209"/> <source>The target file is too large for a keyring.</source> <translation>Il file di destinazione è troppo grande per un portachiavi.</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="277"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="215"/> <source>File Open Failed</source> <translation>Apertura file non riuscita</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="278"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="216"/> <source>Failed to open file: </source> <translation>Impossibile aprire il file: </translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="329"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="267"/> <source>Processing</source> <translation>In lavorazione</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="349"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="287"/> <source>Failed to execute command.</source> <translation>Impossibile eseguire il comando.</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="357"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="295"/> <source>Succeed in executing command.</source> <translation>Riuscire a eseguire il comando.</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="359"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="297"/> <source>Warning</source> <translation>Avvertimento</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="360"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="298"/> <source>Finished executing command.</source> <translation>Terminata l'esecuzione del comando.</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="381"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="319"/> <source>Default Keyserver Not Found</source> <translation>Keyserver predefinito non trovato</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="382"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="320"/> <source>Cannot read default keyserver from your settings, please set a default keyserver first</source> <translation>Impossibile leggere il server delle chiavi predefinito dalle impostazioni, impostare prima un server delle chiavi predefinito</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="478"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="416"/> <source>Key Not Found</source> <translation>Chiave non trovata</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="484"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="422"/> <source>Key Server Not Found</source> <translation>Server chiave non trovato</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="487"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="425"/> <source>Connection Error</source> <translation>Errore di connessione</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="426"/> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="498"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="364"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="436"/> <source>The key has been updated</source> <translation>La chiave è stata aggiornata</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="428"/> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="500"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="366"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="438"/> <source>No need to update the key</source> <translation>Non è necessario aggiornare la chiave</translation> </message> @@ -893,37 +901,37 @@ Descrizione: %3</translation> <context> <name>GpgFrontend::UI::ConclusionPage</name> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="204"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="203"/> <source>Ready.</source> <translation>Pronto.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="205"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="204"/> <source>Have fun with GpgFrontend!</source> <translation>Buon divertimento con GpgFrontend!</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="208"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="207"/> <source>You are ready to use GpgFrontend now.<br><br></source> <translation>Ora sei pronto per usare GpgFrontend.<br><br></translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="210"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="209"/> <source>The Online Document</source> <translation>Il documento online</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="211"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="210"/> <source> will get you started with GpgFrontend. Anytime you encounter problems, please try to find help from the documentation</source> <translation> ti farà iniziare con GpgFrontend. Ogni volta che riscontri problemi, prova a cercare aiuto dalla documentazione</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="220"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="219"/> <source>Open offline help.</source> <translation>Apri la guida offline.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="224"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="223"/> <source>Don't show the wizard again.</source> <translation>Non mostrare più la procedura guidata.</translation> </message> @@ -952,8 +960,8 @@ Descrizione: %3</translation> </message> <message> <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="74"/> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="112"/> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="146"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="111"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="145"/> <source>Error</source> <translation>Errore</translation> </message> @@ -979,82 +987,82 @@ Descrizione: %3</translation> <translation>Genera una password per proteggere la tua chiave prima dell'esportazione, è molto importante. Non dimenticare di eseguire il backup della password in un luogo sicuro.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="113"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="112"/> <source>No key is suitable to export.</source> <translation>Nessuna chiave è adatta all'esportazione.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="118"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="117"/> <source>Generating</source> <translation>Generazione</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="129"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="128"/> <source>Success</source> <translation>Successo</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="131"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="130"/> <source>The Key Package has been successfully generated and has been protected by encryption algorithms(AES-256-ECB). You can safely transfer your Key Package.</source> <translation>Il Key Package è stato generato con successo ed è stato protetto da algoritmi di crittografia (AES-256-ECB). Puoi trasferire in sicurezza il tuo pacchetto chiavi.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="136"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="135"/> <source>But the key file cannot be leaked under any circumstances. Please delete the Key Package and key file as soon as possible after completing the transfer operation.</source> <translation>Ma il file chiave non può trapelare in nessuna circostanza. Eliminare il pacchetto chiave e il file chiave il prima possibile dopo aver completato l'operazione di trasferimento.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="147"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="146"/> <source>An error occurred while exporting the key package.</source> <translation>Si è verificato un errore durante l'esportazione del pacchetto di chiavi.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="156"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="155"/> <source>Key Package Name</source> <translation>Nome pacchetto chiave</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="157"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="156"/> <source>Output Path</source> <translation>Percorso di uscita</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="158"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="157"/> <source>Passphrase</source> <translation>Frase d'accesso</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="160"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="159"/> <source>Tips: You can use Key Package to safely and conveniently transfer your public and private keys between devices.</source> <translation>Suggerimenti: puoi utilizzare Key Package per trasferire in modo sicuro e conveniente le tue chiavi pubbliche e private tra dispositivi.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="162"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="161"/> <source>Generate and Save Passphrase</source> <translation>Genera e salva passphrase</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="163"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="162"/> <source>Generate Key Package Name</source> <translation>Genera nome pacchetto chiave</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="164"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="163"/> <source>Select Output Path</source> <translation>Seleziona percorso di output</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="167"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="166"/> <source>Include secret key (Think twice before acting)</source> <translation>Includi chiave segreta (Pensa due volte prima di agire)</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="169"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="168"/> <source>Exclude keys that do not have a private key</source> <translation>Escludi chiavi che non hanno una chiave privata</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="172"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="171"/> <source>Export As Key Package</source> <translation>Esporta come pacchetto chiave</translation> </message> @@ -1062,141 +1070,151 @@ Descrizione: %3</translation> <context> <name>GpgFrontend::UI::FilePage</name> <message> - <location filename="../../../../src/ui/widgets/FilePage.cpp" line="63"/> + <location filename="../../../../src/ui/widgets/FilePage.cpp" line="46"/> + <source>Switch Batch Mode</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/widgets/FilePage.cpp" line="66"/> <source>Show Hidden File</source> <translation>Mostra file nascosto</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FilePage.cpp" line="69"/> + <location filename="../../../../src/ui/widgets/FilePage.cpp" line="72"/> <source>Show System File</source> <translation>Mostra file di sistema</translation> </message> + <message> + <location filename="../../../../src/ui/widgets/FilePage.cpp" line="78"/> + <source>ASCII Mode</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>GpgFrontend::UI::FileTreeView</name> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="88"/> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="101"/> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="159"/> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="204"/> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="225"/> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="266"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="93"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="106"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="164"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="209"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="232"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="279"/> <source>Error</source> <translation>Errore</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="89"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="94"/> <source>The path is not exists, unprivileged or unreachable.</source> <translation>Il percorso non esiste, non privilegiato o irraggiungibile.</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="102"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="107"/> <source>The file is unprivileged or unreachable.</source> <translation>Il file non è privilegiato o non è raggiungibile.</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="152"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="157"/> <source>Warning</source> <translation>Avvertimento</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="153"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="158"/> <source>Are you sure you want to delete it?</source> <translation>Sei sicuro di voler cancellare?</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="160"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="165"/> <source>Unable to delete the file or folder.</source> <translation>Impossibile eliminare il file o la cartella.</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="169"/> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="182"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="174"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="187"/> <source>Make New Directory</source> <translation>Crea una nuova directory</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="170"/> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="183"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="175"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="188"/> <source>Directory Name</source> <translation>Nome della cartella</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="197"/> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="218"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="202"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="225"/> <source>Create Empty File</source> <translation>Crea file vuoto</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="197"/> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="218"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="202"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="225"/> <source>Filename (you can given extension)</source> <translation>Nome file (puoi dare l'estensione)</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="205"/> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="226"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="210"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="233"/> <source>Unable to create the file.</source> <translation>Impossibile creare il file.</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="258"/> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="289"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="271"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="303"/> <source>Rename</source> <translation>Rinominare</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="258"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="271"/> <source>New Filename</source> <translation>Nuovo nome file</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="267"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="280"/> <source>Unable to rename the file or folder.</source> <translation>Impossibile rinominare il file o la cartella.</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="284"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="297"/> <source>Open</source> <translation>Apri</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="294"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="308"/> <source>Delete</source> <translation>Elimina</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="299"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="313"/> <source>Calculate Hash</source> <translation>Calcola hash</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="304"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="318"/> <source>Directory</source> <translation>Cartella</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="309"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="323"/> <source>File</source> <translation>File</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="314"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="328"/> <source>Compress...</source> - <translation>Comprimi...</translation> + <translation>Comprimo...</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="321"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="335"/> <source>Open with Default System Application</source> <translation>Apri con l'applicazione di sistema predefinita</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="326"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="340"/> <source>New</source> <translation>Nuovo</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="382"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="402"/> <source>Calculating</source> <translation>Sto calcolando</translation> </message> @@ -1233,68 +1251,63 @@ Descrizione: %3</translation> </message> <message> <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="52"/> - <source>Enable to use longer key expiration date.</source> - <translation>Abilita per utilizzare una data di scadenza della chiave più lunga.</translation> - </message> - <message> - <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="54"/> <source>Import files dropped on the Key List without confirmation.</source> <translation>Importa i file rilasciati nell'elenco delle chiavi senza conferma.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="56"/> + <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="54"/> <source>Disable loading of all modules (including integrated modules)</source> - <translation type="unfinished"></translation> + <translation>Disabilita il caricamento di tutti i moduli (inclusi i moduli integrati)</translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="58"/> + <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="56"/> <source>Language</source> <translation>Lingua</translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="60"/> + <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="58"/> <source>NOTE</source> <translation>NOTA</translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="60"/> + <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="58"/> <source>: </source> <translation>: </translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="61"/> + <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="59"/> <source>GpgFrontend will restart automatically if you change the language!</source> <translation>GpgFrontend si riavvierà automaticamente se cambi la lingua!</translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="63"/> + <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="61"/> <source>Data</source> <translation>Dati</translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="65"/> - <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="83"/> + <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="63"/> + <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="81"/> <source>Clear All Log (Total Size: %1)</source> <translation>Cancella tutto il registro (dimensione totale: %1)</translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="68"/> - <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="97"/> + <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="66"/> + <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="95"/> <source>Clear All Data Objects (Total Size: %1)</source> <translation>Cancella tutti gli oggetti dati (dimensione totale: %1)</translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="71"/> + <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="69"/> <source>Reveal in File Explorer</source> <translation>Mostra in Esplora File</translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="90"/> + <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="88"/> <source>Confirm</source> <translation>Conferma</translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="91"/> + <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="89"/> <source>Are you sure you want to clear all data objects? This will result in loss of all cached form positions, statuses, key servers, etc.</source> <translation>Sei sicuro di voler cancellare tutti gli oggetti dati? Ciò comporterà la perdita di tutte le posizioni dei moduli memorizzati nella cache, gli stati, i server delle chiavi, ecc.</translation> @@ -1303,150 +1316,182 @@ This will result in loss of all cached form positions, statuses, key servers, et <context> <name>GpgFrontend::UI::GnuPGControllerDialog</name> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="69"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="70"/> <source>General</source> <translation>Generale</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="70"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="71"/> <source>Key Database</source> <translation>Database delle chiavi</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="71"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="72"/> <source>Advanced</source> <translation>Avanzate</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="51"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="52"/> <source>Use Binary Mode for File Operations</source> <translation>Utilizza la modalità binaria per le operazioni sui file</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="53"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="54"/> <source>Use Pinentry as Password Input Dialog</source> <translation>Usa Pinentry come finestra di dialogo per l'inserimento della password</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="54"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="55"/> <source>Enable GpgME Debug Log</source> <translation>Abilita registro debug GpgME</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="55"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="56"/> <source>Use Custom GnuPG</source> <translation>Usa GnuPG personalizzato</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="56"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="57"/> <source>Select GnuPG Path</source> <translation>Seleziona Percorso GnuPG</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="76"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="77"/> <source>Name</source> - <translation type="unfinished">Nome</translation> + <translation>Nome</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="76"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="77"/> <source>Path</source> - <translation type="unfinished">Percorso</translation> + <translation>Percorso</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="363"/> - <source>Maximum Key Database Limit Reached</source> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="77"/> + <source>Status</source> + <translation type="unfinished">Stato</translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="77"/> + <source>Real Path</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="364"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="360"/> + <source>Maximum Key Database Limit Reached</source> + <translation>È stato raggiunto il limite massimo del database delle chiavi</translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="361"/> <source>Currently, GpgFrontend supports a maximum of 8 key databases. Please remove an existing database to add a new one.</source> - <translation type="unfinished"></translation> + <translation>Attualmente, GpgFrontend supporta un massimo di 8 database di chiavi. Rimuovi un database esistente per aggiungerne uno nuovo.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="375"/> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="605"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="372"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="618"/> <source>Duplicate Key Database Paths</source> - <translation type="unfinished"></translation> + <translation>Percorsi del database delle chiavi duplicati</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="376"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="373"/> <source>The newly added key database path duplicates a previously existing one.</source> + <translation>Il percorso del database delle chiavi appena aggiunto duplica quello già esistente.</translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="382"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="629"/> + <source>Invalid Key Database Paths</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="445"/> - <source>Confirm Deletion</source> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="383"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="630"/> + <source>The edited key database path is not a valid path that GpgFrontend can use</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="446"/> - <source>Are you sure you want to delete the selected key database?</source> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="430"/> + <source>Active</source> + <translation type="unfinished">Attivo</translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="430"/> + <source>Inactive</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="584"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="458"/> + <source>Confirm Deletion</source> + <translation>Conferma la cancellazione</translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="459"/> + <source>Are you sure you want to delete the selected key database?</source> + <translation>Vuoi davvero eliminare il database delle chiavi selezionato?</translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="597"/> <source>No Key Database Selected</source> - <translation type="unfinished"></translation> + <translation>Nessun database di chiavi selezionato</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="585"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="598"/> <source>Please select a key database to edit.</source> - <translation type="unfinished"></translation> + <translation>Selezionare un database chiave da modificare.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="606"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="619"/> <source>The edited key database path duplicates a previously existing one.</source> - <translation type="unfinished"></translation> + <translation>Il percorso del database delle chiavi modificato duplica un percorso già esistente.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="58"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="59"/> <source>Restart Gpg Agent on start</source> <translation>Riavvia l'agente Gpg all'avvio</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="60"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="61"/> <source>Kill all gnupg daemon at close</source> <translation>Elimina tutti i daemons gnupg alla chiusura</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="64"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="65"/> <source>Tips: please select a directory where "gpgconf" is located in.</source> <translation>Suggerimento: seleziona una directory in cui si trova "gpgconf".</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="66"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="67"/> <source>Tips: notice that modify any of these settings will cause an Application restart.</source> <translation>Suggerimenti: si noti che la modifica di una qualsiasi di queste impostazioni provocherà il riavvio dell'applicazione.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="107"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="108"/> <source>Open Directory</source> <translation>Apri Rubrica</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="183"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="184"/> <source>GnuPG Controller</source> <translation>Controllore GnuPG</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="331"/> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="338"/> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="350"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="328"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="335"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="347"/> <source>Illegal GnuPG Path</source> <translation>Percorso GnuPG illegale</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="332"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="329"/> <source>Target GnuPG Path is not an exists readable directory.</source> <translation>Target GnuPG Path non è una directory leggibile esistente.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="339"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="336"/> <source>Target GnuPG Path is not an absolute path.</source> <translation>Target GnuPG Path non è un percorso assoluto.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="351"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="348"/> <source>Target GnuPG Path contains no "gpgconf" executable.</source> <translation>Il percorso GnuPG di destinazione non contiene l'eseguibile "gpgconf".</translation> </message> @@ -1454,27 +1499,38 @@ This will result in loss of all cached form positions, statuses, key servers, et <context> <name>GpgFrontend::UI::GpgFrontendApplication</name> <message> - <location filename="../../../../src/ui/GpgFrontendApplication.cpp" line="71"/> + <location filename="../../../../src/ui/GpgFrontendApplication.cpp" line="77"/> <source>Standard Exception Thrown</source> <translation>Eccezione standard lanciata</translation> </message> <message> - <location filename="../../../../src/ui/GpgFrontendApplication.cpp" line="72"/> + <location filename="../../../../src/ui/GpgFrontendApplication.cpp" line="78"/> <source>Oops, an standard exception was thrown during the running of the program. This is not a serious problem, it may be the negligence of the programmer, please report this problem if you can.</source> <translation>Spiacenti, è stata generata un'eccezione standard durante l'esecuzione del programma. Questo non è un problema serio, potrebbe essere la negligenza del programmatore, per favore segnala questo problema se puoi.</translation> </message> <message> - <location filename="../../../../src/ui/GpgFrontendApplication.cpp" line="80"/> + <location filename="../../../../src/ui/GpgFrontendApplication.cpp" line="86"/> <source>Unhandled Exception Thrown</source> <translation>Eccezione non gestita generata</translation> </message> <message> - <location filename="../../../../src/ui/GpgFrontendApplication.cpp" line="81"/> + <location filename="../../../../src/ui/GpgFrontendApplication.cpp" line="87"/> <source>Oops, an unhandled exception was thrown during the running of the program. This is not a serious problem, it may be the negligence of the programmer, please report this problem if you can.</source> <translation>Spiacenti, è stata generata un'eccezione non gestita durante l'esecuzione del programma. Questo non è un problema serio, potrebbe essere la negligenza del programmatore, per favore segnala questo problema se puoi.</translation> </message> </context> <context> + <name>GpgFrontend::UI::GpgOperaHelper</name> + <message> + <location filename="../../../../src/ui/function/GpgOperaHelper.cpp" line="97"/> + <location filename="../../../../src/ui/function/GpgOperaHelper.cpp" line="133"/> + <location filename="../../../../src/ui/function/GpgOperaHelper.cpp" line="175"/> + <location filename="../../../../src/ui/function/GpgOperaHelper.cpp" line="213"/> + <source>Critical Error</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> <name>GpgFrontend::UI::InfoBoardWidget</name> <message> <location filename="../../../../src/ui/widgets/InfoBoardWidget.cpp" line="46"/> @@ -1499,7 +1555,7 @@ This will result in loss of all cached form positions, statuses, key servers, et <message> <location filename="../../../../src/ui/widgets/InfoBoardWidget.cpp" line="158"/> <source>Save Status Panel's Content</source> - <translation type="unfinished"></translation> + <translation>Salva il contenuto del Pannello di Stato</translation> </message> <message> <location filename="../../../../src/ui/widgets/InfoBoardWidget.cpp" line="166"/> @@ -1547,53 +1603,53 @@ This will result in loss of all cached form positions, statuses, key servers, et <message> <location filename="../../../../src/ui/dialog/help/AboutDialog.cpp" line="123"/> <source>Developer Information</source> - <translation type="unfinished"></translation> + <translation>Informazioni per gli sviluppatori</translation> </message> <message> <location filename="../../../../src/ui/dialog/help/AboutDialog.cpp" line="132"/> <source>Build Information</source> - <translation type="unfinished"></translation> + <translation>Informazioni sulla versione</translation> </message> </context> <context> <name>GpgFrontend::UI::IntroPage</name> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="71"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="70"/> <source>Getting Started...</source> <translation>Iniziamo...</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="72"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="71"/> <source>... with GpgFrontend</source> <translation>... con GpgFrontend</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="75"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="74"/> <source>Welcome to GpgFrontend for decrypting and signing text or files!</source> <translation>Benvenuti a GpgFrontend per decifrare e firmare testi o file!</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="77"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="76"/> <source>is a Powerful, Easy-to-Use, Compact, Cross-Platform, and Installation-Free OpenPGP Crypto Tool. </source> - <translation>è uno strumento di crittografia OpenPGP potente, facile da usare, compatto, multipiattaforma e senza installazione.</translation> + <translation>è.un potente strumento di crittografia OpenPGP, facile da usare, compatto, multipiattaforma e senza installazione. </translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="79"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="78"/> <source>To get started, be sure to check out the</source> <translation>Per iniziare, assicurati di controllare il</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="82"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="81"/> <source>by clicking the link, the page will open in your web browser</source> <translation>cliccando sul link la pagina si aprirà nel tuo browser web</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="81"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="80"/> <source>Overview</source> <translation>Panoramica</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="91"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="90"/> <source>If it supports the language currently being used in your system, GpgFrontend will automatically set it.</source> <translation>Se supporta la lingua attualmente in uso nel tuo sistema, GpgFrontend la imposterà automaticamente.</translation> </message> @@ -1601,54 +1657,59 @@ This will result in loss of all cached form positions, statuses, key servers, et <context> <name>GpgFrontend::UI::KeyDatabaseEditDialog</name> <message> - <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="47"/> + <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="50"/> <source>Key Database Name</source> - <translation type="unfinished"></translation> + <translation>Nome del Database delle Chiavi</translation> </message> <message> - <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="48"/> + <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="51"/> <source>Key Database Path</source> - <translation type="unfinished"></translation> + <translation>Percorso del Database delle Chiavi</translation> </message> <message> - <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="49"/> + <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="52"/> <source>Select A Key Database Path</source> - <translation type="unfinished"></translation> + <translation>Seleziona un percorso del Database delle Chiavi</translation> </message> <message> - <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="51"/> - <source>Key Database Info</source> + <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="53"/> + <source>Convert to Relative Path</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="55"/> + <source>Key Database Info</source> + <translation>Informazioni sul Database delle Chiavi</translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="59"/> <source>Open Directory</source> - <translation type="unfinished">Apri Rubrica</translation> + <translation>Apri Rubrica</translation> </message> <message> - <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="58"/> + <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="62"/> <source>Illegal GnuPG Key Database Path</source> - <translation type="unfinished">Percorso illegale del database delle chiavi GnuPG</translation> + <translation>Percorso illegale del Database delle Chiavi GnuPG</translation> </message> <message> - <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="59"/> + <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="63"/> <source>Target GnuPG Key Database Path is not an exists readable directory.</source> - <translation type="unfinished">Il percorso del database delle chiavi di GnuPG di destinazione non è una directory leggibile esistente.</translation> + <translation>Il percorso del Database di Chiavi di GnuPG di destinazione non è una directory leggibile esistente.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="81"/> + <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="85"/> <source>The key database name cannot be empty.</source> - <translation type="unfinished"></translation> + <translation>Il nome del Databese di Chiavi non può essere vuoto.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="86"/> + <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="90"/> <source>The key database path cannot be empty.</source> - <translation type="unfinished"></translation> + <translation>Il percorso del Databese di Chiavi non può essere vuoto.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="92"/> + <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="96"/> <source>A key database with the name '%1' already exists. Please choose a different name.</source> - <translation type="unfinished"></translation> + <translation>Esiste già un Database di Chiavi con il nome '%1'. Scegli un nome diverso.</translation> </message> </context> <context> @@ -1666,7 +1727,7 @@ This will result in loss of all cached form positions, statuses, key servers, et <message> <location filename="../../../../src/ui/dialog/keypair_details/KeyDetailsDialog.cpp" line="55"/> <source>Keychain</source> - <translation type="unfinished"></translation> + <translation>Portachiavi</translation> </message> <message> <location filename="../../../../src/ui/dialog/keypair_details/KeyDetailsDialog.cpp" line="58"/> @@ -1680,144 +1741,250 @@ This will result in loss of all cached form positions, statuses, key servers, et </message> </context> <context> - <name>GpgFrontend::UI::KeyGenDialog</name> + <name>GpgFrontend::UI::KeyGenPage</name> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="66"/> - <source>Generate Key</source> - <translation>Genera chiave</translation> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="163"/> + <source>Create a keypair...</source> + <translation>Crea una coppia di chiavi...</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="100"/> - <source>Name must contain at least five characters.</source> - <translation>Il nome deve contenere almeno cinque caratteri.</translation> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="164"/> + <source>...for decrypting and signing messages</source> + <translation>...per decifrare e firmare i messaggi</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="105"/> - <source>Please give a email address.</source> - <translation>Si prega di fornire un indirizzo e-mail.</translation> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="166"/> + <source>You should create a new keypair.The pair consists of a public and a private key.<br>Other users can use the public key to encrypt messages for you and verify messages signed by you.You can use the private key to decrypt and sign messages.<br>For more information have a look at the offline tutorial (which then is shown in the main window):</source> + <translation>Dovresti creare una nuova coppia di chiavi.La coppia è composta da una chiave pubblica e una privata.<br>Gli altri utenti possono utilizzare la chiave pubblica per cifrare i messaggi per te e verificare i messaggi firmati da te.Puoi utilizzare la chiave privata per decifrare e firmare messaggi.<br>Per maggiori informazioni dai un'occhiata al tutorial offline (che poi viene mostrato nella finestra principale):</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="113"/> - <source>Expiration time too long.</source> - <translation>Tempo di scadenza troppo lungo.</translation> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="178"/> + <source>Offline tutorial</source> + <translation>Tutorial offline</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="158"/> - <source>Generating</source> - <translation>Generazione</translation> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="182"/> + <source>Create New Key</source> + <translation>Crea nuova chiave</translation> </message> +</context> +<context> + <name>GpgFrontend::UI::KeyGenerateDialog</name> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="169"/> - <source>Error</source> - <translation>Errore</translation> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="63"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="70"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="578"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="584"/> + <source>Custom</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="170"/> - <source>Unknown error occurred</source> - <translation>Si è verificato un errore sconosciuto</translation> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="71"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="527"/> + <source>3 Months</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="206"/> - <source>Key Usage</source> - <translation>Utilizzo dei tasti</translation> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="72"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="532"/> + <source>6 Months</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="208"/> - <source>Encryption</source> - <translation>Crittografia</translation> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="73"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="537"/> + <source>1 Year</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="211"/> - <source>Signing</source> - <translation>Firma</translation> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="74"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="139"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="144"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="542"/> + <source>2 Years</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="214"/> - <source>Certification</source> - <translation>Certificazione</translation> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="75"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="547"/> + <source>5 Years</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="217"/> - <source>Authentication</source> - <translation>Autenticazione</translation> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="76"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="552"/> + <source>10 Years</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="455"/> - <source>Key Database</source> - <translation type="unfinished">Database delle chiavi</translation> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="77"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="100"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="109"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="558"/> + <source>Non Expired</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="81"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="290"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="589"/> + <source>Primary Key Only</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="82"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="338"/> + <source>Primary Key With Subkey</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="456"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="85"/> <source>Name</source> - <translation>Nome</translation> + <translation type="unfinished">Nome</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="457"/> - <source>Email Address</source> - <translation>Indirizzo email</translation> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="86"/> + <source>Email</source> + <translation type="unfinished">E-mail</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="458"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="87"/> <source>Comment</source> - <translation>Commento</translation> + <translation type="unfinished">Commento</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="459"/> - <source>Expiration Date</source> - <translation>Data di scadenza</translation> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="88"/> + <source>Key Database</source> + <translation type="unfinished">Database delle chiavi</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="460"/> - <source>Never Expire</source> - <translation>Non scade mai</translation> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="89"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="92"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="102"/> + <source>Algorithm</source> + <translation type="unfinished">Algoritmo</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="461"/> - <source>KeySize (in Bit)</source> - <translation>Dimensione chiave (in bit)</translation> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="90"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="93"/> + <source>Validity Period</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="462"/> - <source>Key Type</source> - <translation>Tipo di chiave</translation> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="94"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="104"/> + <source>Key Length</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="463"/> - <source>Non Pass Phrase</source> - <translation>Non Pass Phrase</translation> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="95"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="105"/> + <source>Usage</source> + <translation type="unfinished">Utilizzo</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="477"/> - <source>Basic Information</source> - <translation>Informazioni di base</translation> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="96"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="106"/> + <source>Encrypt</source> + <translation type="unfinished">Cifra</translation> </message> -</context> -<context> - <name>GpgFrontend::UI::KeyGenPage</name> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="164"/> - <source>Create a keypair...</source> - <translation>Crea una coppia di chiavi...</translation> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="97"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="107"/> + <source>Sign</source> + <translation type="unfinished">Firma</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="165"/> - <source>...for decrypting and signing messages</source> - <translation>...per decifrare e firmare i messaggi</translation> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="98"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="108"/> + <source>Authentication</source> + <translation type="unfinished">Autenticazione</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="167"/> - <source>You should create a new keypair.The pair consists of a public and a private key.<br>Other users can use the public key to encrypt messages for you and verify messages signed by you.You can use the private key to decrypt and sign messages.<br>For more information have a look at the offline tutorial (which then is shown in the main window):</source> - <translation>Dovresti creare una nuova coppia di chiavi.La coppia è composta da una chiave pubblica e una privata.<br>Gli altri utenti possono utilizzare la chiave pubblica per crittografare i messaggi per te e verificare i messaggi firmati da te.Puoi utilizzare la chiave privata per decrittografare e firmare messaggi.<br>Per maggiori informazioni dai un'occhiata al tutorial offline (che poi viene mostrato nella finestra principale):</translation> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="99"/> + <source>No Passphrase</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="179"/> - <source>Offline tutorial</source> - <translation>Tutorial offline</translation> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="103"/> + <source>Expire Date</source> + <translation type="unfinished">Data di scadenza</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="183"/> - <source>Create New Key</source> - <translation>Crea nuova chiave</translation> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="112"/> + <source>Easy Mode</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="113"/> + <source>Primary Key</source> + <translation type="unfinished">Chiave primaria</translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="114"/> + <source>Subkey</source> + <translation type="unfinished">Sottochiave</translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="117"/> + <source>Generate</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="134"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="261"/> + <source>None</source> + <translation type="unfinished">Nessuno</translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="146"/> + <source>Generate Key</source> + <translation type="unfinished">Genera chiave</translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="156"/> + <source>Name must contain at least five characters.</source> + <translation type="unfinished">Il nome deve contenere almeno cinque caratteri.</translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="161"/> + <source>Please give a valid email address.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="166"/> + <source>Please give a valid primary key algorithm.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="175"/> + <source>Time to primary key expiration must not be less than 120 seconds.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="182"/> + <source>Please give a valid subkey algorithm.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="190"/> + <source>Time to subkey expiration must not be less than 120 seconds.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="617"/> + <source>Error</source> + <translation type="unfinished">Errore</translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="618"/> + <source>Unknown error occurred</source> + <translation type="unfinished">Si è verificato un errore sconosciuto</translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="630"/> + <source>Generating</source> + <translation type="unfinished">Generazione</translation> </message> </context> <context> @@ -1937,122 +2104,132 @@ This will result in loss of all cached form positions, statuses, key servers, et <context> <name>GpgFrontend::UI::KeyList</name> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="254"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="250"/> <source>Refresh</source> <translation>Ricaricare</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="256"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="252"/> <source>Refresh the key list to synchronize changes.</source> <translation>Aggiorna l'elenco delle chiavi per sincronizzare le modifiche.</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="257"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="253"/> <source>Sync Public Key</source> <translation>Sincronizza chiave pubblica</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="259"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="255"/> <source>Sync public key with your default keyserver.</source> <translation>Sincronizza la chiave pubblica con il tuo server di chiavi predefinito.</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="260"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="256"/> <source>Uncheck ALL</source> <translation>Deseleziona tutto</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="262"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="258"/> <source>Cancel all checked items in the current tab at once.</source> <translation>Annulla contemporaneamente tutti gli elementi selezionati nella scheda corrente.</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="263"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="259"/> <source>Check ALL</source> <translation>Seleziona tutto</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="265"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="261"/> <source>Check all items in the current tab at once</source> <translation>Controlla tutti gli elementi nella scheda corrente contemporaneamente</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="266"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="262"/> <source>Search for keys...</source> <translation>Cerca chiavi...</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="108"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="106"/> <source>Key ID</source> <translation>ID chiave</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="119"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="117"/> <source>Algorithm</source> - <translation type="unfinished">Algoritmo</translation> + <translation>Algoritmo</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="130"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="128"/> <source>Owner Trust</source> - <translation type="unfinished"></translation> + <translation>Fiducia del proprietario</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="142"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="140"/> <source>Create Date</source> - <translation type="unfinished">Crea Data</translation> + <translation>Crea Data</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="154"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="152"/> <source>Subkey(s)</source> - <translation type="unfinished"></translation> + <translation>Sottochiave(i)</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="168"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="166"/> <source>Comment</source> - <translation type="unfinished">Commento</translation> + <translation>Commento</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="300"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="296"/> <source>Refreshing Key List...</source> <translation>Aggiornamento elenco chiavi...</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="477"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="473"/> <source>Import Keys</source> <translation>Importa chiavi</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="479"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="475"/> <source>You've dropped something on the table.</source> <translation>Hai lasciato cadere qualcosa sul tavolo.</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="480"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="476"/> <source>GpgFrontend will now try to import key(s).</source> <translation>GpgFrontend ora proverà a importare le chiavi.</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="483"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="479"/> <source>Always import without bothering.</source> <translation>Importa sempre senza preoccuparti.</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="305"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="645"/> + <source>Error</source> + <translation type="unfinished">Errore</translation> + </message> + <message> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="645"/> + <source>Key Not Found.</source> + <translation type="unfinished">Chiave non trovata.</translation> + </message> + <message> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="301"/> <source>Key List Refreshed.</source> <translation>Elenco chiavi aggiornato.</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="600"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="577"/> <source>Syncing Key List...</source> <translation>Sincronizzazione elenco chiavi...</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="609"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="586"/> <source>Sync [%1/%2] %3 %4</source> <translation>Sincronizzazione [%1/%2] %3 %4</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="619"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="596"/> <source>Key List Sync Done.</source> <translation>Sincronizzazione elenco chiavi eseguita.</translation> </message> @@ -2060,368 +2237,354 @@ This will result in loss of all cached form positions, statuses, key servers, et <context> <name>GpgFrontend::UI::KeyMgmt</name> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="58"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="59"/> <source>All</source> <translation>Tutti</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="63"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="64"/> <source>Only Public Key</source> <translation>Solo chiave pubblica</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="70"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="71"/> <source>Has Private Key</source> <translation>Ha una chiave privata</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="77"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="78"/> <source>No Primary Key</source> <translation>Nessuna chiave primaria</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="86"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="87"/> <source>Revoked</source> <translation>Revocato</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="93"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="94"/> <source>Expired</source> <translation>Scaduto</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="117"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="114"/> <source>KeyPair Management</source> <translation>Gestione delle coppie di chiavi</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="138"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="135"/> <source>Open</source> <translation>Apri</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="140"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="137"/> <source>Open Key File</source> <translation>Apri file chiave</translation> </message> <message> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="143"/> <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="146"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="149"/> <source>Close</source> <translation>Chiudi</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="152"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="149"/> <source>New Keypair</source> <translation>Nuova coppia di chiavi</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="155"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="152"/> <source>Generate KeyPair</source> <translation>Genera coppia di chiavi</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="159"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="156"/> <source>New Subkey</source> <translation>Nuova sottochiave</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="163"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="160"/> <source>Generate Subkey For Selected KeyPair</source> <translation>Genera sottochiave per la coppia di chiavi selezionata</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="167"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="266"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="164"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="262"/> <source>File</source> <translation>File</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="169"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="166"/> <source>Import New Key From File</source> <translation>Importa nuova chiave da file</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="175"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="172"/> <source>Clipboard</source> <translation>Appunti</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="179"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="176"/> <source>Import New Key From Clipboard</source> <translation>Importa nuova chiave dagli appunti</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="191"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="187"/> <source>Keyserver</source> <translation>Server delle chiavi</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="195"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="191"/> <source>Import New Key From Keyserver</source> <translation>Importa nuova chiave dal server delle chiavi</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="202"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="568"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="198"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="543"/> <source>Key Package</source> <translation>Pacchetto chiave</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="205"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="201"/> <source>Import Key(s) From a Key Package</source> <translation>Importa chiavi da un pacchetto di chiavi</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="209"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="205"/> <source>Export To Clipboard</source> <translation>Esporta negli appunti</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="213"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="209"/> <source>Export Checked Key(s) To Clipboard</source> <translation>Esporta le chiavi selezionate negli appunti</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="217"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="213"/> <source>Export As Key Package</source> <translation>Esporta come pacchetto chiave</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="220"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="216"/> <source>Export Checked Key(s) To a Key Package</source> <translation>Esporta chiavi selezionate in un pacchetto di chiavi</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="224"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="220"/> <source>Export As OpenSSH</source> <translation>Esporta come OpenSSH</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="227"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="223"/> <source>Export Checked Key As OpenSSH Format to File</source> <translation>Esporta la chiave verificata in formato OpenSSH nel file</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="231"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="227"/> <source>Delete Selected Key(s)</source> <translation>Elimina chiavi selezionate</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="233"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="229"/> <source>Delete the Selected keys</source> <translation>Elimina le chiavi selezionate</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="237"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="233"/> <source>Delete Checked Key(s)</source> <translation>Elimina chiavi selezionate</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="239"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="235"/> <source>Delete the Checked keys</source> <translation>Elimina le chiavi selezionate</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="244"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="240"/> <source>Show Key Details</source> <translation>Mostra dettagli chiave</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="246"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="242"/> <source>Show Details for this Key</source> <translation>Mostra dettagli per questa chiave</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="250"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="252"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="246"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="248"/> <source>Set Owner Trust Level</source> <translation>Imposta il livello di attendibilità del proprietario</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="270"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="290"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="266"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="286"/> <source>Key</source> <translation>Chiave</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="271"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="267"/> <source>Generate Key</source> <translation>Genera chiave</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="275"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="303"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="271"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="299"/> <source>Import Key</source> <translation>Importa chiave</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="281"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="311"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="312"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="277"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="307"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="308"/> <source>Export Key</source> <translation>Chiave di esportazione</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="302"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="298"/> <source>Import key</source> <translation>Importa chiave</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="347"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="343"/> <source>Deleting Keys</source> <translation>Cancellazione chiavi</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="348"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="344"/> <source>Are you sure that you want to delete the following keys?</source> <translation>Sei sicuro di voler eliminare le seguenti chiavi?</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="350"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="346"/> <source>The action can not be undone.</source> <translation>L'azione non può essere annullata.</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="368"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="431"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="443"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="473"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="522"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="533"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="546"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="577"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="585"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="601"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="609"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="625"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="418"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="430"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="497"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="508"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="521"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="552"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="560"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="576"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="584"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="600"/> <source>Error</source> <translation>Errore</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="368"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="473"/> - <source>Key Not Found.</source> - <translation>Chiave non trovata.</translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="379"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="393"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="493"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="499"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="367"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="381"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="469"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="475"/> <source>Forbidden</source> <translation>Vietato</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="380"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="394"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="368"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="382"/> <source>Please check some keys before doing this operation.</source> <translation>Si prega di controllare alcune chiavi prima di eseguire questa operazione.</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="386"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="560"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="374"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="535"/> <source>key(s) exported</source> <translation>chiavi esportate</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="421"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="512"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="408"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="487"/> <source>Exporting</source> - <translation>Sto espotando</translation> + <translation>Sto spotando</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="432"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="444"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="523"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="534"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="419"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="431"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="498"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="509"/> <source>Unknown error occurred</source> <translation>Si è verificato un errore sconosciuto</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="465"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="477"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="453"/> <source>Invalid Operation</source> <translation>Operazione non valida</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="466"/> - <source>Please select one KeyPair before doing this operation.</source> - <translation>Si prega di selezionare un KeyPair prima di eseguire questa operazione.</translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="478"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="454"/> <source>If a key pair does not have a private key then it will not be able to generate sub-keys.</source> <translation>Se una coppia di chiavi non dispone di una chiave privata, non sarà in grado di generare sottochiavi.</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="494"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="470"/> <source>Please check a key before performing this operation.</source> <translation>Si prega di controllare una chiave prima di eseguire questa operazione.</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="500"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="476"/> <source>This operation accepts just a single key.</source> <translation>Questa operazione accetta una sola chiave.</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="547"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="522"/> <source>This key may not be able to export as OpenSSH format. Please check the key-size of the subkey(s) used to sign.</source> <translation>Questa chiave potrebbe non essere in grado di esportare come formato OpenSSH. Controlla la dimensione della chiave della/e sottochiave/i utilizzata/e per firmare.</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="555"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="530"/> <source>Export OpenSSH Key To File</source> <translation>Esporta chiave OpenSSH in file</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="556"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="531"/> <source>OpenSSH Public Key Files</source> <translation>File di chiavi pubbliche OpenSSH</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="568"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="543"/> <source>Import Key Package</source> <translation>Importa pacchetto chiave</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="578"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="602"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="553"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="577"/> <source>Cannot open this file. Please make sure that this is a regular file and it's readable.</source> <translation>Impossibile aprire questo file. Assicurati che questo sia un file regolare e che sia leggibile.</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="586"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="561"/> <source>The target file is too large for a key package.</source> <translation>Il file di destinazione è troppo grande per un pacchetto chiave.</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="591"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="566"/> <source>Import Key Package Passphrase File</source> <translation>Importa file passphrase pacchetto chiave</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="592"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="567"/> <source>Key Package Passphrase File</source> <translation>File di passphrase del pacchetto chiave</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="610"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="585"/> <source>The target file is too large for a key package passphrase.</source> <translation>Il file di destinazione è troppo grande per un pacchetto chiave.</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="615"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="590"/> <source>Importing</source> <translation>Sto importando</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="632"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="607"/> <source>key(s) imported</source> <translation>chiavi importate</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="626"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="601"/> <source>An error occur in importing key package.</source> <translation>Si è verificato un errore durante l'importazione del pacchetto di chiavi.</translation> </message> @@ -2587,7 +2750,7 @@ This will result in loss of all cached form positions, statuses, key servers, et <location filename="../../../../src/ui/dialog/keypair_details/KeyPairDetailTab.cpp" line="221"/> <location filename="../../../../src/ui/dialog/keypair_details/KeyPairDetailTab.cpp" line="234"/> <source>Encrypt</source> - <translation>Crittografa</translation> + <translation>Cifra</translation> </message> <message> <location filename="../../../../src/ui/dialog/keypair_details/KeyPairDetailTab.cpp" line="222"/> @@ -2624,215 +2787,218 @@ This will result in loss of all cached form positions, statuses, key servers, et <message> <location filename="../../../../src/ui/dialog/keypair_details/KeyPairDetailTab.cpp" line="290"/> <source>Warning: The primary key is not exists.</source> - <translation type="unfinished"></translation> + <translation>Attenzione: la chiave primaria non esiste.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairDetailTab.cpp" line="350"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairDetailTab.cpp" line="344"/> <source>Notice: The public key has been published on keys.openpgp.org.</source> - <translation type="unfinished"></translation> + <translation>Avviso: la chiave pubblica è stata pubblicata su keys.openpgp.org.</translation> </message> </context> <context> <name>GpgFrontend::UI::KeyPairOperaTab</name> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="62"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="61"/> <source>General Operations</source> <translation>Operazioni generali</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="68"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="67"/> <source>Export Public Key</source> <translation>Esporta chiave pubblica</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="74"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="73"/> <source>Export Private Key</source> <translation>Esporta chiave privata</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="81"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="80"/> <source>Modify Expiration Datetime (Primary Key)</source> <translation>Modifica data e ora di scadenza (chiave primaria)</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="84"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="83"/> <source>Modify Password</source> <translation>Modifica password</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="208"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="207"/> <source>Generate Revoke Certificate</source> <translation>Genera certificato revoca</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="125"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="124"/> <source>Modify TOFU Policy</source> <translation>Modifica la politica TOFU</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="101"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="100"/> <source>Key Server Operations</source> - <translation type="unfinished"></translation> + <translation>Operazioni sul Server delle Chiavi</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="109"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="689"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="108"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="687"/> <source>Import A Paper Key</source> - <translation type="unfinished"></translation> + <translation>Importa una Chiave Cartacea</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="119"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="118"/> <source>Revoke Certificate Operation</source> <translation>Revoca operazione certificato</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="132"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="131"/> <source>Set Owner Trust Level</source> <translation>Imposta il livello di attendibilità del proprietario</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="179"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="178"/> <source>Export Full Secret Key</source> <translation>Esporta chiave segreta completa</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="185"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="184"/> <source>Export Shortest Secret Key</source> <translation>Esporta la chiave segreta più breve</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="213"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="212"/> <source>Import Revoke Certificate</source> <translation>Importa Revoca Certificato</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="242"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="291"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="342"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="635"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="241"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="290"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="341"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="633"/> <source>Export Key To File</source> <translation>Esporta chiave in file</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="243"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="292"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="343"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="636"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="242"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="291"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="342"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="634"/> <source>Key Files</source> <translation>File chiave</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="248"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="297"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="348"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="659"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="247"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="296"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="347"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="657"/> <source>Export Error</source> <translation>Errore di esportazione</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="249"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="298"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="349"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="660"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="248"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="297"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="348"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="658"/> <source>Couldn't open %1 for writing</source> <translation>Impossibile aprire %1 per scrittura</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="196"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="195"/> <source>Export Secret Key As A Paper Key</source> - <translation type="unfinished"></translation> + <translation>Esporta la Chiave Segreta come Chiave Cartacea</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="256"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="307"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="596"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="255"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="306"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="594"/> <source>WARNING: You are about to export your</source> - <translation type="unfinished"></translation> + <translation>ATTENZIONE: Stai per esportare il tuo</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="257"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="308"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="597"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="256"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="307"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="595"/> <source>PRIVATE KEY</source> - <translation type="unfinished"></translation> + <translation>CHIAVE PRIVATA</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="258"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="598"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="257"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="596"/> <source>This is NOT your Public Key, so <b>DO NOT</b> share it with anyone.</source> - <translation type="unfinished"></translation> + <translation>Questa NON è la tua chiave pubblica, quindi <b>NON</b> condividerla con nessuno.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="261"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="260"/> <source>You are exporting a <b>minimum size</b> private key, which removes all signatures except for the latest self-signatures.</source> - <translation type="unfinished"></translation> + <translation>Si sta esportando una chiave privata di <b>dimensione minima</b>, che rimuove tutte le firme ad eccezione delle autofirme più recenti.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="263"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="262"/> <source>Do you <b>REALLY</b> want to proceed?</source> - <translation type="unfinished"></translation> + <translation>Vuoi <b>DAVVERO</b> procedere?</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="265"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="264"/> <source>Exporting Short Private Key</source> - <translation type="unfinished"></translation> + <translation>Esportazione di una Chiave Privata corta</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="309"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="308"/> <source>This operation will export your <b>private key</b>, including both the main key and all subkeys, into an external file. This key is extremely sensitive, and anyone with access to it can impersonate you. DO NOT share this file with anyone!</source> - <translation type="unfinished"></translation> + <translation>Questa operazione esporterà la tua <b>chiave privata</b>, inclusa sia la chiave principale che tutte le sottochiavi, in un file esterno. Questa chiave è estremamente sensibile e chiunque vi abbia accesso può impersonarti. NON condividere questo file con nessuno!</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="315"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="608"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="314"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="606"/> <source>Are you <b>ABSOLUTELY SURE</b> you want to proceed?</source> - <translation type="unfinished"></translation> + <translation>Sei <b>ASSOLUTAMENTE SICURO</b> di voler procedere?</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="318"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="317"/> <source>Exporting Private Key</source> - <translation type="unfinished"></translation> + <translation>Esportazione della chiave privata</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="390"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="389"/> <source>Key Upload Failed</source> - <translation type="unfinished"></translation> + <translation>Caricamento chiave non riuscito</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="406"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="405"/> <source>The following email addresses have status: </source> - <translation type="unfinished"></translation> + <translation>I seguenti indirizzi email hanno lo stato: +</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="418"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="417"/> <source>Could not parse status information.</source> - <translation type="unfinished"></translation> + <translation>Impossibile analizzare le informazioni sullo stato.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="391"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="390"/> <source>Failed to upload public key to the server. Fingerprint: %1 Error: %2</source> - <translation type="unfinished"></translation> + <translation>Impossibile caricare la chiave pubblica sul server. +Impronta digitale: %1 +Errore: %2</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="156"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="155"/> <source>Publish Public Key to Key Server</source> - <translation type="unfinished"></translation> + <translation>Pubblica la Chiave Pubblica sul Server delle Chiavi</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="164"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="163"/> <source>Refresh Public Key From Key Server</source> - <translation type="unfinished"></translation> + <translation>Aggiorna la chiave pubblica dal Server delle Chiavi</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="423"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="422"/> <source>Public Key Upload Successful</source> - <translation type="unfinished"></translation> + <translation>Caricamento Chiave Pubblica riuscito</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="424"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="423"/> <source>The public key was successfully uploaded to the key server keys.openpgp.org. Fingerprint: %1 @@ -2840,174 +3006,180 @@ Fingerprint: %1 Please check your email (%3) for further verification from keys.openpgp.org. Note: For verification, you can find more information here: https://keys.openpgp.org/about</source> - <translation type="unfinished"></translation> + <translation>La chiave pubblica è stata caricata correttamente sul server delle chiavi keys.openpgp.org. +Impronta digitale: %1 + +%2 +Controlla la tua email (%3) per un'ulteriore verifica da keys.openpgp.org. + +Nota: per la verifica, puoi trovare maggiori informazioni qui: https://keys.openpgp.org/about</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="458"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="456"/> <source>0 -> No Reason.</source> - <translation type="unfinished"></translation> + <translation>0 -> Nessun motivo.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="458"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="456"/> <source>1 -> This key is no more safe.</source> - <translation type="unfinished"></translation> + <translation>1 -> Questa chiave non è più sicura.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="459"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="457"/> <source>2 -> Key is outdated.</source> - <translation type="unfinished"></translation> + <translation>2 -> La chiave è obsoleta.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="459"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="457"/> <source>3 -> Key is no longer used</source> - <translation type="unfinished"></translation> + <translation>3 -> La chiave non è più utilizzata</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="466"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="555"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="464"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="553"/> <source>Revocation Certificates</source> <translation>Certificati di revoca</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="477"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="475"/> <source>Generate revocation certificate</source> <translation></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="504"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="513"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="502"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="511"/> <source>Policy Auto</source> <translation>Criterio automatico</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="504"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="515"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="502"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="513"/> <source>Policy Good</source> <translation>Politica buona</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="504"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="517"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="502"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="515"/> <source>Policy Bad</source> <translation>Politica scadente</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="505"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="519"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="503"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="517"/> <source>Policy Ask</source> <translation>Politica Chiedi</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="505"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="521"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="503"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="519"/> <source>Policy Unknown</source> <translation>Politica sconosciuta</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="509"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="507"/> <source>Modify TOFU Policy(Default is Auto)</source> <translation>Modifica la politica TOFU (l'impostazione predefinita è Auto)</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="510"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="508"/> <source>Policy for the Key Pair:</source> <translation>Politica per la coppia di chiavi:</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="527"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="525"/> <source>Not Successful</source> <translation>Senza successo</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="528"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="526"/> <source>Modify TOFU policy not successfully.</source> <translation>Modifica criterio TOFU non correttamente.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="542"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="554"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="540"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="552"/> <source>Import Key Revocation Certificate</source> <translation>Importa certificato di revoca chiave</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="543"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="541"/> <source>You are about to import the</source> <translation>Stai per importare il</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="544"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="542"/> <source>REVOCATION CERTIFICATE</source> <translation>CERTIFICATO DI REVOCA</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="545"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="543"/> <source>A successful import will result in the key being irreversibly revoked.</source> <translation>Un'importazione riuscita comporterà la revoca irreversibile della chiave.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="547"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="545"/> <source>Do you REALLY want to execute this operation?</source> <translation>Vuoi VERAMENTE eseguire questa operazione?</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="563"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="572"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="581"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="652"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="698"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="706"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="714"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="732"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="561"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="570"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="579"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="650"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="696"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="704"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="712"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="730"/> <source>Error</source> <translation>Errore</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="564"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="582"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="699"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="715"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="562"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="580"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="697"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="713"/> <source>Cannot open this file. Please make sure that this is a regular file and it's readable.</source> <translation>Impossibile aprire questo file. Assicurati che questo sia un file regolare e che sia leggibile.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="573"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="571"/> <source>The target file is too large for a key revocation certificate.</source> <translation>Il file di destinazione è troppo grande per un certificato di revoca della chiave.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="601"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="599"/> <source>A <b>PaperKey</b> is a human-readable printout of your private key, which can be used to recover your key if you lose access to your digital copy. </source> - <translation type="unfinished"></translation> + <translation>Una <b>PaperKey (Chiave Cartacea)</b> è una stampa leggibile della tua chiave privata, che può essere utilizzata per recuperarla se perdi l'accesso alla copia digitale. </translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="605"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="603"/> <source>Keep this paper copy in a safe and secure place, such as a fireproof safe or a trusted vault.</source> - <translation type="unfinished"></translation> + <translation>Conserva questa copia cartacea in un luogo sicuro e protetto, come una cassaforte ignifuga o un caveau di fiducia.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="611"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="609"/> <source>Exporting Private Key as a PaperKey</source> - <translation type="unfinished"></translation> + <translation>Esportazione della chiave privata come PaperKey (Chiave Cartacea)</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="653"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="651"/> <source>An error occurred trying to generate Paper Key.</source> - <translation type="unfinished"></translation> + <translation>Si è verificato un errore durante il tentativo di generare Paper Key (Chiave Cartacea).</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="690"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="688"/> <source>Paper Key File</source> - <translation type="unfinished"></translation> + <translation>File Chiave Cartacea</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="707"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="705"/> <source>The target file is too large for a paper key keyring.</source> - <translation type="unfinished"></translation> + <translation>Il file di destinazione è troppo grande per un portachiavi cartaceo.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="733"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="731"/> <source>An error occurred trying to recover the Paper Key back to the private key.</source> - <translation type="unfinished"></translation> + <translation>Si è verificato un errore durante il tentativo di recuperare la chiave cartacea dalla chiave privata.</translation> </message> </context> <context> @@ -3074,29 +3246,29 @@ Note: For verification, you can find more information here: https://keys.openpgp <message> <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="55"/> <source>List of the primary key and subkey(s)</source> - <translation type="unfinished"></translation> + <translation>Elenco della chiave primaria e della(e) sottochiave(i)</translation> </message> <message> <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="56"/> <source>Detail of Selected Primary Key/Subkey</source> - <translation type="unfinished"></translation> + <translation>Dettaglio della chiave primaria/sottochiave selezionata</translation> </message> <message> <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="78"/> <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="183"/> <source>Key Type</source> - <translation type="unfinished">Tipo di chiave</translation> + <translation>Tipo di chiave</translation> </message> <message> <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="89"/> <source>Revoked</source> - <translation type="unfinished">Revocato</translation> + <translation>Revocata</translation> </message> <message> <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="124"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="353"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="351"/> <source>Export Subkey</source> - <translation type="unfinished"></translation> + <translation>Esporta Sottochiave</translation> </message> <message> <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="184"/> @@ -3109,229 +3281,229 @@ Note: For verification, you can find more information here: https://keys.openpgp <translation>Data di scadenza</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="209"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="359"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="208"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="355"/> <source>Primary Key</source> - <translation type="unfinished">Chiave primaria</translation> + <translation>Chiave primaria</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="210"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="359"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="209"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="356"/> <source>Subkey</source> - <translation type="unfinished">Sottochiave</translation> + <translation>Sottochiave</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="233"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="232"/> <source>Never Expire</source> <translation>Non scade mai</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="289"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="288"/> <source>Never Expires</source> <translation>Non scade mai</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="311"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="310"/> <source>Certificate</source> <translation>Certificato</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="313"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="312"/> <source>Encrypt</source> - <translation>Crittografa</translation> + <translation>Cifra</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="314"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="313"/> <source>Sign</source> <translation>Firma</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="315"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="314"/> <source>Auth</source> <translation>Aut</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="320"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="319"/> <source>Exists</source> <translation>Esiste</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="321"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="320"/> <source>Not Exists</source> <translation>Non esiste</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="324"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="361"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="323"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="358"/> <source>Yes</source> <translation>Sì</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="324"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="361"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="323"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="358"/> <source>No</source> <translation>No</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="352"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="351"/> <source>Export Primary Key</source> - <translation type="unfinished"></translation> + <translation>Esporta Chiave Primaria</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="375"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="372"/> <source>Edit Expire Date</source> <translation>Modifica data di scadenza</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="379"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="376"/> <source>Export</source> - <translation type="unfinished"></translation> + <translation>Esporta</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="383"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="380"/> <source>Delete</source> - <translation type="unfinished">Elimina</translation> + <translation>Elimina</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="387"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="384"/> <source>Revoke</source> - <translation type="unfinished"></translation> + <translation>Revoca</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="440"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="437"/> <source>Exporting Subkey</source> - <translation type="unfinished"></translation> + <translation>Esporto la sottochiave</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="441"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="438"/> <source>You are about to export a private subkey.</source> - <translation type="unfinished"></translation> + <translation>Stai per esportare una sottochiave privata.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="442"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="439"/> <source>While subkeys are less critical than the primary key, they should still be handled with care.</source> - <translation type="unfinished"></translation> + <translation>Sebbene le sottochiavi siano meno critiche della chiave primaria, è comunque opportuno gestirle con cura.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="445"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="442"/> <source>Do you want to proceed with exporting this subkey?</source> - <translation type="unfinished"></translation> + <translation>Vuoi procedere con l'esportazione di questa sottochiave?</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="472"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="469"/> <source>Export Key To File</source> - <translation type="unfinished">Esporta chiave in file</translation> + <translation>Esporta chiave in file</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="473"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="470"/> <source>Key Files</source> - <translation type="unfinished">File chiave</translation> + <translation>File chiave</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="478"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="475"/> <source>Export Error</source> - <translation type="unfinished">Errore di esportazione</translation> + <translation>Errore di esportazione</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="479"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="476"/> <source>Couldn't open %1 for writing</source> - <translation type="unfinished">Impossibile aprire %1 per scrittura</translation> + <translation>Impossibile aprire %1 per scrittura</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="488"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="485"/> <source><h3>You are about to delete the subkey:</h3><br /><b>KeyID:</b> %1<br /><br />This action is irreversible. Please confirm.</source> - <translation type="unfinished"></translation> + <translation><h3>Stai per eliminare la sottochiave:</h3><br /><b>KeyID:</b> %1<br /><br />Questa azione è irreversibile. Conferma.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="494"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="491"/> <source>Delete Subkey Confirmation</source> - <translation type="unfinished"></translation> + <translation>Conferma eliminazione sottochiave</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="509"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="559"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="506"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="556"/> <source>Illegal Operation</source> - <translation type="unfinished"></translation> + <translation>Operazione illegale</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="510"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="507"/> <source>Cannot delete the primary key or an invalid subkey.</source> - <translation type="unfinished"></translation> + <translation>Impossibile eliminare la chiave primaria o una sottochiave non valida.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="518"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="515"/> <source>Operation Failed</source> - <translation type="unfinished">Operazione fallita</translation> + <translation>Operazione fallita</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="519"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="516"/> <source>The selected subkey could not be deleted. Please check your permissions or try again.</source> - <translation type="unfinished"></translation> + <translation>La sottochiave selezionata non può essere eliminata. Controlla i tuoi permessi o riprova.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="525"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="522"/> <source>Operation Successful</source> - <translation type="unfinished"></translation> + <translation>Operazione riuscita</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="526"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="523"/> <source>The subkey with KeyID %1 has been successfully deleted.</source> - <translation type="unfinished"></translation> + <translation>La sottochiave con KeyID %1 è stata eliminata correttamente.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="536"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="533"/> <source><h3>Revoke Subkey Confirmation</h3><br /><b>KeyID:</b> %1<br /><br />Revoking a subkey will make it permanently unusable. This action is <b>irreversible</b>.<br />Are you sure you want to revoke this subkey?</source> - <translation type="unfinished"></translation> + <translation><h3>Conferma revoca sottochiave</h3><br /><b>KeyID:</b> %1<br /><br />La revoca di una sottochiave la renderà definitivamente inutilizzabile. Questa azione è <b>irreversibile</b>.<br />Sei sicuro di voler revocare questa sottochiave?</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="543"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="540"/> <source>Revoke Subkey</source> - <translation type="unfinished"></translation> + <translation>Revoca sottochiave</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="560"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="557"/> <source>Cannot revoke the primary key or an invalid subkey.</source> - <translation type="unfinished"></translation> + <translation>Impossibile revocare la chiave primaria o una sottochiave non valida.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="565"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="562"/> <source>0 -> No Reason.</source> - <translation type="unfinished"></translation> + <translation>0 -> Nessun motivo.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="565"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="562"/> <source>1 -> This key is no more safe.</source> - <translation type="unfinished"></translation> + <translation>1 -> Questa chiave non è più sicura.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="566"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="563"/> <source>2 -> Key is outdated.</source> - <translation type="unfinished"></translation> + <translation>2 -> La chiave è obsoleta.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="566"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="563"/> <source>3 -> Key is no longer used</source> - <translation type="unfinished"></translation> + <translation>3 -> La chiave non è più utilizzata</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="577"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="574"/> <source>Revocation Failed</source> - <translation type="unfinished"></translation> + <translation>Revoca non riuscita</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="578"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="575"/> <source>Failed to revoke the subkey. Please try again.</source> - <translation type="unfinished"></translation> + <translation>Impossibile revocare la sottochiave. Riprova.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="581"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="578"/> <source>Revocation Successful</source> - <translation type="unfinished"></translation> + <translation>Revoca riuscita</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="582"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="579"/> <source>The subkey has been successfully revoked.</source> - <translation type="unfinished"></translation> + <translation>La sottochiave è stata revocata correttamente.</translation> </message> </context> <context> @@ -3376,7 +3548,7 @@ Note: For verification, you can find more information here: https://keys.openpgp <message> <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="143"/> <source>Index</source> - <translation type="unfinished"></translation> + <translation>Indice</translation> </message> <message> <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="166"/> @@ -3407,50 +3579,50 @@ Note: For verification, you can find more information here: https://keys.openpgp <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="355"/> <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="481"/> <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="490"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="535"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="564"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="536"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="565"/> <source>Invalid Operation</source> <translation>Operazione non valida</translation> </message> <message> <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="364"/> <source>Are you sure that you want to delete the following UID?</source> - <translation type="unfinished"></translation> + <translation>Vuoi davvero eliminare il seguente UID?</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="542"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="543"/> <source><h3>Revoke UID Confirmation</h3><br /><b>UID:</b> %1<br /><br />Revoking a UID will make it permanently unusable. This action is <b>irreversible</b>.<br />Are you sure you want to revoke this UID?</source> - <translation type="unfinished"></translation> + <translation><h3>Revoca conferma UID</h3><br /><b>UID:</b> %1<br /><br />La revoca di un UID lo renderà definitivamente inutilizzabile. Questa azione è <b>irreversibile</b>.<br />Sei sicuro di voler revocare questo UID?</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="570"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="571"/> <source>0 -> No Reason.</source> - <translation type="unfinished"></translation> + <translation>0 -> Nessun motivo.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="570"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="571"/> <source>4 -> User ID is no longer valid.</source> - <translation type="unfinished"></translation> + <translation>4 -> L'ID utente non è più valido.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="581"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="582"/> <source>Revocation Failed</source> - <translation type="unfinished"></translation> + <translation>Revoca non riuscita</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="582"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="583"/> <source>Failed to revoke the UID. Please try again.</source> - <translation type="unfinished"></translation> + <translation></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="585"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="586"/> <source>Revocation Successful</source> - <translation type="unfinished"></translation> + <translation>Revoca riuscita</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="586"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="587"/> <source>The UID has been successfully revoked.</source> - <translation type="unfinished"></translation> + <translation>L'UID è stato revocato con successo.</translation> </message> <message> <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="330"/> @@ -3479,9 +3651,9 @@ Note: For verification, you can find more information here: https://keys.openpgp </message> <message> <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="356"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="565"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="566"/> <source>Cannot delete the Primary UID.</source> - <translation type="unfinished"></translation> + <translation>Impossibile eliminare l'UID primario.</translation> </message> <message> <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="361"/> @@ -3522,9 +3694,9 @@ Note: For verification, you can find more information here: https://keys.openpgp </message> <message> <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="431"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="549"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="550"/> <source>Revoke UID</source> - <translation type="unfinished"></translation> + <translation>Revoca l'UID</translation> </message> <message> <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="434"/> @@ -3532,7 +3704,7 @@ Note: For verification, you can find more information here: https://keys.openpgp <translation>Elimina UID</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="536"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="537"/> <source>Please select one UID before doing this operation.</source> <translation>Si prega di selezionare un UID prima di eseguire questa operazione.</translation> </message> @@ -3565,139 +3737,139 @@ Note: For verification, you can find more information here: https://keys.openpgp <context> <name>GpgFrontend::UI::KeyServerImportDialog</name> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="57"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="56"/> <source>Close</source> <translation>Chiudi</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="60"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="59"/> <source>Import ALL</source> <translation>Importa TUTTO</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="64"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="63"/> <source>Search</source> <translation>Ricerca</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="69"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="68"/> <source>Search String</source> <translation>Stringa di ricerca</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="69"/> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="73"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="68"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="72"/> <source>: </source> <translation>: </translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="73"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="72"/> <source>Key Server</source> <translation>Server chiave</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="114"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="113"/> <source>Import Keys from key server</source> - <translation type="unfinished"></translation> + <translation>Importa chiavi dal server delle chiavi</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="157"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="156"/> <source>UID</source> <translation>UID</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="157"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="156"/> <source>Creation date</source> <translation>Data di creazione</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="157"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="156"/> <source>KeyID</source> <translation>ID chiave</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="157"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="156"/> <source>Tag</source> <translation>Etichetta</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="180"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="179"/> <source>Text is empty.</source> <translation>Il testo è vuoto.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="223"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="222"/> <source>Not Key Found</source> <translation>Chiave non trovata</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="226"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="225"/> <source>Timeout</source> <translation>Tempo scaduto</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="229"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="228"/> <source>Key Server Not Found</source> <translation>Server chiave non trovato</translation> </message> <message> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="231"/> <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="232"/> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="233"/> <source>Connection Error</source> <translation>Errore di connessione</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="242"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="241"/> <source>Too many responses from keyserver!</source> <translation>Troppe risposte dal server delle chiavi!</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="254"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="253"/> <source>No keys found, input may be kexId, retrying search with 0x.</source> <translation>Nessuna chiave trovata, l'input potrebbe essere kexId, riprovando la ricerca con 0x.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="264"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="263"/> <source>No keys found containing the search string!</source> <translation>Nessuna chiave trovata contenente la stringa di ricerca!</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="271"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="270"/> <source>Insufficiently specific search string!</source> <translation>Stringa di ricerca non sufficientemente specifica!</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="306"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="305"/> <source>revoked</source> <translation>revocato</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="309"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="308"/> <source>disabled</source> <translation>disabilitato</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="354"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="353"/> <source>%1 keys found. Double click a key to import it.</source> <translation>%1 chiavi trovate. Fare doppio clic su una chiave per importarla.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="375"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="374"/> <source>Warning</source> <translation>Avvertimento</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="376"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="375"/> <source>Please select one KeyPair before doing this operation.</source> <translation>Si prega di selezionare un KeyPair prima di eseguire questa operazione.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="423"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="421"/> <source>Key Imported</source> <translation>Chiave importata</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="436"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="434"/> <source>Processing ...</source> <translation>Elaborazione in corso...</translation> </message> @@ -3705,27 +3877,27 @@ Note: For verification, you can find more information here: https://keys.openpgp <context> <name>GpgFrontend::UI::KeyServerImportTask</name> <message> - <location filename="../../../../src/ui/thread/KeyServerImportTask.cpp" line="78"/> + <location filename="../../../../src/ui/thread/KeyServerImportTask.cpp" line="81"/> <source>Key not found in the Keyserver.</source> <translation>Chiave non trovata nel Keyserver.</translation> </message> <message> - <location filename="../../../../src/ui/thread/KeyServerImportTask.cpp" line="81"/> + <location filename="../../../../src/ui/thread/KeyServerImportTask.cpp" line="84"/> <source>Network connection timeout.</source> <translation>Timeout della connessione di rete.</translation> </message> <message> - <location filename="../../../../src/ui/thread/KeyServerImportTask.cpp" line="84"/> + <location filename="../../../../src/ui/thread/KeyServerImportTask.cpp" line="87"/> <source>Cannot resolve the address of target key server.</source> <translation>Impossibile risolvere l'indirizzo del server chiave di destinazione.</translation> </message> <message> - <location filename="../../../../src/ui/thread/KeyServerImportTask.cpp" line="87"/> + <location filename="../../../../src/ui/thread/KeyServerImportTask.cpp" line="90"/> <source>General connection error occurred.</source> <translation>Si è verificato un errore di connessione generale.</translation> </message> <message> - <location filename="../../../../src/ui/thread/KeyServerImportTask.cpp" line="96"/> + <location filename="../../../../src/ui/thread/KeyServerImportTask.cpp" line="99"/> <source>Success</source> <translation>Successo</translation> </message> @@ -3753,22 +3925,17 @@ Note: For verification, you can find more information here: https://keys.openpgp <translation>Impossibile aggiornare la data di scadenza della coppia di chiavi.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeySetExpireDateDialog.cpp" line="135"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeySetExpireDateDialog.cpp" line="124"/> <source>Modified Expiration Date (Local Time)</source> <translation>Data di scadenza modificata (ora locale)</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeySetExpireDateDialog.cpp" line="136"/> - <source>Tips: For the sake of security, the key is valid for up to two years. If you are an expert user, please unlock it for a longer time in the settings.</source> - <translation>Suggerimenti: per motivi di sicurezza, la chiave è valida fino a due anni. Se sei un utente esperto, sbloccalo più a lungo nelle impostazioni.</translation> - </message> - <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeySetExpireDateDialog.cpp" line="140"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeySetExpireDateDialog.cpp" line="125"/> <source>No Expiration</source> <translation>Senza scadenza</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeySetExpireDateDialog.cpp" line="141"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeySetExpireDateDialog.cpp" line="126"/> <source>Modified Expiration Date</source> <translation>Data di scadenza modificata</translation> </message> @@ -3776,14 +3943,14 @@ Note: For verification, you can find more information here: https://keys.openpgp <context> <name>GpgFrontend::UI::KeyTable</name> <message> - <location filename="../../../../src/ui/widgets/KeyTable.cpp" line="83"/> + <location filename="../../../../src/ui/widgets/KeyTable.cpp" line="84"/> <source>Error</source> - <translation type="unfinished">Errore</translation> + <translation>Errore</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyTable.cpp" line="83"/> + <location filename="../../../../src/ui/widgets/KeyTable.cpp" line="84"/> <source>Key Not Found.</source> - <translation type="unfinished">Chiave non trovata.</translation> + <translation>Chiave non trovata.</translation> </message> </context> <context> @@ -3804,22 +3971,22 @@ Note: For verification, you can find more information here: https://keys.openpgp <translation>Firma per gli UID della chiave</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyUIDSignDialog.cpp" line="121"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyUIDSignDialog.cpp" line="120"/> <source>Unsuccessful Operation</source> <translation>Operazione non riuscita</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyUIDSignDialog.cpp" line="122"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyUIDSignDialog.cpp" line="121"/> <source>Signature operation failed for UID %1</source> <translation>Operazione di firma non riuscita per l'UID %1</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyUIDSignDialog.cpp" line="126"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyUIDSignDialog.cpp" line="125"/> <source>Operation Complete</source> <translation>Operazione completata</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyUIDSignDialog.cpp" line="127"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyUIDSignDialog.cpp" line="126"/> <source>The signature operation of the UID is complete</source> <translation>L'operazione di firma dell'UID è completata</translation> </message> @@ -3827,52 +3994,52 @@ Note: For verification, you can find more information here: https://keys.openpgp <context> <name>GpgFrontend::UI::KeyUploadDialog</name> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="66"/> + <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="65"/> <source>Uploading Public Key</source> <translation>Caricamento della chiave pubblica</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="84"/> + <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="83"/> <source>Error</source> <translation>Errore</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="85"/> + <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="84"/> <source>Unknown error occurred</source> <translation>Si è verificato un errore sconosciuto</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="155"/> + <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="154"/> <source>Key Not Found</source> <translation>Chiave non trovata</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="158"/> + <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="157"/> <source>Timeout</source> <translation>Tempo scaduto</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="161"/> + <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="160"/> <source>Key Server Not Found</source> <translation>Server chiave non trovato</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="164"/> + <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="163"/> <source>Connection Error</source> <translation>Errore di connessione</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="166"/> + <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="165"/> <source>Upload Failed</source> <translation>Caricamento non riuscito</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="170"/> + <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="169"/> <source>Upload Success</source> <translation>Caricamento riuscito</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="171"/> + <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="170"/> <source>Upload Public Key Successfully</source> <translation>Carica chiave pubblica con successo</translation> </message> @@ -3986,22 +4153,22 @@ Note: For verification, you can find more information here: https://keys.openpgp <translation>tempo scaduto (ms): </translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsKeyServer.cpp" line="245"/> + <location filename="../../../../src/ui/dialog/settings/SettingsKeyServer.cpp" line="244"/> <source>Reachable</source> <translation>Raggiungibile</translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsKeyServer.cpp" line="248"/> + <location filename="../../../../src/ui/dialog/settings/SettingsKeyServer.cpp" line="247"/> <source>Not Reachable</source> <translation>Non raggiungibile</translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsKeyServer.cpp" line="260"/> + <location filename="../../../../src/ui/dialog/settings/SettingsKeyServer.cpp" line="259"/> <source>Test Key Server Connection...</source> <translation>Verifica connessione server chiave...</translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsKeyServer.cpp" line="261"/> + <location filename="../../../../src/ui/dialog/settings/SettingsKeyServer.cpp" line="260"/> <source>This test only tests the network connectivity of the key server. Passing the test does not mean that the key server is functionally available.</source> <translation>Questo test verifica solo la connettività di rete del server delle chiavi. Il superamento del test non significa che il server delle chiavi sia funzionalmente disponibile.</translation> </message> @@ -4009,549 +4176,393 @@ Note: For verification, you can find more information here: https://keys.openpgp <context> <name>GpgFrontend::UI::MainWindow</name> <message> - <location filename="../../../../src/ui/main_window/MainWindow.cpp" line="156"/> - <location filename="../../../../src/ui/main_window/MainWindow.cpp" line="159"/> + <location filename="../../../../src/ui/main_window/MainWindow.cpp" line="163"/> + <location filename="../../../../src/ui/main_window/MainWindow.cpp" line="166"/> <source>Critical error occur while loading GpgFrontend.</source> <translation>Si è verificato un errore critico durante il caricamento di GpgFrontend.</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindow.cpp" line="158"/> + <location filename="../../../../src/ui/main_window/MainWindow.cpp" line="165"/> <source>Loading Failed</source> <translation>Caricamento non riuscito</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="50"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="75"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="103"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="156"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="176"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="201"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="229"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="282"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="302"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="319"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="336"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="355"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="372"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="389"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="409"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="471"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="492"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="528"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="546"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="571"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="616"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="661"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="690"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="735"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="781"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="810"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="818"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="845"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="910"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="919"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="947"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="988"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="77"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="135"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="202"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="239"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="278"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="320"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="440"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="491"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="111"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="137"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="159"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="177"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="192"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="207"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="224"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="106"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="143"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="522"/> <source>Error</source> <translation>Errore</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="51"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="177"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="303"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="356"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="410"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="493"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="572"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="691"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="811"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="911"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="989"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="523"/> <source>Cannot read from file: %1</source> <translation>Impossibile leggere dal file: %1</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="64"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="190"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="119"/> <source>The target file %1 already exists, do you need to overwrite it?</source> <translation>Il file di destinazione %1 esiste già, è necessario sovrascriverlo?</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="67"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="193"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="310"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="363"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="450"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="623"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="742"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="824"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="925"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="122"/> <source>Warning</source> <translation>Avvertimento</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="76"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="202"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="320"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="373"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="617"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="736"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="819"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="920"/> - <source>Cannot write to file: %1</source> - <translation>Impossibile scrivere sul file: %1</translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="85"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="211"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="55"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="50"/> <source>Symmetric Encryption</source> <translation>Crittografia simmetrica</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="86"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="212"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="51"/> <source>No Key Selected. Do you want to encrypt with a symmetric cipher using a passphrase?</source> - <translation>Nessuna chiave selezionata. Vuoi crittografare con un cifrario simmetrico utilizzando una passphrase?</translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="92"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="64"/> - <source>Symmetrically Encrypting</source> - <translation>Crittografia simmetrica</translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="104"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="157"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="230"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="283"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="337"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="390"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="472"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="547"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="662"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="782"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="846"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="948"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="78"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="136"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="203"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="240"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="279"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="321"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="441"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="492"/> - <source>Unknown error occurred</source> - <translation>Si è verificato un errore sconosciuto</translation> + <translation>Nessuna chiave selezionata. Vuoi cifrare con un cifrario simmetrico utilizzando una passphrase?</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="135"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="261"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="598"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="717"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="396"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="172"/> <source>Invalid KeyPair</source> <translation>Coppia di chiavi non valida</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="136"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="262"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="599"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="718"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="397"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="60"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="261"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="448"/> <source>The selected keypair cannot be used for encryption.</source> <translation>La coppia di chiavi selezionata non può essere utilizzata per la crittografia.</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="137"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="263"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="600"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="719"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="115"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="181"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="398"/> - <source>For example the Following Key:</source> - <translation>Ad esempio la seguente chiave:</translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="144"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="123"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="632"/> - <source>Encrypting</source> - <translation>Crittografa</translation> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="107"/> + <source>Cannot read from the following files: + +%1</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="218"/> - <source>Archiving & Symmetrically Encrypting</source> - <translation>Archiviazione & Crittografia Simmetrica</translation> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="144"/> + <source>Cannot write to the following files: + +%1</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="270"/> - <source>Archiving & Encrypting</source> - <translation>Archiviazione & Crittografia</translation> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="174"/> + <source>For example the Following Key:</source> + <translation>Ad esempio la seguente chiave:</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="311"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="364"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="624"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="743"/> - <source>The target file already exists, do you need to overwrite it?</source> - <translation>Il file di destinazione esiste già, è necessario sovrascriverlo?</translation> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="196"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="323"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="654"/> + <source>Encrypting</source> + <translation>Sto cifrando</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="325"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="229"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="231"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="358"/> <source>Decrypting</source> <translation>Decifra</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="378"/> - <source>Decrypting & Extrating</source> - <translation>Decifrare & Estrarre</translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="424"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="587"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="706"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="163"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="379"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="158"/> <source>No Key Checked</source> <translation>Nessuna chiave controllata</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="425"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="588"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="707"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="164"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="159"/> <source>Please check the key in the key toolbox on the right.</source> <translation>Si prega di controllare la chiave nella casella degli strumenti della chiave a destra.</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="432"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="112"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="178"/> - <source>Invalid Operation</source> - <translation>Operazione non valida</translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="433"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="208"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="369"/> <source>The selected key contains a key that does not actually have a sign usage.</source> <translation>La chiave selezionata contiene una chiave che non ha effettivamente un utilizzo del segno.</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="435"/> - <source>for example the Following Key:</source> - <translation>ad esempio la seguente chiave:</translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="451"/> - <source>The signature file "%1" exists, do you need to overwrite it?</source> - <translation>Il file della firma "%1" esiste, è necessario sovrascriverlo?</translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="460"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="190"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="703"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="217"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="388"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="721"/> <source>Signing</source> <translation>Firma</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="513"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="414"/> <source>File to be Verified</source> <translation>File da verificare</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="514"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="415"/> <source>Please provide An ABSOLUTE Path If Data And Signature is COMBINED within a single file, KEEP THIS EMPTY: </source> <translation>Fornisci un percorso ASSOLUTO Se i dati e la firma sono COMBINATI in un singolo file, MANTIENI QUESTO CAMPO VUOTO: </translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="529"/> - <source>Please select the appropriate origin file or signature file. Ensure that both are in this directory.</source> - <translation>Si prega di selezionare il file di origine appropriato o il file di firma. Assicurati che entrambi siano in questa directory.</translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="535"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="267"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="307"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="370"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="245"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="434"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="326"/> <source>Verifying</source> <translation>Verifica</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="648"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="425"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="786"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="271"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="478"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="804"/> <source>Encrypting and Signing</source> - <translation>Crittografa e Firma</translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="767"/> - <source>Archiving & Encrypting & Signing</source> - <translation>Archiviazione, crittografia e firma</translation> + <translation>Cifra e Firma</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="825"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="926"/> - <source>The output file %1 already exists, do you need to overwrite it?</source> - <translation>Il file di output %1 esiste già, devi sovrascriverlo?</translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="834"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="479"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="850"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="285"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="512"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="868"/> <source>Decrypting and Verifying</source> <translation>Decifra e verifica</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="882"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="347"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="533"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="445"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="402"/> <source>Missing Keys</source> - <translation type="unfinished"></translation> + <translation>Chiavi mancanti</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="883"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="348"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="534"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="446"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="403"/> <source>Some signatures cannot be verified because the corresponding keys are missing. The following fingerprints are missing: %1 Would you like to fetch these keys from the key server?</source> - <translation type="unfinished"></translation> + <translation>Alcune firme non possono essere verificate perché mancano le chiavi corrispondenti. + +Mancano le seguenti impronte digitali: +%1 + +Vuoi recuperare queste chiavi dal server delle chiavi?</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="898"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="363"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="548"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="462"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="417"/> <source>Verification Incomplete</source> - <translation type="unfinished"></translation> + <translation>Verifica incompleta</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="899"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="364"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="549"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="463"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="418"/> <source>Verification was incomplete due to missing keys. You can manually import the keys later.</source> - <translation type="unfinished"></translation> + <translation>La verifica è stata incompleta a causa di chiavi mancanti. Puoi importare manualmente le chiavi in seguito.</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="935"/> - <source>Decrypting & Verifying & Extracting</source> - <translation>Decifrare, verificare ed estrarre</translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="996"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="529"/> <source>EML File Too Large</source> - <translation type="unfinished"></translation> + <translation>File EML troppo grande</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="997"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="530"/> <source>The EML file "%1" is larger than 32MB and will not be opened.</source> - <translation type="unfinished"></translation> + <translation>Il file EML "%1" è più grande di 32 MB e non verrà aperto.</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="56"/> - <source>No Key Checked. Do you want to encrypt with a symmetric cipher using a passphrase?</source> - <translation>Nessuna chiave controllata. Vuoi crittografare con una cifra simmetrica usando una passphrase?</translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="113"/> - <source>The selected key contains a key that does not actually have a encrypt usage.</source> - <translation>La chiave selezionata contiene una chiave che in realtà non ha un utilizzo di crittografia.</translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="179"/> - <source>The selected key contains a key that does not actually have a signature usage.</source> - <translation>La chiave selezionata contiene una chiave che non ha effettivamente un utilizzo della firma.</translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="380"/> - <source>Please check some key in the key toolbox on the right.</source> - <translation>Si prega di controllare alcune chiavi nella casella degli strumenti chiave a destra.</translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="111"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="137"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="159"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="177"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="192"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="207"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="224"/> - <source>Key Not Found.</source> - <translation>Chiave non trovata.</translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="116"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="106"/> <source>Localize</source> <translation>Localizza</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="119"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="109"/> <source>UTC</source> <translation>UTC</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="142"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="120"/> <source>Local Time</source> <translation>Tempo Locale</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="324"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="274"/> <source>This version(%1) may have been withdrawn by the developer due to serious problems. Please stop using this version immediately and download the latest stable version (%2) on the Github Releases Page.</source> - <translation type="unfinished"></translation> + <translation>Questa versione (%1) potrebbe essere stata ritirata dallo sviluppatore a causa di gravi problemi. Smetti di usare questa versione immediatamente e scarica l'ultima versione stabile (%2) sulla pagina Github Releases.</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="339"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="288"/> <source>This may be a BETA Version (Latest Stable Version: %1).</source> - <translation type="unfinished"></translation> + <translation>Potrebbe trattarsi di una versione BETA (ultima versione stabile: %1).</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="345"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="301"/> <source>Commit Hash Mismatch</source> - <translation type="unfinished"></translation> + <translation>Mancata corrispondenza dell'hash di commit</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="346"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="302"/> <source>The current version's commit hash does not match the official release. This may indicate a modified or unofficial build. For security reasons, please verify your installation or download the official release from the Github Releases Page.</source> - <translation type="unfinished"></translation> + <translation>L'hash di commit della versione corrente non corrisponde alla release ufficiale. Ciò potrebbe indicare una build modificata o non ufficiale. Per motivi di sicurezza, verifica l'installazione o scarica la release ufficiale dalla pagina Github Releases.</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="478"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="492"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="494"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="496"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="573"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="590"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="592"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="594"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="880"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="896"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="899"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="902"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="432"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="446"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="448"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="450"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="595"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="612"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="614"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="616"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="898"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="914"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="917"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="920"/> <source>None</source> - <translation type="unfinished"></translation> + <translation>Nessuno</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="486"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="584"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="889"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="440"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="606"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="907"/> <source>From</source> - <translation type="unfinished"></translation> + <translation>Da</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="487"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="489"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="585"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="587"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="890"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="893"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="441"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="443"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="607"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="609"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="908"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="911"/> <source>Unknown</source> - <translation type="unfinished">Sconosciuto</translation> + <translation>Sconosciuto</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="489"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="587"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="892"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="443"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="609"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="910"/> <source>To</source> - <translation type="unfinished"></translation> + <translation>A</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="491"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="589"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="895"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="445"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="611"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="913"/> <source>Subject</source> - <translation type="unfinished"></translation> + <translation>Oggetto</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="494"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="592"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="898"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="448"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="614"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="916"/> <source>CC</source> - <translation type="unfinished"></translation> + <translation>CC</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="496"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="594"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="901"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="450"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="616"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="919"/> <source>BCC</source> - <translation type="unfinished"></translation> + <translation>BCC</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="497"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="595"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="904"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="451"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="617"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="922"/> <source>Date</source> - <translation type="unfinished">Data</translation> + <translation>Data</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="502"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="909"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="456"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="927"/> <source>Signed EML Data Hash (SHA1)</source> - <translation type="unfinished"></translation> + <translation>Hash dati EML firmato (SHA1)</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="505"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="913"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="459"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="931"/> <source>Message Integrity Check Algorithm</source> + <translation>Algoritmo di controllo dell'integrità del messaggio</translation> + </message> + <message> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="517"/> + <source>FAIL</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="625"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="689"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="755"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="772"/> - <source>No Key Selected</source> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="521"/> + <source>OK</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="626"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="756"/> - <source>Please select a key for encrypt the EML.</source> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="524"/> + <source>WARN</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="535"/> + <source>Summary Report</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="536"/> + <source>Total Operations: %1 +</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="690"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="537"/> + <source>Successful: %1 +</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="538"/> + <source>Warnings: %1 +</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="539"/> + <source>Failures: %1 +</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="543"/> + <source>Failed Objects: %1 +</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="548"/> + <source>Warning Objects: %1 +</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="647"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="707"/> <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="773"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="790"/> + <source>No Key Selected</source> + <translation>Nessuna chiave selezionata</translation> + </message> + <message> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="648"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="774"/> + <source>Please select a key for encrypt the EML.</source> + <translation type="unfinished">Selezionare una chiave per cifrare l'EML.</translation> + </message> + <message> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="708"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="791"/> <source>Please select a key for signing the EML.</source> - <translation type="unfinished"></translation> + <translation>Selezionare una chiave per firmare l'EML.</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="695"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="778"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="713"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="796"/> <source>Multiple Keys Selected</source> - <translation type="unfinished"></translation> + <translation>Più chiavi selezionate</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="696"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="779"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="714"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="797"/> <source>Please select only one key to sign the EML.</source> - <translation type="unfinished"></translation> + <translation>Selezionare una sola chiave per firmare l'EML.</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="959"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="976"/> <source># EML Data Error The provided EML data does not conform to RFC 3156 standards and cannot be processed. @@ -4566,10 +4577,23 @@ EML is a file format for representing email messages, typically including header 2. Refer to the official documentation for the EML structure: %2 After correcting the EML data, try the operation again.</source> - <translation type="unfinished"></translation> + <translation># Errore dati EML + +I dati EML forniti non sono conformi agli standard RFC 3156 e non possono essere elaborati. + +**Dettagli:** %1 + +### Che cosa sono i dati EML? +EML è un formato di file per la rappresentazione di messaggi di posta elettronica, in genere includendo intestazioni, corpo del testo, allegati e metadati. Per la convalida sono richiesti dati EML completi e strutturati correttamente. + +### Soluzioni suggerite +1. Verificare che i dati EML siano completi e corrispondano alla struttura delineata in RFC 3156. +2. Fare riferimento alla documentazione ufficiale per la struttura EML: %2 + +Dopo aver corretto i dati EML, riprovare l'operazione.</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="985"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="1002"/> <source># Email Operation Error An error occurred during the email operation. The process could not be completed. @@ -4590,20 +4614,41 @@ An error occurred during the email operation. The process could not be completed 4. Review the error details above or application logs for further troubleshooting. If the issue persists, consider seeking technical support or consulting the documentation.</source> - <translation type="unfinished"></translation> + <translation># Errore operazione e-mail + +Si è verificato un errore durante l'operazione e-mail. Impossibile completare il processo. + +**Dettagli:** +- **Codice errore:** %1 +- **Messaggio errore:** %2 + +### Possibili cause +1. I dati e-mail potrebbero essere incompleti o danneggiati. +2. La chiave GPG selezionata non dispone delle autorizzazioni necessarie. +3. Problemi nell'ambiente o nella configurazione GPG. + +### Soluzioni suggerite +1. Assicurarsi che i dati e-mail siano completi e seguano il formato previsto. +2. Verificare che la chiave GPG disponga delle autorizzazioni di accesso richieste. +3. Controllare l'ambiente GPG e le impostazioni di configurazione. +4. Rivedere i dettagli dell'errore sopra o i registri dell'applicazione per un'ulteriore risoluzione dei problemi. + +Se il problema persiste, prendere in considerazione la possibilità di richiedere supporto tecnico o di consultare la documentazione.</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="319"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="262"/> <source>GpgFrontend Upgradeable (New Version: %1).</source> <translation>GpgFrontend aggiornabile (nuova versione: %1).</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="297"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="269"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="296"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="296"/> <source>Update</source> <translation>Aggiorna</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="323"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="273"/> <source>Withdrawn Version</source> <translation>Versione ritirata</translation> </message> @@ -4630,12 +4675,12 @@ If the issue persists, consider seeking technical support or consulting the docu <message> <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="52"/> <source>File Panel</source> - <translation type="unfinished"></translation> + <translation>Pannello file</translation> </message> <message> <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="53"/> <source>Open a file panel</source> - <translation type="unfinished"></translation> + <translation>Aprire un pannello file</translation> </message> <message> <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="57"/> @@ -4680,7 +4725,7 @@ If the issue persists, consider seeking technical support or consulting the docu <message> <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="74"/> <source>Quit</source> - <translation>Uscire</translation> + <translation>Esci</translation> </message> <message> <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="75"/> @@ -4715,7 +4760,7 @@ If the issue persists, consider seeking technical support or consulting the docu <message> <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="88"/> <source>Zoom in</source> - <translation type="unfinished"></translation> + <translation>Ingrandisci</translation> </message> <message> <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="92"/> @@ -4725,7 +4770,7 @@ If the issue persists, consider seeking technical support or consulting the docu <message> <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="93"/> <source>Zoom out</source> - <translation type="unfinished"></translation> + <translation>Rimpicciolisci</translation> </message> <message> <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="97"/> @@ -4810,22 +4855,22 @@ If the issue persists, consider seeking technical support or consulting the docu <message> <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="144"/> <source>Encrypt</source> - <translation>Crittografa</translation> + <translation>Cifra</translation> </message> <message> <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="145"/> <source>Encrypt Message</source> - <translation>Crittografa il messaggio</translation> + <translation>Cifra il messaggio</translation> </message> <message> <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="151"/> <source>Encrypt Sign</source> - <translation>Crittografa e Firma</translation> + <translation>Cifra e Firma</translation> </message> <message> <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="152"/> <source>Encrypt and Sign Message</source> - <translation>Crittografa e Firma Messaggio</translation> + <translation>Cifra e Firma Messaggio</translation> </message> <message> <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="157"/> @@ -4869,8 +4914,8 @@ If the issue persists, consider seeking technical support or consulting the docu </message> <message> <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="184"/> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="402"/> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="487"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="401"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="486"/> <source>File</source> <translation>File</translation> </message> @@ -4890,406 +4935,406 @@ If the issue persists, consider seeking technical support or consulting the docu <translation>Importa nuova chiave dagli appunti</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="208"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="207"/> <source>Keyserver</source> <translation>Server delle chiavi</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="210"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="209"/> <source>Import New Key From Keyserver</source> <translation>Importa nuova chiave dal server delle chiavi</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="218"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="217"/> <source>Editor</source> <translation>Editor</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="219"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="218"/> <source>Import New Key From Editor</source> <translation>Importa nuova chiave dall'editor</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="224"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="223"/> <source>Manage Keys</source> <translation>Gestisci chiavi</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="225"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="224"/> <source>Open Key Management</source> <translation>Gestione delle chiavi aperte</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="230"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="229"/> <source>Clear Password Cache</source> <translation>Cancella cache delle password</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="231"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="230"/> <source>Clear Password Cache of GnuPG</source> <translation>Cancella la cache delle password di GnuPG</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="459"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="458"/> <source>Advanced</source> - <translation type="unfinished">Avanzate</translation> + <translation>Avanzate</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="600"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="594"/> <source>Status Panel</source> - <translation type="unfinished"></translation> + <translation>Pannello di stato</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="346"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="360"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="378"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="309"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="323"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="338"/> <source>Successful Operation</source> <translation>Operazione riuscita</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="347"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="310"/> <source>Clear password cache successfully</source> <translation>Cancella la cache delle password con successo</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="349"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="364"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="382"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="312"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="327"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="342"/> <source>Failed Operation</source> <translation>Operazione fallita</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="350"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="313"/> <source>Failed to clear password cache of GnuPG</source> <translation>Impossibile cancellare la cache delle password di GnuPG</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="236"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="235"/> <source>Reload All Components</source> <translation>Ricarica tutti i componenti</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="237"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="236"/> <source>Reload All GnuPG's Components</source> <translation>Ricarica tutti i componenti di GnuPG</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="361"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="324"/> <source>Reload all the GnuPG's components successfully</source> <translation>Ricarica correttamente tutti i componenti di GnuPG</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="365"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="328"/> <source>Failed to reload all or one of the GnuPG's component(s)</source> <translation>Impossibile ricaricare tutti o uno dei componenti di GnuPG</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="242"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="241"/> <source>Restart All Components</source> <translation>Riavvia tutti i componenti</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="243"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="242"/> <source>Restart All GnuPG's Components</source> <translation>Riavvia tutti i componenti di GnuPG</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="379"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="339"/> <source>Restart all the GnuPG's components successfully</source> <translation>Riavvia correttamente tutti i componenti di GnuPG</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="383"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="343"/> <source>Failed to restart all or one of the GnuPG's component(s)</source> <translation>Impossibile riavviare tutti o uno dei componenti di GnuPG</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="248"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="247"/> <source>Open GnuPG Controller</source> <translation>Apri il controller GnuPG</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="249"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="248"/> <source>Open GnuPG Controller Dialog</source> <translation>Apri la finestra di dialogo del controller GnuPG</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="254"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="253"/> <source>Open Module Controller</source> <translation>Controller del modulo aperto</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="255"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="254"/> <source>Open Module Controller Dialog</source> <translation>Apri finestra di dialogo Controller modulo</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="264"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="263"/> <source>New E-Mail</source> - <translation type="unfinished"></translation> + <translation>Nuova e-mail</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="265"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="264"/> <source>Create A New E-Mail Tab</source> - <translation type="unfinished"></translation> + <translation>Crea una nuova scheda e-mail</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="273"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="272"/> <source>About</source> <translation>Informazioni</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="274"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="273"/> <source>Show the application's About box</source> <translation>Mostra la casella Informazioni sull'applicazione</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="280"/> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="283"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="279"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="282"/> <source>GnuPG</source> <translation>GnuPG</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="281"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="280"/> <source>Information about Gnupg</source> <translation>Informazioni su Gnupg</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="287"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="286"/> <source>Translate</source> <translation>Traduci</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="288"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="287"/> <source>Information about translation</source> <translation>Informazioni sulla traduzione</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="290"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="289"/> <source>Translators</source> <translation>Traduttori</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="294"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="293"/> <source>Check for Updates</source> <translation>Controlla gli Aggiornamenti</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="295"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="294"/> <source>Check for updates</source> <translation>Controlla gli aggiornamenti</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="301"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="300"/> <source>Open Wizard</source> <translation>Apri procedura guidata</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="302"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="301"/> <source>Open the wizard</source> <translation>Apri la procedura guidata</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="307"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="306"/> <source>Append Public Key to Editor</source> <translation>Aggiungi la chiave pubblica all'editor</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="308"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="307"/> <source>Append selected Keypair's Public Key to Editor</source> <translation>Aggiungi la chiave pubblica della coppia di chiavi selezionata all'editor</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="313"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="312"/> <source>Append Create DateTime to Editor</source> <translation>Aggiungi Create DateTime all'editor</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="314"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="313"/> <source>Append selected Key's creation date and time to Editor</source> <translation>Aggiungi la data e l'ora di creazione della chiave selezionata all'editor</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="319"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="318"/> <source>Append Expire DateTime to Editor</source> <translation>Aggiungi Expire DateTime all'editor</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="320"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="319"/> <source>Append selected Key's expiration date and time to Editor</source> <translation>Aggiungi la data e l'ora di scadenza della chiave selezionata all'Editor</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="325"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="324"/> <source>Append Fingerprint to Editor</source> <translation>Aggiungi impronta digitale all'editor</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="326"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="325"/> <source>Append selected Key's Fingerprint to Editor</source> <translation>Aggiungi l'impronta digitale della chiave selezionata all'editor</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="331"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="330"/> <source>Copy Email</source> <translation>Copia e-mail</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="332"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="331"/> <source>Copy selected Keypair's to clipboard</source> <translation>Copia la coppia di chiavi selezionata negli appunti</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="337"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="336"/> <source>Copy Default UID</source> <translation>Copia UID predefinito</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="338"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="337"/> <source>Copy selected Keypair's default UID to clipboard</source> <translation>Copia l'UID predefinito della coppia di chiavi selezionata negli appunti</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="343"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="342"/> <source>Copy Key ID</source> <translation>Copia ID chiave</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="344"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="343"/> <source>Copy selected Keypair's ID to clipboard</source> <translation>Copia l'ID della coppia di chiavi selezionata negli appunti</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="349"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="348"/> <source>Show Key Details</source> <translation>Mostra dettagli chiave</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="350"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="349"/> <source>Show Details for this Key</source> <translation>Mostra dettagli per questa chiave</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="355"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="354"/> <source>Add To Favourite</source> <translation>Aggiungi ai preferiti</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="356"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="355"/> <source>Add this key to Favourite Table</source> <translation>Aggiungi questa chiave alla tabella dei preferiti</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="362"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="361"/> <source>Remove From Favourite</source> <translation>Rimuovi dai preferiti</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="363"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="362"/> <source>Remove this key from Favourite Table</source> <translation>Rimuovi questa chiave dalla tabella dei preferiti</translation> </message> <message> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="369"/> <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="370"/> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="371"/> <source>Set Owner Trust Level</source> <translation>Imposta il livello di attendibilità del proprietario</translation> </message> <message> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="389"/> <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="390"/> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="391"/> <source>Remove PGP Header</source> <translation>Rimuovi intestazione PGP</translation> </message> <message> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="394"/> <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="395"/> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="396"/> <source>Add PGP Header</source> <translation>Aggiungi intestazione PGP</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="420"/> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="514"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="419"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="508"/> <source>Edit</source> <translation>Modifica</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="440"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="439"/> <source>Crypt</source> - <translation>Crittografa</translation> + <translation>Cifra</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="450"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="449"/> <source>Keys</source> <translation>Chiavi</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="451"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="450"/> <source>Import Key</source> <translation>Importa chiave</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="467"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="466"/> <source>View</source> <translation>Visualizzazione</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="469"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="468"/> <source>Help</source> <translation>Aiuto</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="499"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="498"/> <source>Operations</source> <translation>Operazioni</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="509"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="503"/> <source>Key</source> <translation>Chiave</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="522"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="516"/> <source>Special Edit</source> <translation>Modifica speciale</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="536"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="530"/> <source>Import key from...</source> <translation>Importa chiave da...</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="537"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="531"/> <source>Import key</source> <translation>Importa chiave</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="553"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="547"/> <source>Ready</source> <translation>Pronto</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="560"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="554"/> <source>Key ToolBox</source> <translation>Casella degli strumenti chiave</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="568"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="562"/> <source>Default</source> <translation>Predefinito</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="575"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="569"/> <source>Favourite</source> <translation>Preferito</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="582"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="576"/> <source>Only Public Key</source> <translation>Solo chiave pubblica</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="589"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="583"/> <source>Has Private Key</source> <translation>Ha una chiave privata</translation> </message> @@ -5299,7 +5344,7 @@ If the issue persists, consider seeking technical support or consulting the docu <message> <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="49"/> <source>Module Information</source> - <translation type="unfinished"></translation> + <translation>Modulo di informazioni</translation> </message> <message> <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="50"/> @@ -5338,89 +5383,89 @@ If the issue persists, consider seeking technical support or consulting the docu </message> <message> <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="84"/> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="195"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="192"/> <source>Enable Auto Activate</source> <translation>Abilita attivazione automatica</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="144"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="141"/> <source>BASIC INFO</source> <translation>INFORMAZIONI DI BASE</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="146"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="143"/> <source>ID</source> <translation>ID</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="148"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="145"/> <source>Version</source> <translation>Versione</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="150"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="147"/> <source>SDK Version</source> <translation>Versione SDK</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="152"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="149"/> <source>Qt ENV Version</source> <translation>Versione QtENV</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="154"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="151"/> <source>Hash</source> <translation>Hash</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="155"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="152"/> <source>Path</source> <translation>Percorso</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="159"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="156"/> <source>Auto Activate</source> <translation>Attivazione automatica</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="160"/> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="162"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="157"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="159"/> <source>True</source> <translation>Vero</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="160"/> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="162"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="157"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="159"/> <source>False</source> <translation>Falso</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="161"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="158"/> <source>Active</source> <translation>Attivo</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="166"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="163"/> <source>METADATA</source> <translation>METADATA</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="182"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="179"/> <source>Listening Event</source> <translation>Evento di ascolto</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="191"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="188"/> <source>Deactivate</source> <translation>Disattiva</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="192"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="189"/> <source>Activate</source> <translation>Attiva</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="194"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="191"/> <source>Disable Auto Activate</source> <translation>Disabilita l'attivazione automatica</translation> </message> @@ -5491,7 +5536,7 @@ If the issue persists, consider seeking technical support or consulting the docu <message> <location filename="../../../../src/ui/dialog/settings/SettingsNetwork.cpp" line="96"/> <source>Automatically fetch key publish status from key server.</source> - <translation type="unfinished"></translation> + <translation>Recupera automaticamente lo stato di pubblicazione della chiave dal server delle chiavi.</translation> </message> <message> <location filename="../../../../src/ui/dialog/settings/SettingsNetwork.cpp" line="98"/> @@ -5499,42 +5544,42 @@ If the issue persists, consider seeking technical support or consulting the docu <translation>Suggerimenti: queste modifiche alle opzioni hanno effetto solo dopo il riavvio dell'applicazione.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsNetwork.cpp" line="173"/> + <location filename="../../../../src/ui/dialog/settings/SettingsNetwork.cpp" line="172"/> <source>Test Server Url Accessibility</source> <translation>Verifica l'accessibilità dell'URL del server</translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsNetwork.cpp" line="174"/> + <location filename="../../../../src/ui/dialog/settings/SettingsNetwork.cpp" line="173"/> <source>Server Url</source> <translation>Server Url</translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsNetwork.cpp" line="184"/> + <location filename="../../../../src/ui/dialog/settings/SettingsNetwork.cpp" line="183"/> <source>Success</source> <translation>Successo</translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsNetwork.cpp" line="185"/> + <location filename="../../../../src/ui/dialog/settings/SettingsNetwork.cpp" line="184"/> <source>Successfully connect to the target server through the proxy server.</source> <translation>Connettiti correttamente al server di destinazione tramite il server proxy.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsNetwork.cpp" line="189"/> + <location filename="../../../../src/ui/dialog/settings/SettingsNetwork.cpp" line="188"/> <source>Failed</source> <translation>Fallito</translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsNetwork.cpp" line="190"/> + <location filename="../../../../src/ui/dialog/settings/SettingsNetwork.cpp" line="189"/> <source>Unable to connect to the target server through the proxy server. Proxy settings may be invalid.</source> <translation>Impossibile connettersi al server di destinazione tramite il server proxy. Le impostazioni del proxy potrebbero non essere valide.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsNetwork.cpp" line="200"/> + <location filename="../../../../src/ui/dialog/settings/SettingsNetwork.cpp" line="199"/> <source>Test Proxy Server Connection...</source> <translation>Prova connessione server proxy...</translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsNetwork.cpp" line="201"/> + <location filename="../../../../src/ui/dialog/settings/SettingsNetwork.cpp" line="200"/> <source>Is using your proxy settings to access the url. Note that this test operation will apply your proxy settings to the entire software.</source> <translation>Sta utilizzando le impostazioni del proxy per accedere all'URL. Nota che questa operazione di prova applicherà le tue impostazioni proxy all'intero software.</translation> </message> @@ -5601,17 +5646,17 @@ If the issue persists, consider seeking technical support or consulting the docu <message> <location filename="../../../../src/ui/dialog/RevocationOptionsDialog.cpp" line="42"/> <source>Revocation Reason (Code)</source> - <translation type="unfinished"></translation> + <translation>Motivo della revoca (codice)</translation> </message> <message> <location filename="../../../../src/ui/dialog/RevocationOptionsDialog.cpp" line="43"/> <source>Revocation Reason (Text)</source> - <translation type="unfinished"></translation> + <translation>Motivo della revoca (testo)</translation> </message> <message> <location filename="../../../../src/ui/dialog/RevocationOptionsDialog.cpp" line="44"/> <source>Revocation Options</source> - <translation type="unfinished"></translation> + <translation>Opzioni della revoca</translation> </message> </context> <context> @@ -5718,27 +5763,27 @@ If the issue persists, consider seeking technical support or consulting the docu <translation>Annulla</translation> </message> <message> - <location filename="../../../../src/ui/dialog/SignersPicker.cpp" line="52"/> + <location filename="../../../../src/ui/dialog/SignersPicker.cpp" line="53"/> <source>Signers</source> <translation>Firmatari</translation> </message> <message> - <location filename="../../../../src/ui/dialog/SignersPicker.cpp" line="60"/> + <location filename="../../../../src/ui/dialog/SignersPicker.cpp" line="58"/> <source>Select Signer(s)</source> <translation>Seleziona firmatario/i</translation> </message> <message> - <location filename="../../../../src/ui/dialog/SignersPicker.cpp" line="63"/> + <location filename="../../../../src/ui/dialog/SignersPicker.cpp" line="61"/> <source>Please select one or more private keys you use for signing.</source> <translation>Seleziona una o più chiavi private che utilizzi per la firma.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/SignersPicker.cpp" line="64"/> + <location filename="../../../../src/ui/dialog/SignersPicker.cpp" line="62"/> <source>If no key is selected, the default key will be used for signing.</source> <translation>Se non viene selezionata alcuna chiave, per la firma verrà utilizzata la chiave predefinita.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/SignersPicker.cpp" line="74"/> + <location filename="../../../../src/ui/dialog/SignersPicker.cpp" line="72"/> <source>Signers Picker</source> <translation>Selezionatore dei firmatari</translation> </message> @@ -5746,7 +5791,7 @@ If the issue persists, consider seeking technical support or consulting the docu <context> <name>GpgFrontend::UI::SubkeyGenerateDialog</name> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="72"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="82"/> <source>Tipps: if the key pair has a passphrase, the subkey's passphrase must be equal to it.</source> <translation>Suggerimenti: se la coppia di chiavi ha una passphrase, la passphrase della sottochiave deve essere uguale ad essa.</translation> </message> @@ -5756,77 +5801,72 @@ If the issue persists, consider seeking technical support or consulting the docu <translation>Genera nuova sottochiave</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="98"/> - <source>Key Usage</source> - <translation>Utilizzo dei tasti</translation> - </message> - <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="100"/> - <source>Encryption</source> - <translation>Crittografia</translation> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="65"/> + <source>Authentication</source> + <translation>Autenticazione</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="103"/> - <source>Signing</source> - <translation>Firma</translation> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="59"/> + <source>Algorithm</source> + <translation type="unfinished">Algoritmo</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="106"/> - <source>Certification</source> - <translation>Certificazione</translation> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="60"/> + <source>Key Length</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="109"/> - <source>Authentication</source> - <translation>Autenticazione</translation> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="61"/> + <source>Expire Date</source> + <translation type="unfinished">Data di scadenza</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="153"/> - <source>Key Type</source> - <translation>Tipo di chiave</translation> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="62"/> + <source>Usage</source> + <translation type="unfinished">Utilizzo</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="154"/> - <source>KeySize (in Bit)</source> - <translation>Dimensione chiave (in bit)</translation> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="63"/> + <source>Encrypt</source> + <translation type="unfinished">Cifra</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="155"/> - <source>Expiration Date</source> - <translation>Data di scadenza</translation> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="64"/> + <source>Sign</source> + <translation type="unfinished">Firma</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="156"/> - <source>Never Expire</source> - <translation>Non scade mai</translation> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="66"/> + <source>Non Expired</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="157"/> - <source>Non Pass Phrase</source> - <translation>Non Pass Phrase</translation> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="67"/> + <source>No Passphrase</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="167"/> - <source>Basic Information</source> - <translation>Informazioni di base</translation> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="183"/> + <source>Please give a valid subkey algorithm.</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="280"/> - <source>Expiration time no more than 2 years.</source> - <translation>Tempo di scadenza non superiore a 2 anni.</translation> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="192"/> + <source>Time to subkey expiration must not be less than 120 seconds.</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="295"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="204"/> <source>Generating</source> <translation>Generazione</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="306"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="215"/> <source>Error</source> <translation>Errore</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="307"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="216"/> <source>Unknown error occurred</source> <translation>Si è verificato un errore sconosciuto</translation> </message> @@ -5877,21 +5917,21 @@ If the issue persists, consider seeking technical support or consulting the docu <context> <name>GpgFrontend::UI::TextEdit</name> <message> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="73"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="74"/> <source>Open Directory</source> <translation>Apri Rubrica</translation> </message> <message> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="182"/> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="196"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="183"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="197"/> <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="449"/> <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="486"/> <source>Warning</source> <translation>Avvertimento</translation> </message> <message> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="183"/> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="197"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="184"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="198"/> <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="450"/> <source>Cannot read file %1: %2.</source> @@ -5899,69 +5939,69 @@ If the issue persists, consider seeking technical support or consulting the docu %2.</translation> </message> <message> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="120"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="121"/> <source>Open file</source> <translation>Apri il file</translation> </message> <message> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="83"/> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="91"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="84"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="92"/> <source>Error</source> - <translation type="unfinished">Errore</translation> + <translation>Errore</translation> </message> <message> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="84"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="85"/> <source>Cannot open this file. Please make sure that this is a regular file and it's readable.</source> - <translation type="unfinished">Impossibile aprire questo file. Assicurati che questo sia un file regolare e che sia leggibile.</translation> + <translation>Impossibile aprire questo file. Assicurati che questo sia un file regolare e che sia leggibile.</translation> </message> <message> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="92"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="93"/> <source>Cannot open this file. The file is TOO LARGE (>1MB) for GpgFrontend Text Editor.</source> - <translation type="unfinished">Impossibile aprire questo file. Il file è TROPPO GRANDE (>1MB) per GpgFrontend Text Editor.</translation> + <translation>Impossibile aprire questo file. Il file è TROPPO GRANDE (>1MB) per GpgFrontend Text Editor.</translation> </message> <message> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="100"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="101"/> <source>File Open Error</source> - <translation type="unfinished"></translation> + <translation>Errore di apertura file</translation> </message> <message> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="101"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="102"/> <source>The file "%1" could not be opened.</source> - <translation type="unfinished"></translation> + <translation>Impossibile aprire il file "%1".</translation> </message> <message> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="109"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="110"/> <source>Binary File Detected</source> - <translation type="unfinished"></translation> + <translation>Rilevato file binario</translation> </message> <message> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="110"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="111"/> <source>The file "%1" appears to be a binary file and will not be opened.</source> - <translation type="unfinished"></translation> + <translation>Il file "%1" sembra essere un file binario e non verrà aperto.</translation> </message> <message> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="232"/> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="248"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="233"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="249"/> <source>Save file</source> <translation>Salva</translation> </message> <message> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="309"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="310"/> <source>Unsaved document</source> <translation>Documento non salvato</translation> </message> <message> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="310"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="311"/> <source>The document "%1" has been modified. Do you want to save your changes?</source> <translation>Il documento "%1" è stato modificato. Vuoi salvare le tue modifiche?</translation> </message> <message> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="313"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="314"/> <source>Note:</source> <translation>Nota:</translation> </message> <message> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="314"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="315"/> <source>If you don't save these files, all changes are lost.</source> <translation>Se non salvi questi file, tutte le modifiche andranno perse.</translation> </message> @@ -5976,63 +6016,63 @@ If the issue persists, consider seeking technical support or consulting the docu <message> <location filename="../../../../src/ui/widgets/TextEditTabWidget.cpp" line="59"/> <source>File Too Large</source> - <translation type="unfinished"></translation> + <translation>File troppo grande</translation> </message> <message> <location filename="../../../../src/ui/widgets/TextEditTabWidget.cpp" line="60"/> <source>The file "%1" is larger than 1MB and will not be opened.</source> - <translation type="unfinished"></translation> + <translation>Il file "%1" è più grande di 1 MB e non verrà aperto.</translation> </message> <message> <location filename="../../../../src/ui/widgets/TextEditTabWidget.cpp" line="68"/> <source>File Open Error</source> - <translation type="unfinished"></translation> + <translation>Errore di apertura file</translation> </message> <message> <location filename="../../../../src/ui/widgets/TextEditTabWidget.cpp" line="69"/> <source>The file "%1" could not be opened.</source> - <translation type="unfinished"></translation> + <translation>Impossibile aprire il file "%1".</translation> </message> <message> <location filename="../../../../src/ui/widgets/TextEditTabWidget.cpp" line="77"/> <source>Binary File Detected</source> - <translation type="unfinished"></translation> + <translation>Rilevato file binario</translation> </message> <message> <location filename="../../../../src/ui/widgets/TextEditTabWidget.cpp" line="78"/> <source>The file "%1" appears to be a binary file and will not be opened.</source> - <translation type="unfinished"></translation> + <translation>Il file "%1" sembra essere un file binario e non verrà aperto.</translation> </message> <message> <location filename="../../../../src/ui/widgets/TextEditTabWidget.cpp" line="95"/> <source>Directory Permission Denied</source> - <translation type="unfinished"></translation> + <translation>Autorizzazione alla directory negata</translation> </message> <message> <location filename="../../../../src/ui/widgets/TextEditTabWidget.cpp" line="96"/> <source>You do not have permission to access the directory "%1".</source> - <translation type="unfinished"></translation> + <translation>Non hai l'autorizzazione per accedere alla directory "%1".</translation> </message> <message> <location filename="../../../../src/ui/widgets/TextEditTabWidget.cpp" line="128"/> <location filename="../../../../src/ui/widgets/TextEditTabWidget.cpp" line="155"/> <source>Warning</source> - <translation type="unfinished">Avvertimento</translation> + <translation>Avvertimento</translation> </message> <message> <location filename="../../../../src/ui/widgets/TextEditTabWidget.cpp" line="129"/> <location filename="../../../../src/ui/widgets/TextEditTabWidget.cpp" line="156"/> <source>Cannot read file %1: %2.</source> - <translation type="unfinished">Impossibile leggere il file %1: + <translation>Impossibile leggere il file %1: %2.</translation> </message> <message> - <location filename="../../../../src/ui/widgets/TextEditTabWidget.cpp" line="254"/> - <location filename="../../../../src/ui/widgets/TextEditTabWidget.cpp" line="268"/> - <location filename="../../../../src/ui/widgets/TextEditTabWidget.cpp" line="284"/> + <location filename="../../../../src/ui/widgets/TextEditTabWidget.cpp" line="251"/> + <location filename="../../../../src/ui/widgets/TextEditTabWidget.cpp" line="265"/> + <location filename="../../../../src/ui/widgets/TextEditTabWidget.cpp" line="281"/> <source>untitled</source> - <translation type="unfinished">senza titolo</translation> + <translation>senza titolo</translation> </message> </context> <context> @@ -6080,154 +6120,154 @@ If the issue persists, consider seeking technical support or consulting the docu <context> <name>GpgFrontend::UI::VerifyKeyDetailBox</name> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="57"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="56"/> <source>Import from keyserver</source> <translation>Importa da keyserver</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="62"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="61"/> <source>Key not present with id 0x</source> <translation>Chiave non presente con ID 0x</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="66"/> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="91"/> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="106"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="65"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="90"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="105"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="120"/> <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="121"/> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="122"/> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="137"/> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="152"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="136"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="151"/> <source>Status</source> <translation>Stato</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="66"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="65"/> <source>:</source> <translation>:</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="68"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="67"/> <source>Key not present in key list</source> <translation>Chiave non presente nell'elenco chiavi</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="76"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="75"/> <source>A Signature</source> <translation>Una firma</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="81"/> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="96"/> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="111"/> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="127"/> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="142"/> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="157"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="80"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="95"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="110"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="126"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="141"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="156"/> <source>Key Information is NOT Available</source> <translation>Le informazioni chiave NON sono disponibili</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="83"/> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="98"/> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="113"/> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="129"/> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="144"/> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="159"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="82"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="97"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="112"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="128"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="143"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="158"/> <source>Fingerprint</source> <translation>Impronta digitale</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="91"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="90"/> <source>Cert Revoked</source> <translation>Certificato revocato</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="106"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="105"/> <source>Signature Expired</source> <translation>Firma scaduta</translation> </message> <message> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="120"/> <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="121"/> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="122"/> <source>Key Expired</source> <translation>Chiave scaduta</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="137"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="136"/> <source>General Error</source> <translation>Errore generale</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="152"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="151"/> <source>Unknown Error </source> <translation>Errore sconosciuto </translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="182"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="181"/> <source>Signer Name</source> <translation>Nome del firmatario</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="183"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="182"/> <source>Signer Email</source> <translation>Email del firmatario</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="184"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="183"/> <source>Key's Fingerprint</source> <translation>Impronta digitale della chiave</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="185"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="184"/> <source>Valid</source> <translation>Valido</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="186"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="185"/> <source>Flags</source> <translation>Flag</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="193"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="192"/> <source>Fully Valid</source> <translation>Completamente valido</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="195"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="194"/> <source>NOT Fully Valid</source> <translation>NON completamente valido</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="202"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="201"/> <source>Good</source> <translation>Bene</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="205"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="204"/> <source>Bad</source> <translation>Cattivo</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="208"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="207"/> <source>Expired</source> <translation>Scaduto</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="211"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="210"/> <source>Missing Key</source> <translation>Chiave mancante</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="214"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="213"/> <source>Revoked Key</source> <translation>Chiave revocata</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="217"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="216"/> <source>Expired Key</source> <translation>Chiave scaduta</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="220"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="219"/> <source>Missing CRL</source> <translation>CRL mancante</translation> </message> @@ -6235,7 +6275,7 @@ If the issue persists, consider seeking technical support or consulting the docu <context> <name>GpgFrontend::UI::Wizard</name> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="43"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="45"/> <source>First Start Wizard</source> <translation>Procedura guidata al primo avvio</translation> </message> @@ -6243,32 +6283,32 @@ If the issue persists, consider seeking technical support or consulting the docu <context> <name>GpgKey</name> <message> - <location filename="../../../../src/core/model/GpgKey.cpp" line="91"/> + <location filename="../../../../src/core/model/GpgKey.cpp" line="89"/> <source>Unknown</source> <translation>Sconosciuto</translation> </message> <message> - <location filename="../../../../src/core/model/GpgKey.cpp" line="93"/> + <location filename="../../../../src/core/model/GpgKey.cpp" line="91"/> <source>Undefined</source> <translation>Non definito</translation> </message> <message> - <location filename="../../../../src/core/model/GpgKey.cpp" line="95"/> + <location filename="../../../../src/core/model/GpgKey.cpp" line="93"/> <source>Never</source> <translation>Mai</translation> </message> <message> - <location filename="../../../../src/core/model/GpgKey.cpp" line="97"/> + <location filename="../../../../src/core/model/GpgKey.cpp" line="95"/> <source>Marginal</source> <translation>Marginale</translation> </message> <message> - <location filename="../../../../src/core/model/GpgKey.cpp" line="99"/> + <location filename="../../../../src/core/model/GpgKey.cpp" line="97"/> <source>Full</source> <translation>Pieno</translation> </message> <message> - <location filename="../../../../src/core/model/GpgKey.cpp" line="101"/> + <location filename="../../../../src/core/model/GpgKey.cpp" line="99"/> <source>Ultimate</source> <translation>Ultimo</translation> </message> @@ -6286,17 +6326,12 @@ If the issue persists, consider seeking technical support or consulting the docu <translation>Se questo processo è troppo lento, impostare l'indirizzo del server delle chiavi in modo appropriato nel file di configurazione di gnupg (a seconda della situazione della rete nel proprio paese o regione).</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="67"/> - <source>Show Verify Details</source> - <translation>Mostra dettagli di verifica</translation> - </message> - <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="75"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="64"/> <source>Public key not found locally</source> <translation>Chiave pubblica non trovata localmente</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="76"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="65"/> <source>There is no target public key content in local for GpgFrontend to gather enough information about this Signature. Do you want to import the public key from Keyserver now?</source> <translation>Non c'è contenuto di chiave pubblica di destinazione in locale per GpgFrontend per raccogliere informazioni sufficienti su questa firma. Vuoi importare la chiave pubblica da Keyserver adesso?</translation> </message> @@ -6354,44 +6389,49 @@ If the issue persists, consider seeking technical support or consulting the docu <translation>Successo</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="578"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="555"/> <source>Sync All Public Key</source> <translation>Sincronizza tutte le chiavi pubbliche</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="579"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="556"/> <source>You have not checked any public keys that you want to synchronize, do you want to synchronize all local public keys from the key server?</source> <translation>Non hai selezionato nessuna chiave pubblica che desideri sincronizzare. Vuoi sincronizzare tutte le chiavi pubbliche locali dal server delle chiavi?</translation> </message> <message> - <location filename="../../../../src/core/GpgCoreInit.cpp" line="398"/> + <location filename="../../../../src/core/GpgCoreInit.cpp" line="422"/> <source>Cannot Find GpgConf</source> - <translation type="unfinished"></translation> + <translation>Impossibile trovare GpgConf</translation> </message> <message> - <location filename="../../../../src/core/GpgCoreInit.cpp" line="406"/> + <location filename="../../../../src/core/GpgCoreInit.cpp" line="430"/> <source>Cannot Find GnuPG</source> + <translation>Impossibile trovare GnuPG</translation> + </message> + <message> + <location filename="../../../../src/core/GpgCoreInit.cpp" line="405"/> + <source>Cannot get Infos from GpgConf</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/core/GpgCoreInit.cpp" line="421"/> - <source>Cannot Find Home Path</source> + <location filename="../../../../src/core/GpgCoreInit.cpp" line="445"/> + <source>Cannot Find Default Home Path</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/core/GpgCoreInit.cpp" line="473"/> + <location filename="../../../../src/core/GpgCoreInit.cpp" line="471"/> <source>GpgME Initiation Failed</source> - <translation type="unfinished"></translation> + <translation>Avvio GpgME non riuscito</translation> </message> <message> - <location filename="../../../../src/core/GpgCoreInit.cpp" line="547"/> + <location filename="../../../../src/core/GpgCoreInit.cpp" line="545"/> <source>GpgME Default Context Initiation Failed</source> - <translation type="unfinished"></translation> + <translation>Errore nell'avvio del contesto predefinito di GpgME</translation> </message> <message> - <location filename="../../../../src/core/GpgCoreInit.cpp" line="558"/> + <location filename="../../../../src/core/GpgCoreInit.cpp" line="556"/> <source>Gpg Default Key Database Initiation Failed</source> - <translation type="unfinished"></translation> + <translation>Errore nell'avvio del database delle chiavi predefinite Gpg</translation> </message> </context> </TS> diff --git a/resource/lfs/locale/ts/GpgFrontend.zh_CN.ts b/resource/lfs/locale/ts/GpgFrontend.zh_CN.ts index ba639c44..26162ff8 100644 --- a/resource/lfs/locale/ts/GpgFrontend.zh_CN.ts +++ b/resource/lfs/locale/ts/GpgFrontend.zh_CN.ts @@ -137,57 +137,57 @@ <context> <name>GpgFrontend::GpgKeyTableModel</name> <message> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="42"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="40"/> <source>Select</source> <translation>选择</translation> </message> <message> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="42"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="40"/> <source>Type</source> <translation>类型</translation> </message> <message> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="42"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="40"/> <source>Name</source> <translation>名称</translation> </message> <message> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="43"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="41"/> <source>Email Address</source> <translation>电子邮件地址</translation> </message> <message> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="43"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="41"/> <source>Usage</source> <translation>用法</translation> </message> <message> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="43"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="41"/> <source>Trust</source> <translation>信任</translation> </message> <message> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="44"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="42"/> <source>Key ID</source> <translation>密钥ID</translation> </message> <message> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="44"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="42"/> <source>Create Date</source> <translation>创建时间</translation> </message> <message> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="44"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="42"/> <source>Algorithm</source> <translation>算法</translation> </message> <message> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="45"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="43"/> <source>Subkey(s)</source> <translation>子密钥</translation> </message> <message> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="45"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="43"/> <source>Comment</source> <translation>注释</translation> </message> @@ -538,6 +538,14 @@ </message> </context> <context> + <name>GpgFrontend::KeyGenerateInfo</name> + <message> + <location filename="../../../../src/core/model/GpgKeyGenerateInfo.cpp" line="39"/> + <source>None</source> + <translation type="unfinished">无</translation> + </message> +</context> +<context> <name>GpgFrontend::Module::GlobalRegisterTable</name> <message> <location filename="../../../../src/core/module/GlobalRegisterTable.cpp" line="47"/> @@ -687,58 +695,58 @@ <context> <name>GpgFrontend::UI::ChoosePage</name> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="107"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="106"/> <source>Choose your action...</source> <translation>选择你的行动...</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="108"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="107"/> <source>...by clicking on the appropriate link.</source> <translation>...通过点击相应的链接。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="111"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="110"/> <source>If you have never used GpgFrontend before and also don't own a gpg key yet you may possibly want to read how to</source> <translation>如果您以前从未使用过 GpgFrontend,而且还没有 gpg 密钥,您可能需要阅读如何</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="114"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="113"/> <source>Generate Key</source> <translation>生成密钥</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="121"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="120"/> <source>If you want to learn how to encrypt, decrypt, sign and verify text, you can read </source> <translation>如果您想了解如何加密、解密、签名和验证文本,可以阅读 </translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="124"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="123"/> <source>Encrypt & Decrypt Text</source> <translation>加密和解密文本</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="124"/> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="136"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="123"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="135"/> <source>or</source> <translation>或者</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="126"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="125"/> <source>Sign & Verify Text</source> <translation>签名和验证文本</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="134"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="133"/> <source>If you want to operate file, you can read </source> <translation>如果要操作文件,可以阅读 </translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="136"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="135"/> <source>Encrypt & Sign File</source> <translation>加密并签署文件</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="138"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="137"/> <source>Sign & Verify File</source> <translation>签署并验证文件</translation> </message> @@ -746,39 +754,39 @@ <context> <name>GpgFrontend::UI::CommonUtils</name> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="481"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="419"/> <source>Timeout</source> <translation>超时</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="224"/> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="356"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="162"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="294"/> <source>Success</source> <translation>成功</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="159"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="119"/> <source>Failed to Load GnuPG Context</source> <translation>加载 GnuPG 上下文失败</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="161"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="121"/> <source>It seems that GnuPG (gpg) is not properly installed. Please refer to the <a href='https://www.gpgfrontend.bktus.com/overview/faq/#troubleshooting-gnupg-installation-issues'>FAQ</a> for instructions on fixing the installation. After resolving the issue, relaunch GpgFrontend.<br /><br />Alternatively, you can open the GnuPG Controller to configure a custom GnuPG installation for GpgFrontend to use. Once set, GpgFrontend will restart automatically.<br /><br />Details: %1</source> <translation>GnuPG (gpg) 似乎未正确安装。请参阅 <a href='https://www.gpgfrontend.bktus.com/overview/faq/#troubleshooting-gnupg-installation-issues'>FAQ</a> 获取修复安装的说明。解决该问题后,重新启动 GpgFrontend。<br /><br />或者,你可以打开 GnuPG 控制器,配置供 GpgFrontend 使用的自定义 GnuPG 安装。设置完成后,GpgFrontend 将自动重启。<br /><br />详情: %1</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="225"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="163"/> <source>Gpg Operation succeed.</source> <translation>Gpg 操作成功。</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="235"/> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="348"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="173"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="286"/> <source>Failure</source> <translation>失败</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="236"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="174"/> <source>Gpg Operation failed. Error code: %1 @@ -791,101 +799,101 @@ Description: %3</source> 说明: %3</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="263"/> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="270"/> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="538"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="201"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="208"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="476"/> <source>Error</source> <translation>错误</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="255"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="193"/> <source>Open Key</source> <translation>打开密钥</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="256"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="194"/> <source>Keyring files</source> <translation>密钥圈文件</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="264"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="202"/> <source>Cannot open this file. Please make sure that this is a regular file and it's readable.</source> <translation>无法打开此文件。请确保这是一个普通文件,并且有读取权限。</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="271"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="209"/> <source>The target file is too large for a keyring.</source> <translation>目标文件对于一个密钥来说太大。</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="277"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="215"/> <source>File Open Failed</source> <translation>文件打开失败</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="278"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="216"/> <source>Failed to open file: </source> <translation>打开文件失败: </translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="329"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="267"/> <source>Processing</source> <translation>处理中</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="349"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="287"/> <source>Failed to execute command.</source> <translation>执行命令失败。</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="357"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="295"/> <source>Succeed in executing command.</source> <translation>成功执行命令。</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="359"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="297"/> <source>Warning</source> <translation>警告</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="360"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="298"/> <source>Finished executing command.</source> <translation>命令执行完毕。</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="381"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="319"/> <source>Default Keyserver Not Found</source> <translation>未找到默认密钥服务器</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="382"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="320"/> <source>Cannot read default keyserver from your settings, please set a default keyserver first</source> <translation>无法从您的设置中读取默认密钥服务器,请先设置默认密钥服务器</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="478"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="416"/> <source>Key Not Found</source> <translation>未找到密钥</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="484"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="422"/> <source>Key Server Not Found</source> <translation>未找到密钥服务器</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="487"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="425"/> <source>Connection Error</source> <translation>连接错误</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="426"/> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="498"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="364"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="436"/> <source>The key has been updated</source> <translation>密钥已更新</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="428"/> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="500"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="366"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="438"/> <source>No need to update the key</source> <translation>无需更新密钥</translation> </message> @@ -893,37 +901,37 @@ Description: %3</source> <context> <name>GpgFrontend::UI::ConclusionPage</name> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="204"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="203"/> <source>Ready.</source> <translation>准备好。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="205"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="204"/> <source>Have fun with GpgFrontend!</source> <translation>祝您使用 GpgFrontend 愉快!</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="208"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="207"/> <source>You are ready to use GpgFrontend now.<br><br></source> <translation>您现在可以使用 GpgFrontend。<br><br></translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="210"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="209"/> <source>The Online Document</source> <translation>在线文档</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="211"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="210"/> <source> will get you started with GpgFrontend. Anytime you encounter problems, please try to find help from the documentation</source> <translation> 会让你学会 GpgFrontend 的基本操作。任何时候遇到问题,请尝试从文档中寻求帮助</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="220"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="219"/> <source>Open offline help.</source> <translation>打开离线帮助。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="224"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="223"/> <source>Don't show the wizard again.</source> <translation>不要再显示向导界面。</translation> </message> @@ -952,8 +960,8 @@ Description: %3</source> </message> <message> <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="74"/> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="112"/> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="146"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="111"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="145"/> <source>Error</source> <translation>错误</translation> </message> @@ -979,82 +987,82 @@ Description: %3</source> <translation>请在导出前生成密钥文件以保护您的密钥,这非常重要。不要忘记在安全的地方备份您的密码。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="113"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="112"/> <source>No key is suitable to export.</source> <translation>没有适合导出的密钥。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="118"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="117"/> <source>Generating</source> <translation>生成</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="129"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="128"/> <source>Success</source> <translation>成功</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="131"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="130"/> <source>The Key Package has been successfully generated and has been protected by encryption algorithms(AES-256-ECB). You can safely transfer your Key Package.</source> <translation>密钥包已成功生成并受到加密算法AES-256-ECB的保护。您可以安全地转移您的密钥包。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="136"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="135"/> <source>But the key file cannot be leaked under any circumstances. Please delete the Key Package and key file as soon as possible after completing the transfer operation.</source> <translation>但密钥文件在任何情况下都不能泄露。请在完成传输操作后尽快删除密钥包和密钥文件。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="147"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="146"/> <source>An error occurred while exporting the key package.</source> <translation>导出密钥包时出错。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="156"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="155"/> <source>Key Package Name</source> <translation>密钥包名称</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="157"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="156"/> <source>Output Path</source> <translation>输出路径</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="158"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="157"/> <source>Passphrase</source> <translation>密钥文件</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="160"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="159"/> <source>Tips: You can use Key Package to safely and conveniently transfer your public and private keys between devices.</source> <translation>提示:您可以使用密钥包在设备之间安全方便地传输您的公钥和私钥。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="162"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="161"/> <source>Generate and Save Passphrase</source> <translation>生成并保存密码</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="163"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="162"/> <source>Generate Key Package Name</source> <translation>生成密钥包名</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="164"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="163"/> <source>Select Output Path</source> <translation>选择输出路径</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="167"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="166"/> <source>Include secret key (Think twice before acting)</source> <translation>一并导出私钥(勾选前请三思)</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="169"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="168"/> <source>Exclude keys that do not have a private key</source> <translation>只导出有私钥的钥对</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="172"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="171"/> <source>Export As Key Package</source> <translation>导出为密钥包</translation> </message> @@ -1062,141 +1070,151 @@ Description: %3</source> <context> <name>GpgFrontend::UI::FilePage</name> <message> - <location filename="../../../../src/ui/widgets/FilePage.cpp" line="63"/> + <location filename="../../../../src/ui/widgets/FilePage.cpp" line="46"/> + <source>Switch Batch Mode</source> + <translation type="unfinished">切换到批量模式</translation> + </message> + <message> + <location filename="../../../../src/ui/widgets/FilePage.cpp" line="66"/> <source>Show Hidden File</source> <translation>显示隐藏文件</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FilePage.cpp" line="69"/> + <location filename="../../../../src/ui/widgets/FilePage.cpp" line="72"/> <source>Show System File</source> <translation>显示系统文件</translation> </message> + <message> + <location filename="../../../../src/ui/widgets/FilePage.cpp" line="78"/> + <source>ASCII Mode</source> + <translation type="unfinished">ASCII模式</translation> + </message> </context> <context> <name>GpgFrontend::UI::FileTreeView</name> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="88"/> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="101"/> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="159"/> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="204"/> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="225"/> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="266"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="93"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="106"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="164"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="209"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="232"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="279"/> <source>Error</source> <translation>错误</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="89"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="94"/> <source>The path is not exists, unprivileged or unreachable.</source> <translation>该路径不存在、没有特权或无法访问。</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="102"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="107"/> <source>The file is unprivileged or unreachable.</source> <translation>该目录不存在,或者您的权限不足。</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="152"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="157"/> <source>Warning</source> <translation>警告</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="153"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="158"/> <source>Are you sure you want to delete it?</source> <translation>你确定要删除吗?</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="160"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="165"/> <source>Unable to delete the file or folder.</source> <translation>无法删除文件或文件夹。</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="169"/> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="182"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="174"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="187"/> <source>Make New Directory</source> <translation>新建目录</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="170"/> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="183"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="175"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="188"/> <source>Directory Name</source> <translation>目录名称</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="197"/> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="218"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="202"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="225"/> <source>Create Empty File</source> <translation>创建空文件</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="197"/> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="218"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="202"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="225"/> <source>Filename (you can given extension)</source> <translation>文件名(您可以指定扩展名)</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="205"/> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="226"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="210"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="233"/> <source>Unable to create the file.</source> <translation>无法创建文件。</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="258"/> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="289"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="271"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="303"/> <source>Rename</source> <translation>改名</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="258"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="271"/> <source>New Filename</source> <translation>新文件名</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="267"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="280"/> <source>Unable to rename the file or folder.</source> <translation>无法重命名文件或文件夹。</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="284"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="297"/> <source>Open</source> <translation>打开</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="294"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="308"/> <source>Delete</source> <translation>删除</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="299"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="313"/> <source>Calculate Hash</source> <translation>计算哈希值</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="304"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="318"/> <source>Directory</source> <translation>目录</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="309"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="323"/> <source>File</source> <translation>文件</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="314"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="328"/> <source>Compress...</source> <translation>压缩...</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="321"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="335"/> <source>Open with Default System Application</source> <translation>使用默认系统应用程序打开</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="326"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="340"/> <source>New</source> <translation>新建</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="382"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="402"/> <source>Calculating</source> <translation>计算中</translation> </message> @@ -1233,68 +1251,63 @@ Description: %3</source> </message> <message> <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="52"/> - <source>Enable to use longer key expiration date.</source> - <translation>启用以使用更长的密钥到期日期。</translation> - </message> - <message> - <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="54"/> <source>Import files dropped on the Key List without confirmation.</source> <translation>未经确认,导入放在密钥列表中的文件。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="56"/> + <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="54"/> <source>Disable loading of all modules (including integrated modules)</source> <translation>禁止加载所有的模组(包括被集成模组)</translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="58"/> + <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="56"/> <source>Language</source> <translation>语言</translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="60"/> + <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="58"/> <source>NOTE</source> <translation>提示</translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="60"/> + <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="58"/> <source>: </source> <translation>: </translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="61"/> + <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="59"/> <source>GpgFrontend will restart automatically if you change the language!</source> <translation>如果您更改语言,GpgFrontend 将自动重启!</translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="63"/> + <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="61"/> <source>Data</source> <translation>数据</translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="65"/> - <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="83"/> + <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="63"/> + <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="81"/> <source>Clear All Log (Total Size: %1)</source> <translation>清除所有日志(总大小:%1)</translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="68"/> - <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="97"/> + <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="66"/> + <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="95"/> <source>Clear All Data Objects (Total Size: %1)</source> <translation>清除所有数据对象(总大小:%1)</translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="71"/> + <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="69"/> <source>Reveal in File Explorer</source> <translation>在文件资源管理器中显示</translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="90"/> + <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="88"/> <source>Confirm</source> <translation>确认</translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="91"/> + <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="89"/> <source>Are you sure you want to clear all data objects? This will result in loss of all cached form positions, statuses, key servers, etc.</source> <translation>您确定要清除所有数据对象吗?这将导致所有缓存的页面位置、状态、密钥服务器等丢失。</translation> @@ -1303,150 +1316,182 @@ This will result in loss of all cached form positions, statuses, key servers, et <context> <name>GpgFrontend::UI::GnuPGControllerDialog</name> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="69"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="70"/> <source>General</source> <translation>通用</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="70"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="71"/> <source>Key Database</source> <translation>密钥数据库</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="71"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="72"/> <source>Advanced</source> <translation>高级</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="51"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="52"/> <source>Use Binary Mode for File Operations</source> <translation>使用二进制模式进行文件操作</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="53"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="54"/> <source>Use Pinentry as Password Input Dialog</source> <translation>使用 Pinentry 作为密码输入对话框</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="54"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="55"/> <source>Enable GpgME Debug Log</source> <translation>启用 GpgME 调试日志</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="55"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="56"/> <source>Use Custom GnuPG</source> <translation>使用自定义 GnuPG</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="56"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="57"/> <source>Select GnuPG Path</source> <translation>选择 GnuPG 路径</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="76"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="77"/> <source>Name</source> <translation>名称</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="76"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="77"/> <source>Path</source> <translation>路径</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="363"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="77"/> + <source>Status</source> + <translation type="unfinished">状态</translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="77"/> + <source>Real Path</source> + <translation type="unfinished">实际路径</translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="360"/> <source>Maximum Key Database Limit Reached</source> <translation>已达到密钥数据库上限</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="364"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="361"/> <source>Currently, GpgFrontend supports a maximum of 8 key databases. Please remove an existing database to add a new one.</source> <translation>目前,GpgFrontend 最多支持 8 个密钥数据库。要添加新数据库,请移除现有数据库。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="375"/> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="605"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="372"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="618"/> <source>Duplicate Key Database Paths</source> <translation>重复的密钥数据库路径</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="376"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="373"/> <source>The newly added key database path duplicates a previously existing one.</source> <translation>新添加的密钥数据库路径与先前存在的路径重复。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="445"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="382"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="629"/> + <source>Invalid Key Database Paths</source> + <translation type="unfinished">无效的密钥数据库地址</translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="383"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="630"/> + <source>The edited key database path is not a valid path that GpgFrontend can use</source> + <translation type="unfinished">编辑的密钥数据库路径不是 GpgFrontend 可以使用的有效路径</translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="430"/> + <source>Active</source> + <translation type="unfinished">启用</translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="430"/> + <source>Inactive</source> + <translation type="unfinished">未启用</translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="458"/> <source>Confirm Deletion</source> <translation>确认删除</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="446"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="459"/> <source>Are you sure you want to delete the selected key database?</source> <translation>您确定要删除选定的密钥数据库吗?</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="584"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="597"/> <source>No Key Database Selected</source> <translation>未选择任何密钥数据库</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="585"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="598"/> <source>Please select a key database to edit.</source> <translation>请选择要编辑的密钥数据库。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="606"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="619"/> <source>The edited key database path duplicates a previously existing one.</source> <translation>编辑后的密钥数据库路径与先前存在的路径重复。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="58"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="59"/> <source>Restart Gpg Agent on start</source> <translation>启动时重启 Gpg Agent</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="60"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="61"/> <source>Kill all gnupg daemon at close</source> <translation>在关闭程序时杀死所有GnuPG的守护进程</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="64"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="65"/> <source>Tips: please select a directory where "gpgconf" is located in.</source> <translation>提示:请选择一个包含有“gpgconf”可执行文件的目录</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="66"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="67"/> <source>Tips: notice that modify any of these settings will cause an Application restart.</source> <translation>提示:请注意,修改任何这些设置都会导致应用程序重新启动。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="107"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="108"/> <source>Open Directory</source> <translation>打开目录</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="183"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="184"/> <source>GnuPG Controller</source> <translation>GnuPG 控制器</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="331"/> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="338"/> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="350"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="328"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="335"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="347"/> <source>Illegal GnuPG Path</source> <translation>非法 GnuPG 路径</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="332"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="329"/> <source>Target GnuPG Path is not an exists readable directory.</source> <translation>目标 GnuPG 路径不是现有的可读目录。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="339"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="336"/> <source>Target GnuPG Path is not an absolute path.</source> <translation>目标 GnuPG 路径不是绝对路径。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="351"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="348"/> <source>Target GnuPG Path contains no "gpgconf" executable.</source> <translation>目标 GnuPG 路径不包含“gpgconf”可执行文件。</translation> </message> @@ -1454,27 +1499,38 @@ This will result in loss of all cached form positions, statuses, key servers, et <context> <name>GpgFrontend::UI::GpgFrontendApplication</name> <message> - <location filename="../../../../src/ui/GpgFrontendApplication.cpp" line="71"/> + <location filename="../../../../src/ui/GpgFrontendApplication.cpp" line="77"/> <source>Standard Exception Thrown</source> <translation>小意外</translation> </message> <message> - <location filename="../../../../src/ui/GpgFrontendApplication.cpp" line="72"/> + <location filename="../../../../src/ui/GpgFrontendApplication.cpp" line="78"/> <source>Oops, an standard exception was thrown during the running of the program. This is not a serious problem, it may be the negligence of the programmer, please report this problem if you can.</source> <translation>糟糕,在程序运行期间遇到了一个小异常。这不是一个严重的问题,应该是由程序员的疏忽导致的,如果可以的话,请报告这个问题。</translation> </message> <message> - <location filename="../../../../src/ui/GpgFrontendApplication.cpp" line="80"/> + <location filename="../../../../src/ui/GpgFrontendApplication.cpp" line="86"/> <source>Unhandled Exception Thrown</source> <translation>未处理的异常</translation> </message> <message> - <location filename="../../../../src/ui/GpgFrontendApplication.cpp" line="81"/> + <location filename="../../../../src/ui/GpgFrontendApplication.cpp" line="87"/> <source>Oops, an unhandled exception was thrown during the running of the program. This is not a serious problem, it may be the negligence of the programmer, please report this problem if you can.</source> <translation>糟糕,在程序运行期间引发了未处理的异常。这不是一个严重的问题,可能是程序员的疏忽,如果可以的话,请报告这个问题。</translation> </message> </context> <context> + <name>GpgFrontend::UI::GpgOperaHelper</name> + <message> + <location filename="../../../../src/ui/function/GpgOperaHelper.cpp" line="97"/> + <location filename="../../../../src/ui/function/GpgOperaHelper.cpp" line="133"/> + <location filename="../../../../src/ui/function/GpgOperaHelper.cpp" line="175"/> + <location filename="../../../../src/ui/function/GpgOperaHelper.cpp" line="213"/> + <source>Critical Error</source> + <translation type="unfinished">关键错误</translation> + </message> +</context> +<context> <name>GpgFrontend::UI::InfoBoardWidget</name> <message> <location filename="../../../../src/ui/widgets/InfoBoardWidget.cpp" line="46"/> @@ -1558,42 +1614,42 @@ This will result in loss of all cached form positions, statuses, key servers, et <context> <name>GpgFrontend::UI::IntroPage</name> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="71"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="70"/> <source>Getting Started...</source> <translation>入门...</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="72"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="71"/> <source>... with GpgFrontend</source> <translation>... 使用 GpgFrontend</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="75"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="74"/> <source>Welcome to GpgFrontend for decrypting and signing text or files!</source> <translation>欢迎使用GpgFrontend!你可以使用该工具解密、签名文本与文件。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="77"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="76"/> <source>is a Powerful, Easy-to-Use, Compact, Cross-Platform, and Installation-Free OpenPGP Crypto Tool. </source> <translation>是一个强大、易用、灵活、跨平台与免安装的OpenPGP加密工具。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="79"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="78"/> <source>To get started, be sure to check out the</source> <translation>初次使用,确认阅读过</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="82"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="81"/> <source>by clicking the link, the page will open in your web browser</source> <translation>点击链接后,将通过浏览器打开该页面</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="81"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="80"/> <source>Overview</source> <translation>概述</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="91"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="90"/> <source>If it supports the language currently being used in your system, GpgFrontend will automatically set it.</source> <translation>GpgFrontend 已经自动将语言设置为中文。</translation> </message> @@ -1601,52 +1657,57 @@ This will result in loss of all cached form positions, statuses, key servers, et <context> <name>GpgFrontend::UI::KeyDatabaseEditDialog</name> <message> - <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="47"/> + <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="50"/> <source>Key Database Name</source> <translation>密钥数据库名称</translation> </message> <message> - <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="48"/> + <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="51"/> <source>Key Database Path</source> <translation>密钥数据库路径</translation> </message> <message> - <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="49"/> + <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="52"/> <source>Select A Key Database Path</source> <translation>选择一个密钥数据库路径</translation> </message> <message> - <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="51"/> + <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="53"/> + <source>Convert to Relative Path</source> + <translation type="unfinished">转换为相对路径</translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="55"/> <source>Key Database Info</source> <translation>密钥数据库信息</translation> </message> <message> - <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="55"/> + <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="59"/> <source>Open Directory</source> <translation>打开目录</translation> </message> <message> - <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="58"/> + <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="62"/> <source>Illegal GnuPG Key Database Path</source> <translation>非法的 GnuPG 密钥数据库路径</translation> </message> <message> - <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="59"/> + <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="63"/> <source>Target GnuPG Key Database Path is not an exists readable directory.</source> <translation>目标 GnuPG 密钥数据库路径不是现有的可读目录。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="81"/> + <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="85"/> <source>The key database name cannot be empty.</source> <translation>密钥数据库名称不能为空</translation> </message> <message> - <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="86"/> + <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="90"/> <source>The key database path cannot be empty.</source> <translation>密钥数据库路径不能为空</translation> </message> <message> - <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="92"/> + <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="96"/> <source>A key database with the name '%1' already exists. Please choose a different name.</source> <translation>名称为'%1'的密钥数据库已经存在。请选择其他名称。</translation> </message> @@ -1680,144 +1741,250 @@ This will result in loss of all cached form positions, statuses, key servers, et </message> </context> <context> - <name>GpgFrontend::UI::KeyGenDialog</name> + <name>GpgFrontend::UI::KeyGenPage</name> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="66"/> - <source>Generate Key</source> - <translation>生成密钥</translation> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="163"/> + <source>Create a keypair...</source> + <translation>创建密钥对...</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="100"/> - <source>Name must contain at least five characters.</source> - <translation>名称必须至少包含五个字符。</translation> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="164"/> + <source>...for decrypting and signing messages</source> + <translation>...用于解密和签署消息</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="105"/> - <source>Please give a email address.</source> - <translation>请提供一个电子邮件地址。</translation> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="166"/> + <source>You should create a new keypair.The pair consists of a public and a private key.<br>Other users can use the public key to encrypt messages for you and verify messages signed by you.You can use the private key to decrypt and sign messages.<br>For more information have a look at the offline tutorial (which then is shown in the main window):</source> + <translation>您应该创建一个新的密钥对。该对由一个公钥和一个私钥组成。<br>其他用户可以使用公钥为您加密消息并验证您签署的消息。您可以使用私钥解密和签名消息。<br>有关更多信息,请查看离线教程(然后显示在主窗口中):</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="113"/> - <source>Expiration time too long.</source> - <translation>过期时间太长。</translation> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="178"/> + <source>Offline tutorial</source> + <translation>离线教程</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="158"/> - <source>Generating</source> - <translation>生成</translation> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="182"/> + <source>Create New Key</source> + <translation>创建新密钥</translation> </message> +</context> +<context> + <name>GpgFrontend::UI::KeyGenerateDialog</name> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="169"/> - <source>Error</source> - <translation>错误</translation> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="63"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="70"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="578"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="584"/> + <source>Custom</source> + <translation type="unfinished">自定义</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="170"/> - <source>Unknown error occurred</source> - <translation>发生了未知错误</translation> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="71"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="527"/> + <source>3 Months</source> + <translation type="unfinished">3个月</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="206"/> - <source>Key Usage</source> - <translation>密钥使用</translation> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="72"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="532"/> + <source>6 Months</source> + <translation type="unfinished">6个月</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="208"/> - <source>Encryption</source> - <translation>加密</translation> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="73"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="537"/> + <source>1 Year</source> + <translation type="unfinished">1年</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="211"/> - <source>Signing</source> - <translation>签名</translation> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="74"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="139"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="144"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="542"/> + <source>2 Years</source> + <translation type="unfinished">2年</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="214"/> - <source>Certification</source> - <translation>认证</translation> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="75"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="547"/> + <source>5 Years</source> + <translation type="unfinished">5年</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="217"/> - <source>Authentication</source> - <translation>验证</translation> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="76"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="552"/> + <source>10 Years</source> + <translation type="unfinished">10年</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="455"/> - <source>Key Database</source> - <translation>密钥数据库</translation> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="77"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="100"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="109"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="558"/> + <source>Non Expired</source> + <translation type="unfinished">不过期</translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="81"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="290"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="589"/> + <source>Primary Key Only</source> + <translation type="unfinished">仅主密钥</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="456"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="82"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="338"/> + <source>Primary Key With Subkey</source> + <translation type="unfinished">主密钥附带子密钥</translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="85"/> <source>Name</source> - <translation>名称</translation> + <translation type="unfinished">名称</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="457"/> - <source>Email Address</source> - <translation>电子邮件地址</translation> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="86"/> + <source>Email</source> + <translation type="unfinished">电子邮件</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="458"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="87"/> <source>Comment</source> - <translation>注释</translation> + <translation type="unfinished">注释</translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="88"/> + <source>Key Database</source> + <translation type="unfinished">密钥数据库</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="459"/> - <source>Expiration Date</source> - <translation>截止日期</translation> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="89"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="92"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="102"/> + <source>Algorithm</source> + <translation type="unfinished">算法</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="460"/> - <source>Never Expire</source> - <translation>永不过期</translation> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="90"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="93"/> + <source>Validity Period</source> + <translation type="unfinished">有效时长</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="461"/> - <source>KeySize (in Bit)</source> - <translation>密钥大小(以位为单位)</translation> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="94"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="104"/> + <source>Key Length</source> + <translation type="unfinished">密钥长度</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="462"/> - <source>Key Type</source> - <translation>密钥类型</translation> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="95"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="105"/> + <source>Usage</source> + <translation type="unfinished">用法</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="463"/> - <source>Non Pass Phrase</source> - <translation>不设置密码</translation> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="96"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="106"/> + <source>Encrypt</source> + <translation type="unfinished">加密</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="477"/> - <source>Basic Information</source> - <translation>基本信息</translation> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="97"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="107"/> + <source>Sign</source> + <translation type="unfinished">签名</translation> </message> -</context> -<context> - <name>GpgFrontend::UI::KeyGenPage</name> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="164"/> - <source>Create a keypair...</source> - <translation>创建密钥对...</translation> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="98"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="108"/> + <source>Authentication</source> + <translation type="unfinished">验证</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="165"/> - <source>...for decrypting and signing messages</source> - <translation>...用于解密和签署消息</translation> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="99"/> + <source>No Passphrase</source> + <translation type="unfinished">无密码</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="167"/> - <source>You should create a new keypair.The pair consists of a public and a private key.<br>Other users can use the public key to encrypt messages for you and verify messages signed by you.You can use the private key to decrypt and sign messages.<br>For more information have a look at the offline tutorial (which then is shown in the main window):</source> - <translation>您应该创建一个新的密钥对。该对由一个公钥和一个私钥组成。<br>其他用户可以使用公钥为您加密消息并验证您签署的消息。您可以使用私钥解密和签名消息。<br>有关更多信息,请查看离线教程(然后显示在主窗口中):</translation> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="103"/> + <source>Expire Date</source> + <translation type="unfinished">到期日期</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="179"/> - <source>Offline tutorial</source> - <translation>离线教程</translation> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="112"/> + <source>Easy Mode</source> + <translation type="unfinished">简单模式</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="183"/> - <source>Create New Key</source> - <translation>创建新密钥</translation> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="113"/> + <source>Primary Key</source> + <translation type="unfinished">主密钥</translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="114"/> + <source>Subkey</source> + <translation type="unfinished">子密钥</translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="117"/> + <source>Generate</source> + <translation type="unfinished">生成</translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="134"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="261"/> + <source>None</source> + <translation type="unfinished">无</translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="146"/> + <source>Generate Key</source> + <translation type="unfinished">生成密钥</translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="156"/> + <source>Name must contain at least five characters.</source> + <translation type="unfinished">名称必须至少包含五个字符。</translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="161"/> + <source>Please give a valid email address.</source> + <translation type="unfinished">请使用一个有效的电子邮件地址。</translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="166"/> + <source>Please give a valid primary key algorithm.</source> + <translation type="unfinished">请选择一个有效的主密钥算法。</translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="175"/> + <source>Time to primary key expiration must not be less than 120 seconds.</source> + <translation type="unfinished">距离主密钥过期时间不得少于 120 秒。</translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="182"/> + <source>Please give a valid subkey algorithm.</source> + <translation type="unfinished">请选择一个有效的子密钥算法。</translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="190"/> + <source>Time to subkey expiration must not be less than 120 seconds.</source> + <translation type="unfinished">距离子密钥过期时间不得少于 120 秒。</translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="617"/> + <source>Error</source> + <translation type="unfinished">错误</translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="618"/> + <source>Unknown error occurred</source> + <translation type="unfinished">发生未知错误</translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="630"/> + <source>Generating</source> + <translation type="unfinished">生成</translation> </message> </context> <context> @@ -1937,122 +2104,132 @@ This will result in loss of all cached form positions, statuses, key servers, et <context> <name>GpgFrontend::UI::KeyList</name> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="254"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="250"/> <source>Refresh</source> <translation>刷新</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="256"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="252"/> <source>Refresh the key list to synchronize changes.</source> <translation>刷新密钥列表以同步更改。</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="257"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="253"/> <source>Sync Public Key</source> <translation>同步公钥</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="259"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="255"/> <source>Sync public key with your default keyserver.</source> <translation>将公钥与您的默认密钥服务器同步。</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="260"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="256"/> <source>Uncheck ALL</source> <translation>全不选</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="262"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="258"/> <source>Cancel all checked items in the current tab at once.</source> <translation>一次性取消选中当前选项卡中所有的项目。</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="263"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="259"/> <source>Check ALL</source> <translation>全选</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="265"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="261"/> <source>Check all items in the current tab at once</source> <translation>一次性选中当前选项卡中的所有项目</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="266"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="262"/> <source>Search for keys...</source> <translation>搜索钥匙...</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="108"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="106"/> <source>Key ID</source> <translation>密钥编号</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="119"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="117"/> <source>Algorithm</source> <translation>算法</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="130"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="128"/> <source>Owner Trust</source> <translation>信任级别</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="142"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="140"/> <source>Create Date</source> <translation>创建时间</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="154"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="152"/> <source>Subkey(s)</source> <translation>子密钥</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="168"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="166"/> <source>Comment</source> <translation>注释</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="300"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="296"/> <source>Refreshing Key List...</source> <translation>正在刷新密钥列表...</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="477"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="473"/> <source>Import Keys</source> <translation>导入密钥</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="479"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="475"/> <source>You've dropped something on the table.</source> - <translation>你把东西掉在桌子上了。</translation> + <translation>你刚刚把文件拖拽到密钥列表中。</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="480"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="476"/> <source>GpgFrontend will now try to import key(s).</source> <translation>GpgFrontend 现在将尝试导入密钥。</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="483"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="479"/> <source>Always import without bothering.</source> <translation>始终导入而无需打扰。</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="305"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="645"/> + <source>Error</source> + <translation type="unfinished">错误</translation> + </message> + <message> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="645"/> + <source>Key Not Found.</source> + <translation type="unfinished">未找到密钥。</translation> + </message> + <message> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="301"/> <source>Key List Refreshed.</source> <translation>密钥列表已刷新。</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="600"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="577"/> <source>Syncing Key List...</source> <translation>正在同步密钥列表...</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="609"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="586"/> <source>Sync [%1/%2] %3 %4</source> <translation>同步 [%1/%2] %3 %4</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="619"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="596"/> <source>Key List Sync Done.</source> <translation>密钥列表同步完成。</translation> </message> @@ -2060,368 +2237,354 @@ This will result in loss of all cached form positions, statuses, key servers, et <context> <name>GpgFrontend::UI::KeyMgmt</name> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="58"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="59"/> <source>All</source> <translation>全部</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="63"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="64"/> <source>Only Public Key</source> <translation>只有公钥</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="70"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="71"/> <source>Has Private Key</source> <translation>有私钥</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="77"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="78"/> <source>No Primary Key</source> <translation>无主密钥</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="86"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="87"/> <source>Revoked</source> <translation>已吊销</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="93"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="94"/> <source>Expired</source> <translation>已到期</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="117"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="114"/> <source>KeyPair Management</source> <translation>密钥对管理</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="138"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="135"/> <source>Open</source> <translation>打开</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="140"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="137"/> <source>Open Key File</source> <translation>打开密钥文件</translation> </message> <message> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="143"/> <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="146"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="149"/> <source>Close</source> <translation>关闭</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="152"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="149"/> <source>New Keypair</source> <translation>新密钥对</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="155"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="152"/> <source>Generate KeyPair</source> <translation>生成密钥对</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="159"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="156"/> <source>New Subkey</source> <translation>新子密钥</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="163"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="160"/> <source>Generate Subkey For Selected KeyPair</source> <translation>为选定的密钥对生成子密钥</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="167"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="266"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="164"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="262"/> <source>File</source> <translation>文件</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="169"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="166"/> <source>Import New Key From File</source> <translation>从文件导入新密钥</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="175"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="172"/> <source>Clipboard</source> <translation>剪贴板</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="179"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="176"/> <source>Import New Key From Clipboard</source> <translation>从剪贴板导入新密钥</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="191"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="187"/> <source>Keyserver</source> <translation>密钥服务器</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="195"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="191"/> <source>Import New Key From Keyserver</source> <translation>从密钥服务器导入新密钥</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="202"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="568"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="198"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="543"/> <source>Key Package</source> <translation>密钥包</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="205"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="201"/> <source>Import Key(s) From a Key Package</source> <translation>从密钥包导入密钥</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="209"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="205"/> <source>Export To Clipboard</source> <translation>导出到剪贴板</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="213"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="209"/> <source>Export Checked Key(s) To Clipboard</source> <translation>将选中的密钥导出到剪贴板</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="217"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="213"/> <source>Export As Key Package</source> <translation>导出为密钥包</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="220"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="216"/> <source>Export Checked Key(s) To a Key Package</source> <translation>将勾选的密钥导出到密钥包</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="224"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="220"/> <source>Export As OpenSSH</source> <translation>导出为OpenSSH密钥</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="227"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="223"/> <source>Export Checked Key As OpenSSH Format to File</source> <translation>将校验过的密钥导出为 OpenSSH 格式文件</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="231"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="227"/> <source>Delete Selected Key(s)</source> <translation>删除这些选定的密钥</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="233"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="229"/> <source>Delete the Selected keys</source> <translation>删除这个选定的密钥</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="237"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="233"/> <source>Delete Checked Key(s)</source> <translation>删除选中的密钥</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="239"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="235"/> <source>Delete the Checked keys</source> <translation>删除选中的密钥</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="244"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="240"/> <source>Show Key Details</source> <translation>显示密钥细节</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="246"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="242"/> <source>Show Details for this Key</source> <translation>显示此密钥的详细信息</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="250"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="252"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="246"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="248"/> <source>Set Owner Trust Level</source> <translation>设置所有者信任级别</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="270"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="290"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="266"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="286"/> <source>Key</source> <translation>密钥</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="271"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="267"/> <source>Generate Key</source> <translation>生成密钥</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="275"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="303"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="271"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="299"/> <source>Import Key</source> <translation>导入密钥</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="281"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="311"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="312"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="277"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="307"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="308"/> <source>Export Key</source> <translation>导出密钥</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="302"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="298"/> <source>Import key</source> <translation>导入密钥</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="347"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="343"/> <source>Deleting Keys</source> <translation>删除密钥</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="348"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="344"/> <source>Are you sure that you want to delete the following keys?</source> <translation>您确定要删除以下密钥吗?</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="350"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="346"/> <source>The action can not be undone.</source> <translation>该操作无法撤消。</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="368"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="431"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="443"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="473"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="522"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="533"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="546"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="577"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="585"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="601"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="609"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="625"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="418"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="430"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="497"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="508"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="521"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="552"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="560"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="576"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="584"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="600"/> <source>Error</source> <translation>错误</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="368"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="473"/> - <source>Key Not Found.</source> - <translation>未找到密钥。</translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="379"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="393"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="493"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="499"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="367"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="381"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="469"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="475"/> <source>Forbidden</source> <translation>操作被禁止</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="380"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="394"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="368"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="382"/> <source>Please check some keys before doing this operation.</source> <translation>请在执行此操作之前勾选一些密钥。</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="386"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="560"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="374"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="535"/> <source>key(s) exported</source> <translation>导出的密钥</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="421"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="512"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="408"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="487"/> <source>Exporting</source> <translation>导出中</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="432"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="444"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="523"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="534"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="419"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="431"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="498"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="509"/> <source>Unknown error occurred</source> <translation>发生了未知错误</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="465"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="477"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="453"/> <source>Invalid Operation</source> <translation>无效操作</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="466"/> - <source>Please select one KeyPair before doing this operation.</source> - <translation>请在执行此操作前选择一个钥对。</translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="478"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="454"/> <source>If a key pair does not have a private key then it will not be able to generate sub-keys.</source> <translation>如果密钥对没有私钥,那么它将无法生成子密钥。</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="494"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="470"/> <source>Please check a key before performing this operation.</source> <translation>请在执行此操作前勾选一个密钥。</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="500"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="476"/> <source>This operation accepts just a single key.</source> <translation>此操作只接受单个密钥。</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="547"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="522"/> <source>This key may not be able to export as OpenSSH format. Please check the key-size of the subkey(s) used to sign.</source> <translation>此密钥可能无法导出为 OpenSSH 格式。请检查用于签名的子密钥的密钥大小。</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="555"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="530"/> <source>Export OpenSSH Key To File</source> <translation>将 OpenSSH 密钥导出到文件</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="556"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="531"/> <source>OpenSSH Public Key Files</source> <translation>OpenSSH 公钥文件</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="568"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="543"/> <source>Import Key Package</source> <translation>导入密钥包</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="578"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="602"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="553"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="577"/> <source>Cannot open this file. Please make sure that this is a regular file and it's readable.</source> <translation>无法打开此文件。请确保这是一个普通文件,并且有读取权限。</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="586"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="561"/> <source>The target file is too large for a key package.</source> <translation>目标文件对于密钥包来说太大。</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="591"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="566"/> <source>Import Key Package Passphrase File</source> <translation>导入密钥包口令文件</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="592"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="567"/> <source>Key Package Passphrase File</source> <translation>密钥包口令文件</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="610"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="585"/> <source>The target file is too large for a key package passphrase.</source> <translation>目标文件对于密钥包口令来说太大。</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="615"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="590"/> <source>Importing</source> <translation>导入中</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="632"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="607"/> <source>key(s) imported</source> <translation>导入的密钥</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="626"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="601"/> <source>An error occur in importing key package.</source> <translation>导入密钥包出错。</translation> </message> @@ -2627,7 +2790,7 @@ This will result in loss of all cached form positions, statuses, key servers, et <translation>警告: 主密钥不存在</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairDetailTab.cpp" line="350"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairDetailTab.cpp" line="344"/> <source>Notice: The public key has been published on keys.openpgp.org.</source> <translation>提示: 公钥已在 keys.openpgp.org 上公布。</translation> </message> @@ -2635,125 +2798,125 @@ This will result in loss of all cached form positions, statuses, key servers, et <context> <name>GpgFrontend::UI::KeyPairOperaTab</name> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="62"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="61"/> <source>General Operations</source> <translation>一般操作</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="68"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="67"/> <source>Export Public Key</source> <translation>导出公钥</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="74"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="73"/> <source>Export Private Key</source> <translation>导出私钥</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="81"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="80"/> <source>Modify Expiration Datetime (Primary Key)</source> <translation>修改到期日期时间(主密钥)</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="84"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="83"/> <source>Modify Password</source> <translation>修改密码</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="208"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="207"/> <source>Generate Revoke Certificate</source> <translation>生成吊销证书</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="125"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="124"/> <source>Modify TOFU Policy</source> <translation>修改TOFU策略</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="101"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="100"/> <source>Key Server Operations</source> <translation>密钥服务器操作</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="109"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="689"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="108"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="687"/> <source>Import A Paper Key</source> <translation>导入纸密钥</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="119"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="118"/> <source>Revoke Certificate Operation</source> <translation>吊销证书操作</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="132"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="131"/> <source>Set Owner Trust Level</source> <translation>设置所有者信任级别</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="156"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="155"/> <source>Publish Public Key to Key Server</source> <translation>向密钥服务器发布公钥</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="164"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="163"/> <source>Refresh Public Key From Key Server</source> <translation>从密钥服务器刷新本地公钥</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="179"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="178"/> <source>Export Full Secret Key</source> <translation>导出完整私钥</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="185"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="184"/> <source>Export Shortest Secret Key</source> <translation>导出最短私钥</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="196"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="195"/> <source>Export Secret Key As A Paper Key</source> <translation>将私钥导出为纸密钥</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="213"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="212"/> <source>Import Revoke Certificate</source> <translation>导入吊销证书</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="242"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="291"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="342"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="635"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="241"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="290"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="341"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="633"/> <source>Export Key To File</source> <translation>将密钥导出到文件</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="243"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="292"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="343"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="636"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="242"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="291"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="342"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="634"/> <source>Key Files</source> <translation>密钥文件</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="248"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="297"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="348"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="659"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="247"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="296"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="347"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="657"/> <source>Export Error</source> <translation>导出错误</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="249"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="298"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="349"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="660"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="248"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="297"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="348"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="658"/> <source>Couldn't open %1 for writing</source> <translation>无法打开 %1 进行写入</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="391"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="390"/> <source>Failed to upload public key to the server. Fingerprint: %1 Error: %2</source> @@ -2762,12 +2925,12 @@ Error: %2</source> 错误信息:%2</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="423"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="422"/> <source>Public Key Upload Successful</source> <translation>公钥上传成功</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="424"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="423"/> <source>The public key was successfully uploaded to the key server keys.openpgp.org. Fingerprint: %1 @@ -2784,236 +2947,236 @@ Note: For verification, you can find more information here: https://keys.openpgp 注:关于邮件地址验证,您可以在此处找到更多信息: https://keys.openpgp.org/about</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="466"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="555"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="464"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="553"/> <source>Revocation Certificates</source> <translation>吊销证书</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="477"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="475"/> <source>Generate revocation certificate</source> <translation>生成撤吊销证书</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="504"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="513"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="502"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="511"/> <source>Policy Auto</source> <translation>策略:自动</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="504"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="515"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="502"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="513"/> <source>Policy Good</source> <translation>策略:正常</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="504"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="517"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="502"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="515"/> <source>Policy Bad</source> <translation>策略:异常</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="505"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="519"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="503"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="517"/> <source>Policy Ask</source> <translation>策略:询问</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="505"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="521"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="503"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="519"/> <source>Policy Unknown</source> <translation>策略:未知</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="509"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="507"/> <source>Modify TOFU Policy(Default is Auto)</source> <translation>修改TOFU策略(默认为自动)</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="510"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="508"/> <source>Policy for the Key Pair:</source> <translation>密钥对策略:</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="527"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="525"/> <source>Not Successful</source> <translation>失败</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="528"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="526"/> <source>Modify TOFU policy not successfully.</source> <translation>修改 TOFU 策略失败。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="542"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="554"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="540"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="552"/> <source>Import Key Revocation Certificate</source> <translation>导入密钥吊销证书</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="543"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="541"/> <source>You are about to import the</source> <translation>您将导入</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="544"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="542"/> <source>REVOCATION CERTIFICATE</source> <translation>吊销证书</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="545"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="543"/> <source>A successful import will result in the key being irreversibly revoked.</source> <translation>导入成功后,密钥将被不可逆转地吊销。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="547"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="545"/> <source>Do you REALLY want to execute this operation?</source> <translation>您真的想执行这个操作吗?</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="563"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="572"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="581"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="652"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="698"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="706"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="714"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="732"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="561"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="570"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="579"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="650"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="696"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="704"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="712"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="730"/> <source>Error</source> <translation>错误</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="564"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="582"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="699"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="715"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="562"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="580"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="697"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="713"/> <source>Cannot open this file. Please make sure that this is a regular file and it's readable.</source> <translation>无法打开此文件。请确保这是一个普通文件,并且有读取权限。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="573"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="571"/> <source>The target file is too large for a key revocation certificate.</source> <translation>目标文件对于一个密钥吊销证书来说太大了。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="653"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="651"/> <source>An error occurred trying to generate Paper Key.</source> <translation>尝试生成纸密钥时发生错误。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="733"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="731"/> <source>An error occurred trying to recover the Paper Key back to the private key.</source> <translation>用纸密钥恢复私钥时发生了错误。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="690"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="688"/> <source>Paper Key File</source> <translation>纸密钥文件</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="256"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="307"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="596"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="255"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="306"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="594"/> <source>WARNING: You are about to export your</source> <translation>警告: 您将导出您的</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="257"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="308"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="597"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="256"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="307"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="595"/> <source>PRIVATE KEY</source> <translation>私钥</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="258"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="598"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="257"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="596"/> <source>This is NOT your Public Key, so <b>DO NOT</b> share it with anyone.</source> <translation>这不是公钥,因此切勿与任何人共享。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="261"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="260"/> <source>You are exporting a <b>minimum size</b> private key, which removes all signatures except for the latest self-signatures.</source> <translation>您正在导出一个最小尺寸的私钥,它会删除除最新自签名外的所有包含的签名数据。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="263"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="262"/> <source>Do you <b>REALLY</b> want to proceed?</source> <translation>您真的想要继续吗?</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="265"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="264"/> <source>Exporting Short Private Key</source> <translation>导出短私钥</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="309"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="308"/> <source>This operation will export your <b>private key</b>, including both the main key and all subkeys, into an external file. This key is extremely sensitive, and anyone with access to it can impersonate you. DO NOT share this file with anyone!</source> <translation>此操作会将您的 <b>私人密钥</b>(包括主密钥和所有子密钥)导出到一个外部文件中。此密钥极其敏感,任何可以访问它的人都可以冒充你。切勿与任何人共享此文件!</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="315"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="608"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="314"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="606"/> <source>Are you <b>ABSOLUTELY SURE</b> you want to proceed?</source> <translation>您是否<b>绝对确定</b>要继续?</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="318"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="317"/> <source>Exporting Private Key</source> <translation>导出私钥</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="390"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="389"/> <source>Key Upload Failed</source> <translation>密钥上传失败</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="406"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="405"/> <source>The following email addresses have status: </source> <translation>以下电子邮件地址处于状态:</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="418"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="417"/> <source>Could not parse status information.</source> <translation>无法解析状态信息。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="458"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="456"/> <source>0 -> No Reason.</source> <translation>0 -> 无理由。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="458"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="456"/> <source>1 -> This key is no more safe.</source> <translation>1 -> 密钥不再安全。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="459"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="457"/> <source>2 -> Key is outdated.</source> <translation>2 -> 密钥已经过时。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="459"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="457"/> <source>3 -> Key is no longer used</source> <translation>3 -> 密钥不再被使用。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="601"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="599"/> <source>A <b>PaperKey</b> is a human-readable printout of your private key, which can be used to recover your key if you lose access to your digital copy. </source> <translation>PaperKey<b>/b> 是私人密钥的人工可读打印件,如果丢失了数字副本,可以用它来恢复密钥。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="605"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="603"/> <source>Keep this paper copy in a safe and secure place, such as a fireproof safe or a trusted vault.</source> <translation>将纸质副本保存在安全可靠的地方,如防火保险箱或可信的保险库。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="611"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="609"/> <source>Exporting Private Key as a PaperKey</source> <translation>将私人密钥导出为 PaperKey</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="707"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="705"/> <source>The target file is too large for a paper key keyring.</source> <translation>目标文件对于一个纸密钥文件来说太大了。</translation> </message> @@ -3102,7 +3265,7 @@ Note: For verification, you can find more information here: https://keys.openpgp </message> <message> <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="124"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="353"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="351"/> <source>Export Subkey</source> <translation>导出子密钥</translation> </message> @@ -3117,227 +3280,227 @@ Note: For verification, you can find more information here: https://keys.openpgp <translation>到期日期</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="209"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="359"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="208"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="355"/> <source>Primary Key</source> <translation>主密钥</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="210"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="359"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="209"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="356"/> <source>Subkey</source> <translation>子密钥</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="233"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="232"/> <source>Never Expire</source> <translation>永不过期</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="289"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="288"/> <source>Never Expires</source> <translation>永不过期</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="311"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="310"/> <source>Certificate</source> <translation>证书</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="313"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="312"/> <source>Encrypt</source> <translation>加密</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="314"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="313"/> <source>Sign</source> <translation>签名</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="315"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="314"/> <source>Auth</source> <translation>认证</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="320"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="319"/> <source>Exists</source> <translation>存在</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="321"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="320"/> <source>Not Exists</source> <translation>不存在</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="324"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="361"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="323"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="358"/> <source>Yes</source> <translation>是</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="324"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="361"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="323"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="358"/> <source>No</source> <translation>否</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="352"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="351"/> <source>Export Primary Key</source> <translation>导出主密钥</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="375"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="372"/> <source>Edit Expire Date</source> <translation>编辑到期日期</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="379"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="376"/> <source>Export</source> <translation>导出</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="383"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="380"/> <source>Delete</source> <translation>删除</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="387"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="384"/> <source>Revoke</source> <translation>吊销</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="440"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="437"/> <source>Exporting Subkey</source> <translation>正在导出子密钥</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="441"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="438"/> <source>You are about to export a private subkey.</source> <translation>您将导出一个子密钥。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="442"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="439"/> <source>While subkeys are less critical than the primary key, they should still be handled with care.</source> <translation>虽然子密钥没有主密钥那么重要,但仍应小心处理。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="445"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="442"/> <source>Do you want to proceed with exporting this subkey?</source> <translation>是否要继续导出该子密钥?</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="472"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="469"/> <source>Export Key To File</source> <translation>将密钥导出到文件</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="473"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="470"/> <source>Key Files</source> <translation>密钥文件</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="478"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="475"/> <source>Export Error</source> <translation>导出错误</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="479"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="476"/> <source>Couldn't open %1 for writing</source> <translation>无法打开 %1 进行写入</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="488"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="485"/> <source><h3>You are about to delete the subkey:</h3><br /><b>KeyID:</b> %1<br /><br />This action is irreversible. Please confirm.</source> <translation><h3>您即将删除子密钥:</h3><br /><b>KeyID:</b> %1<br /><br />此操作不可逆。请确认。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="494"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="491"/> <source>Delete Subkey Confirmation</source> <translation>确认删除子密钥</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="509"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="559"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="506"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="556"/> <source>Illegal Operation</source> <translation>非法的操作</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="510"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="507"/> <source>Cannot delete the primary key or an invalid subkey.</source> <translation>无法删除主密钥或无效的子密钥。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="518"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="515"/> <source>Operation Failed</source> <translation>操作失败</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="519"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="516"/> <source>The selected subkey could not be deleted. Please check your permissions or try again.</source> <translation>所选子密钥无法删除。请检查权限或重试。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="525"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="522"/> <source>Operation Successful</source> <translation>操作成功</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="526"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="523"/> <source>The subkey with KeyID %1 has been successfully deleted.</source> <translation>密钥ID为 %1 的子密钥已成功删除。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="536"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="533"/> <source><h3>Revoke Subkey Confirmation</h3><br /><b>KeyID:</b> %1<br /><br />Revoking a subkey will make it permanently unusable. This action is <b>irreversible</b>.<br />Are you sure you want to revoke this subkey?</source> <translation><h3>子密钥吊销确认</h3><br /><b>KeyID:</b>%1<br /><br />吊销子密钥将使其永久不可用。此操作是 <b>不可逆的</b>。<br />您确定要撤销此子密钥吗?</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="543"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="540"/> <source>Revoke Subkey</source> <translation>吊销子密钥</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="560"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="557"/> <source>Cannot revoke the primary key or an invalid subkey.</source> <translation>不可吊销主密钥或者一个无效的子密钥</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="565"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="562"/> <source>0 -> No Reason.</source> <translation>0 -> 无理由。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="565"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="562"/> <source>1 -> This key is no more safe.</source> <translation>1 -> 密钥不再安全。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="566"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="563"/> <source>2 -> Key is outdated.</source> <translation>2 -> 密钥已经过时。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="566"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="563"/> <source>3 -> Key is no longer used</source> <translation>3 -> 密钥不再被使用。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="577"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="574"/> <source>Revocation Failed</source> <translation>吊销失败</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="578"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="575"/> <source>Failed to revoke the subkey. Please try again.</source> <translation>吊销失败。请重试。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="581"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="578"/> <source>Revocation Successful</source> <translation>吊销成功</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="582"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="579"/> <source>The subkey has been successfully revoked.</source> <translation>子密钥成功吊销</translation> </message> @@ -3415,8 +3578,8 @@ Note: For verification, you can find more information here: https://keys.openpgp <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="355"/> <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="481"/> <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="490"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="535"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="564"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="536"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="565"/> <source>Invalid Operation</source> <translation>无效操作</translation> </message> @@ -3426,37 +3589,37 @@ Note: For verification, you can find more information here: https://keys.openpgp <translation>您确定要删除以下 UID 吗?</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="542"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="543"/> <source><h3>Revoke UID Confirmation</h3><br /><b>UID:</b> %1<br /><br />Revoking a UID will make it permanently unusable. This action is <b>irreversible</b>.<br />Are you sure you want to revoke this UID?</source> <translation><h3>撤销 UID 确认</h3><br /><b>UID:</b>%1<br /><br />撤销 UID 将使其永久不可用。此操作是<b>不可逆的</b>。<br />您确定要撤销此UID吗?</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="570"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="571"/> <source>0 -> No Reason.</source> <translation>0 -> 无理由。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="570"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="571"/> <source>4 -> User ID is no longer valid.</source> <translation>4 -> UID不再有效。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="581"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="582"/> <source>Revocation Failed</source> <translation>吊销失败</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="582"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="583"/> <source>Failed to revoke the UID. Please try again.</source> <translation>吊销UID失败。请重试。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="585"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="586"/> <source>Revocation Successful</source> <translation>吊销成功</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="586"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="587"/> <source>The UID has been successfully revoked.</source> <translation>UID成功被吊销</translation> </message> @@ -3487,7 +3650,7 @@ Note: For verification, you can find more information here: https://keys.openpgp </message> <message> <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="356"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="565"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="566"/> <source>Cannot delete the Primary UID.</source> <translation>无法删除主要 UID。</translation> </message> @@ -3530,7 +3693,7 @@ Note: For verification, you can find more information here: https://keys.openpgp </message> <message> <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="431"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="549"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="550"/> <source>Revoke UID</source> <translation>吊销 UID</translation> </message> @@ -3540,7 +3703,7 @@ Note: For verification, you can find more information here: https://keys.openpgp <translation>删除 UID</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="536"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="537"/> <source>Please select one UID before doing this operation.</source> <translation>请在执行此操作前选择一个 UID。</translation> </message> @@ -3573,139 +3736,139 @@ Note: For verification, you can find more information here: https://keys.openpgp <context> <name>GpgFrontend::UI::KeyServerImportDialog</name> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="57"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="56"/> <source>Close</source> <translation>关闭</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="60"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="59"/> <source>Import ALL</source> <translation>全部导入</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="64"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="63"/> <source>Search</source> <translation>搜索</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="69"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="68"/> <source>Search String</source> <translation>搜索字符串</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="69"/> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="73"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="68"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="72"/> <source>: </source> <translation>: </translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="73"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="72"/> <source>Key Server</source> <translation>密钥服务器</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="114"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="113"/> <source>Import Keys from key server</source> <translation>从密钥服务器导入密钥</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="157"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="156"/> <source>UID</source> <translation>UID</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="157"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="156"/> <source>Creation date</source> <translation>创建日期</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="157"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="156"/> <source>KeyID</source> <translation>密钥 ID</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="157"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="156"/> <source>Tag</source> <translation>标签</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="180"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="179"/> <source>Text is empty.</source> <translation>文字为空。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="223"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="222"/> <source>Not Key Found</source> <translation>未找到密钥</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="226"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="225"/> <source>Timeout</source> <translation>超时</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="229"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="228"/> <source>Key Server Not Found</source> <translation>未找到密钥服务器</translation> </message> <message> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="231"/> <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="232"/> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="233"/> <source>Connection Error</source> <translation>连接错误</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="242"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="241"/> <source>Too many responses from keyserver!</source> <translation>来自密钥服务器的响应太多!</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="254"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="253"/> <source>No keys found, input may be kexId, retrying search with 0x.</source> <translation>未找到密钥,输入可能是 kexId,正在使用 0x 重试。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="264"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="263"/> <source>No keys found containing the search string!</source> <translation>未找到包含搜索字符串的密钥!</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="271"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="270"/> <source>Insufficiently specific search string!</source> <translation>不够具体的搜索字符串!</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="306"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="305"/> <source>revoked</source> <translation>撤销</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="309"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="308"/> <source>disabled</source> <translation>被禁用</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="354"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="353"/> <source>%1 keys found. Double click a key to import it.</source> <translation>找到 %1 个密钥。双击一个密钥来导入它。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="375"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="374"/> <source>Warning</source> <translation>警告</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="376"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="375"/> <source>Please select one KeyPair before doing this operation.</source> <translation>请在执行此操作前选择一个钥对。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="423"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="421"/> <source>Key Imported</source> <translation>密钥导入成功</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="436"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="434"/> <source>Processing ...</source> <translation>处理中 ......</translation> </message> @@ -3713,27 +3876,27 @@ Note: For verification, you can find more information here: https://keys.openpgp <context> <name>GpgFrontend::UI::KeyServerImportTask</name> <message> - <location filename="../../../../src/ui/thread/KeyServerImportTask.cpp" line="78"/> + <location filename="../../../../src/ui/thread/KeyServerImportTask.cpp" line="81"/> <source>Key not found in the Keyserver.</source> <translation>密钥服务器中找不到密钥。</translation> </message> <message> - <location filename="../../../../src/ui/thread/KeyServerImportTask.cpp" line="81"/> + <location filename="../../../../src/ui/thread/KeyServerImportTask.cpp" line="84"/> <source>Network connection timeout.</source> <translation>网络连接错误。</translation> </message> <message> - <location filename="../../../../src/ui/thread/KeyServerImportTask.cpp" line="84"/> + <location filename="../../../../src/ui/thread/KeyServerImportTask.cpp" line="87"/> <source>Cannot resolve the address of target key server.</source> <translation>网络连接超时。</translation> </message> <message> - <location filename="../../../../src/ui/thread/KeyServerImportTask.cpp" line="87"/> + <location filename="../../../../src/ui/thread/KeyServerImportTask.cpp" line="90"/> <source>General connection error occurred.</source> <translation>出现一般连接错误。</translation> </message> <message> - <location filename="../../../../src/ui/thread/KeyServerImportTask.cpp" line="96"/> + <location filename="../../../../src/ui/thread/KeyServerImportTask.cpp" line="99"/> <source>Success</source> <translation>成功</translation> </message> @@ -3761,22 +3924,17 @@ Note: For verification, you can find more information here: https://keys.openpgp <translation>无法更新密钥对的过期日期。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeySetExpireDateDialog.cpp" line="135"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeySetExpireDateDialog.cpp" line="124"/> <source>Modified Expiration Date (Local Time)</source> <translation>修改到期日期(本地时间)</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeySetExpireDateDialog.cpp" line="136"/> - <source>Tips: For the sake of security, the key is valid for up to two years. If you are an expert user, please unlock it for a longer time in the settings.</source> - <translation>温馨提示:为安全起见,密钥有效期最长为两年。如果您是专家用户,请在设置中解锁更长的时间。</translation> - </message> - <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeySetExpireDateDialog.cpp" line="140"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeySetExpireDateDialog.cpp" line="125"/> <source>No Expiration</source> <translation>无有效期</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeySetExpireDateDialog.cpp" line="141"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeySetExpireDateDialog.cpp" line="126"/> <source>Modified Expiration Date</source> <translation>修改到期日</translation> </message> @@ -3784,12 +3942,12 @@ Note: For verification, you can find more information here: https://keys.openpgp <context> <name>GpgFrontend::UI::KeyTable</name> <message> - <location filename="../../../../src/ui/widgets/KeyTable.cpp" line="83"/> + <location filename="../../../../src/ui/widgets/KeyTable.cpp" line="84"/> <source>Error</source> <translation>错误</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyTable.cpp" line="83"/> + <location filename="../../../../src/ui/widgets/KeyTable.cpp" line="84"/> <source>Key Not Found.</source> <translation>未找到密钥。</translation> </message> @@ -3812,22 +3970,22 @@ Note: For verification, you can find more information here: https://keys.openpgp <translation>为密钥的 UID 签名</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyUIDSignDialog.cpp" line="121"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyUIDSignDialog.cpp" line="120"/> <source>Unsuccessful Operation</source> <translation>不成功的操作</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyUIDSignDialog.cpp" line="122"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyUIDSignDialog.cpp" line="121"/> <source>Signature operation failed for UID %1</source> <translation>UID %1 的签名操作失败</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyUIDSignDialog.cpp" line="126"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyUIDSignDialog.cpp" line="125"/> <source>Operation Complete</source> <translation>操作完成</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyUIDSignDialog.cpp" line="127"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyUIDSignDialog.cpp" line="126"/> <source>The signature operation of the UID is complete</source> <translation>UID的签名操作完成</translation> </message> @@ -3835,52 +3993,52 @@ Note: For verification, you can find more information here: https://keys.openpgp <context> <name>GpgFrontend::UI::KeyUploadDialog</name> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="66"/> + <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="65"/> <source>Uploading Public Key</source> <translation>上传公钥</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="84"/> + <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="83"/> <source>Error</source> <translation>错误</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="85"/> + <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="84"/> <source>Unknown error occurred</source> <translation>发生未知错误</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="155"/> + <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="154"/> <source>Key Not Found</source> <translation>未找到密钥</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="158"/> + <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="157"/> <source>Timeout</source> <translation>超时</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="161"/> + <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="160"/> <source>Key Server Not Found</source> <translation>未找到密钥服务器</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="164"/> + <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="163"/> <source>Connection Error</source> <translation>连接错误</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="166"/> + <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="165"/> <source>Upload Failed</source> <translation>上传失败</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="170"/> + <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="169"/> <source>Upload Success</source> <translation>上传成功</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="171"/> + <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="170"/> <source>Upload Public Key Successfully</source> <translation>上传公钥成功</translation> </message> @@ -3994,22 +4152,22 @@ Note: For verification, you can find more information here: https://keys.openpgp <translation>超时时间(毫秒): </translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsKeyServer.cpp" line="245"/> + <location filename="../../../../src/ui/dialog/settings/SettingsKeyServer.cpp" line="244"/> <source>Reachable</source> <translation>正常</translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsKeyServer.cpp" line="248"/> + <location filename="../../../../src/ui/dialog/settings/SettingsKeyServer.cpp" line="247"/> <source>Not Reachable</source> <translation>离线</translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsKeyServer.cpp" line="260"/> + <location filename="../../../../src/ui/dialog/settings/SettingsKeyServer.cpp" line="259"/> <source>Test Key Server Connection...</source> <translation>测试密钥服务器连通性...</translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsKeyServer.cpp" line="261"/> + <location filename="../../../../src/ui/dialog/settings/SettingsKeyServer.cpp" line="260"/> <source>This test only tests the network connectivity of the key server. Passing the test does not mean that the key server is functionally available.</source> <translation>本测试仅测试密钥服务器的网络连通性。通过测试并不意味着密钥服务器在功能上可用。</translation> </message> @@ -4017,330 +4175,159 @@ Note: For verification, you can find more information here: https://keys.openpgp <context> <name>GpgFrontend::UI::MainWindow</name> <message> - <location filename="../../../../src/ui/main_window/MainWindow.cpp" line="156"/> - <location filename="../../../../src/ui/main_window/MainWindow.cpp" line="159"/> + <location filename="../../../../src/ui/main_window/MainWindow.cpp" line="163"/> + <location filename="../../../../src/ui/main_window/MainWindow.cpp" line="166"/> <source>Critical error occur while loading GpgFrontend.</source> <translation>加载 GpgFrontend 时发生严重错误。</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindow.cpp" line="158"/> + <location filename="../../../../src/ui/main_window/MainWindow.cpp" line="165"/> <source>Loading Failed</source> <translation>加载失败</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="50"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="75"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="103"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="156"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="176"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="201"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="229"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="282"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="302"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="319"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="336"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="355"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="372"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="389"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="409"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="471"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="492"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="528"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="546"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="571"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="616"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="661"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="690"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="735"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="781"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="810"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="818"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="845"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="910"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="919"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="947"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="988"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="77"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="135"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="202"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="239"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="278"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="320"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="440"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="491"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="111"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="137"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="159"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="177"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="192"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="207"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="224"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="106"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="143"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="522"/> <source>Error</source> <translation>错误</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="51"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="177"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="303"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="356"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="410"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="493"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="572"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="691"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="811"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="911"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="989"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="523"/> <source>Cannot read from file: %1</source> <translation>无法读取文件:%1</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="64"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="190"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="119"/> <source>The target file %1 already exists, do you need to overwrite it?</source> <translation>目标文件 %1 已经存在,是否需要覆盖?</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="67"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="193"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="310"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="363"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="450"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="623"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="742"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="824"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="925"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="122"/> <source>Warning</source> <translation>警告</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="76"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="202"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="320"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="373"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="617"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="736"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="819"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="920"/> - <source>Cannot write to file: %1</source> - <translation>无法写入文件:%1</translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="85"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="211"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="55"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="50"/> <source>Symmetric Encryption</source> <translation>对称加密</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="86"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="212"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="51"/> <source>No Key Selected. Do you want to encrypt with a symmetric cipher using a passphrase?</source> <translation>未选择密钥。您想使用密码使用对称密码进行加密吗?</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="92"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="64"/> - <source>Symmetrically Encrypting</source> - <translation>对称加密中</translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="104"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="157"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="230"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="283"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="337"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="390"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="472"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="547"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="662"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="782"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="846"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="948"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="78"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="136"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="203"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="240"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="279"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="321"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="441"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="492"/> - <source>Unknown error occurred</source> - <translation>发生了未知错误</translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="135"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="261"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="598"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="717"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="396"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="172"/> <source>Invalid KeyPair</source> <translation>无效的密钥对</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="136"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="262"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="599"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="718"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="397"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="60"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="261"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="448"/> <source>The selected keypair cannot be used for encryption.</source> <translation>所选的密钥对不能用于加密。</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="137"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="263"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="600"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="719"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="115"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="181"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="398"/> - <source>For example the Following Key:</source> - <translation>例如以下密钥:</translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="144"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="123"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="632"/> - <source>Encrypting</source> - <translation>加密</translation> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="107"/> + <source>Cannot read from the following files: + +%1</source> + <translation type="unfinished">无法读取下列文件: + +%1</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="218"/> - <source>Archiving & Symmetrically Encrypting</source> - <translation>正在打包并进行对称加密</translation> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="144"/> + <source>Cannot write to the following files: + +%1</source> + <translation type="unfinished">无法写入下列文件: + +%1</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="270"/> - <source>Archiving & Encrypting</source> - <translation>正在打包并进行加密</translation> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="174"/> + <source>For example the Following Key:</source> + <translation>例如以下密钥:</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="311"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="364"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="624"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="743"/> - <source>The target file already exists, do you need to overwrite it?</source> - <translation>目标文件已经存在,是否需要覆盖?</translation> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="196"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="323"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="654"/> + <source>Encrypting</source> + <translation>加密</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="325"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="229"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="231"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="358"/> <source>Decrypting</source> <translation>解密</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="378"/> - <source>Decrypting & Extrating</source> - <translation>正在进行解密并解包</translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="424"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="587"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="706"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="163"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="379"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="158"/> <source>No Key Checked</source> <translation>未勾选任何密钥</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="425"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="588"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="707"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="164"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="159"/> <source>Please check the key in the key toolbox on the right.</source> <translation>请勾选右侧密钥工具箱中的密钥。</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="432"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="112"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="178"/> - <source>Invalid Operation</source> - <translation>无效操作</translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="433"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="208"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="369"/> <source>The selected key contains a key that does not actually have a sign usage.</source> <translation>所选密钥包含一个实际上没有符号用法的密钥。</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="435"/> - <source>for example the Following Key:</source> - <translation>例如以下密钥:</translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="451"/> - <source>The signature file "%1" exists, do you need to overwrite it?</source> - <translation>签名文件“%1”存在,是否需要覆盖?</translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="460"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="190"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="703"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="217"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="388"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="721"/> <source>Signing</source> <translation>签名</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="513"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="414"/> <source>File to be Verified</source> <translation>被验证的文件</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="514"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="415"/> <source>Please provide An ABSOLUTE Path If Data And Signature is COMBINED within a single file, KEEP THIS EMPTY: </source> <translation>请提供绝对路径 如果确认数据和签名都在一个文件中,请置空: </translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="529"/> - <source>Please select the appropriate origin file or signature file. Ensure that both are in this directory.</source> - <translation>请选择合适的源文件或签名文件。确保两者都在此目录中。</translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="535"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="267"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="307"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="370"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="245"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="434"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="326"/> <source>Verifying</source> <translation>验证</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="648"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="425"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="786"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="271"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="478"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="804"/> <source>Encrypting and Signing</source> <translation>加密和签名</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="767"/> - <source>Archiving & Encrypting & Signing</source> - <translation>正在进行打包、加密及签名操作</translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="825"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="926"/> - <source>The output file %1 already exists, do you need to overwrite it?</source> - <translation>输出文件 %1 已经存在,是否需要覆盖?</translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="834"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="479"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="850"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="285"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="512"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="868"/> <source>Decrypting and Verifying</source> <translation>解密和验证</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="882"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="347"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="533"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="445"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="402"/> <source>Missing Keys</source> <translation>公钥缺失</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="883"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="348"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="534"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="446"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="403"/> <source>Some signatures cannot be verified because the corresponding keys are missing. The following fingerprints are missing: @@ -4355,216 +4342,236 @@ Would you like to fetch these keys from the key server?</source> 您想从密钥服务器获取这些公钥吗?</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="898"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="363"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="548"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="462"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="417"/> <source>Verification Incomplete</source> <translation>验证未完成</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="899"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="364"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="549"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="463"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="418"/> <source>Verification was incomplete due to missing keys. You can manually import the keys later.</source> <translation>由于缺少公钥,验证不完整。您可以稍后手动导入密钥。</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="935"/> - <source>Decrypting & Verifying & Extracting</source> - <translation>正在进行解包、解密及验证操作</translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="996"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="529"/> <source>EML File Too Large</source> <translation>EML文件过大</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="997"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="530"/> <source>The EML file "%1" is larger than 32MB and will not be opened.</source> <translation>由于EML 文件"%1"大于 32MB,将不会被打开。</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="56"/> - <source>No Key Checked. Do you want to encrypt with a symmetric cipher using a passphrase?</source> - <translation>未选中任何密钥。您想使用密码对文字进行对称加密吗?</translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="113"/> - <source>The selected key contains a key that does not actually have a encrypt usage.</source> - <translation>所选密钥包含一个实际上没有加密用途的密钥。</translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="179"/> - <source>The selected key contains a key that does not actually have a signature usage.</source> - <translation>所选密钥包含一个实际上没有签名用法的密钥。</translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="380"/> - <source>Please check some key in the key toolbox on the right.</source> - <translation>请勾选右侧密钥工具箱中的一些密钥。</translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="111"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="137"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="159"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="177"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="192"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="207"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="224"/> - <source>Key Not Found.</source> - <translation>未找到密钥。</translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="116"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="106"/> <source>Localize</source> <translation>本地化</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="119"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="109"/> <source>UTC</source> <translation>世界标准时间</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="142"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="120"/> <source>Local Time</source> <translation>当地时间</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="324"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="274"/> <source>This version(%1) may have been withdrawn by the developer due to serious problems. Please stop using this version immediately and download the latest stable version (%2) on the Github Releases Page.</source> <translation>该版本(%1) 可能因严重问题已被开发者撤回。请立即停止使用此版本,并从 Github 发布页面下载最新的稳定版本 (%2)。</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="339"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="288"/> <source>This may be a BETA Version (Latest Stable Version: %1).</source> <translation>这可能是 BETA 版本(最新稳定版本:%1)。</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="345"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="301"/> <source>Commit Hash Mismatch</source> <translation>代码提交哈希值不匹配</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="346"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="302"/> <source>The current version's commit hash does not match the official release. This may indicate a modified or unofficial build. For security reasons, please verify your installation or download the official release from the Github Releases Page.</source> <translation>当前版本的提交哈希值与正式版本不匹配。这可能表明该版本为修改版或非官方版本。出于安全考虑,请验证您的安装,或从 Github 发布页面下载正式版本。</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="478"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="492"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="494"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="496"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="573"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="590"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="592"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="594"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="880"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="896"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="899"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="902"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="432"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="446"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="448"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="450"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="595"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="612"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="614"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="616"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="898"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="914"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="917"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="920"/> <source>None</source> <translation>无</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="486"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="584"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="889"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="440"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="606"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="907"/> <source>From</source> <translation>发件人</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="487"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="489"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="585"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="587"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="890"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="893"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="441"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="443"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="607"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="609"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="908"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="911"/> <source>Unknown</source> <translation>未知</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="489"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="587"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="892"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="443"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="609"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="910"/> <source>To</source> <translation>收件人</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="491"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="589"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="895"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="445"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="611"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="913"/> <source>Subject</source> <translation>主题</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="494"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="592"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="898"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="448"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="614"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="916"/> <source>CC</source> <translation>抄送</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="496"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="594"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="901"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="450"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="616"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="919"/> <source>BCC</source> <translation>密送</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="497"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="595"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="904"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="451"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="617"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="922"/> <source>Date</source> <translation>日期</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="502"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="909"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="456"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="927"/> <source>Signed EML Data Hash (SHA1)</source> <translation>签名 EML 数据哈希值 (SHA1)</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="505"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="913"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="459"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="931"/> <source>Message Integrity Check Algorithm</source> <translation>信息完整性检查算法</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="625"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="689"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="755"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="772"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="517"/> + <source>FAIL</source> + <translation type="unfinished">失败</translation> + </message> + <message> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="521"/> + <source>OK</source> + <translation type="unfinished">成功</translation> + </message> + <message> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="524"/> + <source>WARN</source> + <translation type="unfinished">警告</translation> + </message> + <message> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="535"/> + <source>Summary Report</source> + <translation type="unfinished">总结报告</translation> + </message> + <message> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="536"/> + <source>Total Operations: %1 +</source> + <translation type="unfinished">所有操作: %1 +</translation> + </message> + <message> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="537"/> + <source>Successful: %1 +</source> + <translation type="unfinished">成功: %1 +</translation> + </message> + <message> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="538"/> + <source>Warnings: %1 +</source> + <translation type="unfinished">警告: %1 +</translation> + </message> + <message> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="539"/> + <source>Failures: %1 +</source> + <translation type="unfinished">失败: %1 +</translation> + </message> + <message> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="543"/> + <source>Failed Objects: %1 +</source> + <translation type="unfinished">失败对象: %1 +</translation> + </message> + <message> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="548"/> + <source>Warning Objects: %1 +</source> + <translation type="unfinished">警告对象: %1 +</translation> + </message> + <message> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="647"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="707"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="773"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="790"/> <source>No Key Selected</source> <translation>未选择任何密钥</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="626"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="756"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="648"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="774"/> <source>Please select a key for encrypt the EML.</source> <translation>请选择加密邮件数据的密钥。</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="690"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="773"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="708"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="791"/> <source>Please select a key for signing the EML.</source> <translation>请选择用于签署邮件的密钥。</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="695"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="778"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="713"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="796"/> <source>Multiple Keys Selected</source> <translation>已选择多个密钥</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="696"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="779"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="714"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="797"/> <source>Please select only one key to sign the EML.</source> <translation>请只选择一个密钥来签署邮件。</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="959"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="976"/> <source># EML Data Error The provided EML data does not conform to RFC 3156 standards and cannot be processed. @@ -4595,7 +4602,7 @@ EML 是一种表示电子邮件信息的文件格式,通常包括标题、正� 更正 EML 数据后,再次尝试操作。</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="985"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="1002"/> <source># Email Operation Error An error occurred during the email operation. The process could not be completed. @@ -4638,17 +4645,19 @@ If the issue persists, consider seeking technical support or consulting the docu 如果问题仍然存在,请考虑寻求技术支持或查阅文档。</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="319"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="262"/> <source>GpgFrontend Upgradeable (New Version: %1).</source> <translation>GpgFrontend 可升级(新版本:%1)。</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="297"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="269"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="296"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="296"/> <source>Update</source> <translation>更新</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="323"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="273"/> <source>Withdrawn Version</source> <translation>被召回的版本</translation> </message> @@ -4914,8 +4923,8 @@ If the issue persists, consider seeking technical support or consulting the docu </message> <message> <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="184"/> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="402"/> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="487"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="401"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="486"/> <source>File</source> <translation>文件</translation> </message> @@ -4935,406 +4944,406 @@ If the issue persists, consider seeking technical support or consulting the docu <translation>从剪贴板导入新密钥</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="208"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="207"/> <source>Keyserver</source> <translation>密钥服务器</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="210"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="209"/> <source>Import New Key From Keyserver</source> <translation>从密钥服务器导入新密钥</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="218"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="217"/> <source>Editor</source> <translation>编辑器</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="219"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="218"/> <source>Import New Key From Editor</source> <translation>从编辑器导入新密钥</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="224"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="223"/> <source>Manage Keys</source> <translation>管理密钥</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="225"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="224"/> <source>Open Key Management</source> <translation>打开密钥管理器</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="230"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="229"/> <source>Clear Password Cache</source> <translation>清除密码缓存</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="231"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="230"/> <source>Clear Password Cache of GnuPG</source> <translation>清除 GnuPG 的密码缓存</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="459"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="458"/> <source>Advanced</source> <translation>高级</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="600"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="594"/> <source>Status Panel</source> <translation>状态面板</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="346"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="360"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="378"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="309"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="323"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="338"/> <source>Successful Operation</source> <translation>操作成功</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="347"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="310"/> <source>Clear password cache successfully</source> <translation>清除密码缓存成功</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="349"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="364"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="382"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="312"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="327"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="342"/> <source>Failed Operation</source> <translation>操作失败</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="350"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="313"/> <source>Failed to clear password cache of GnuPG</source> <translation>无法清除 GnuPG 的密码缓存</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="236"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="235"/> <source>Reload All Components</source> <translation>重新加载所有组件</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="237"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="236"/> <source>Reload All GnuPG's Components</source> <translation>重新加载所有 GnuPG 的组件</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="361"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="324"/> <source>Reload all the GnuPG's components successfully</source> <translation>成功重新加载所有 GnuPG 组件</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="365"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="328"/> <source>Failed to reload all or one of the GnuPG's component(s)</source> <translation>未能重新加载所有或其中一个 GnuPG 组件</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="242"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="241"/> <source>Restart All Components</source> <translation>重新启动所有组件</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="243"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="242"/> <source>Restart All GnuPG's Components</source> <translation>重新启动所有 GnuPG 的组件</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="379"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="339"/> <source>Restart all the GnuPG's components successfully</source> <translation>成功重启所有 GnuPG 组件</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="383"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="343"/> <source>Failed to restart all or one of the GnuPG's component(s)</source> <translation>无法重新启动所有或其中一个 GnuPG 组件</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="248"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="247"/> <source>Open GnuPG Controller</source> <translation>打开 GnuPG 控制器</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="249"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="248"/> <source>Open GnuPG Controller Dialog</source> <translation>打开 GnuPG 控制器对话框</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="254"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="253"/> <source>Open Module Controller</source> <translation>打开模组管理器</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="255"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="254"/> <source>Open Module Controller Dialog</source> <translation>打开模组管理器窗口</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="264"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="263"/> <source>New E-Mail</source> <translation>新邮件</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="265"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="264"/> <source>Create A New E-Mail Tab</source> <translation>新建一个邮件标签页</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="273"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="272"/> <source>About</source> <translation>关于</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="274"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="273"/> <source>Show the application's About box</source> <translation>显示应用程序的关于界面</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="280"/> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="283"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="279"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="282"/> <source>GnuPG</source> <translation>GnuPG</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="281"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="280"/> <source>Information about Gnupg</source> <translation>关于 Gnupg</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="287"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="286"/> <source>Translate</source> <translation>翻译</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="288"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="287"/> <source>Information about translation</source> <translation>翻译信息</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="290"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="289"/> <source>Translators</source> <translation>翻译贡献者</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="294"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="293"/> <source>Check for Updates</source> <translation>检查更新</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="295"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="294"/> <source>Check for updates</source> <translation>检查更新</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="301"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="300"/> <source>Open Wizard</source> <translation>打开向导</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="302"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="301"/> <source>Open the wizard</source> <translation>打开向导</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="307"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="306"/> <source>Append Public Key to Editor</source> <translation>将公钥附加到编辑器</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="308"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="307"/> <source>Append selected Keypair's Public Key to Editor</source> <translation>将选定的密钥对的公钥附加到编辑器</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="313"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="312"/> <source>Append Create DateTime to Editor</source> <translation>将创建日期时间附加到编辑器</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="314"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="313"/> <source>Append selected Key's creation date and time to Editor</source> <translation>将所选密钥的创建日期和时间附加到编辑器</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="319"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="318"/> <source>Append Expire DateTime to Editor</source> <translation>将过期日期时间附加到编辑器</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="320"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="319"/> <source>Append selected Key's expiration date and time to Editor</source> <translation>将所选密钥的到期日期和时间附加到编辑器</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="325"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="324"/> <source>Append Fingerprint to Editor</source> <translation>将指纹附加到编辑器</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="326"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="325"/> <source>Append selected Key's Fingerprint to Editor</source> <translation>将所选密钥的指纹附加到编辑器</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="331"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="330"/> <source>Copy Email</source> <translation>复制电子邮件</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="332"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="331"/> <source>Copy selected Keypair's to clipboard</source> <translation>将选定的密钥对复制到剪贴板</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="337"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="336"/> <source>Copy Default UID</source> <translation>复制默认 UID</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="338"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="337"/> <source>Copy selected Keypair's default UID to clipboard</source> <translation>将所选密钥对的默认 UID 复制到剪贴板</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="343"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="342"/> <source>Copy Key ID</source> <translation>复制密钥 ID</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="344"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="343"/> <source>Copy selected Keypair's ID to clipboard</source> <translation>将所选密钥对的 ID 复制到剪贴板</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="349"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="348"/> <source>Show Key Details</source> <translation>显示密钥细节</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="350"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="349"/> <source>Show Details for this Key</source> <translation>显示此密钥的详细信息</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="355"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="354"/> <source>Add To Favourite</source> <translation>添加到收藏夹</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="356"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="355"/> <source>Add this key to Favourite Table</source> <translation>将此键添加到收藏夹表</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="362"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="361"/> <source>Remove From Favourite</source> <translation>从收藏夹中删除</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="363"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="362"/> <source>Remove this key from Favourite Table</source> <translation>从收藏表中删除此键</translation> </message> <message> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="369"/> <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="370"/> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="371"/> <source>Set Owner Trust Level</source> <translation>设置所有者信任级别</translation> </message> <message> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="389"/> <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="390"/> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="391"/> <source>Remove PGP Header</source> <translation>删除 PGP 标头</translation> </message> <message> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="394"/> <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="395"/> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="396"/> <source>Add PGP Header</source> <translation>添加 PGP 标头</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="420"/> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="514"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="419"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="508"/> <source>Edit</source> <translation>编辑</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="440"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="439"/> <source>Crypt</source> <translation>加密</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="450"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="449"/> <source>Keys</source> <translation>密钥</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="451"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="450"/> <source>Import Key</source> <translation>导入密钥</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="467"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="466"/> <source>View</source> <translation>查看</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="469"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="468"/> <source>Help</source> <translation>帮助</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="499"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="498"/> <source>Operations</source> <translation>操作</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="509"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="503"/> <source>Key</source> <translation>密钥</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="522"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="516"/> <source>Special Edit</source> <translation>特殊编辑操作</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="536"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="530"/> <source>Import key from...</source> <translation>从···导入密钥</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="537"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="531"/> <source>Import key</source> <translation>导入密钥</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="553"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="547"/> <source>Ready</source> <translation>准备好</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="560"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="554"/> <source>Key ToolBox</source> <translation>密钥工具箱</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="568"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="562"/> <source>Default</source> <translation>默认</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="575"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="569"/> <source>Favourite</source> <translation>最喜欢的</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="582"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="576"/> <source>Only Public Key</source> <translation>只有公钥</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="589"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="583"/> <source>Has Private Key</source> <translation>有私钥</translation> </message> @@ -5383,89 +5392,89 @@ If the issue persists, consider seeking technical support or consulting the docu </message> <message> <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="84"/> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="195"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="192"/> <source>Enable Auto Activate</source> <translation>开启自动启用</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="144"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="141"/> <source>BASIC INFO</source> <translation>基本信息</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="146"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="143"/> <source>ID</source> <translation>ID</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="148"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="145"/> <source>Version</source> <translation>版本</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="150"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="147"/> <source>SDK Version</source> <translation>SDK 版本</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="152"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="149"/> <source>Qt ENV Version</source> <translation>Qt 环境版本</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="154"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="151"/> <source>Hash</source> <translation>哈希</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="155"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="152"/> <source>Path</source> <translation>路径</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="159"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="156"/> <source>Auto Activate</source> <translation>自动启用</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="160"/> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="162"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="157"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="159"/> <source>True</source> <translation>开</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="160"/> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="162"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="157"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="159"/> <source>False</source> <translation>关</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="161"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="158"/> <source>Active</source> <translation>启用状态</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="166"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="163"/> <source>METADATA</source> <translation>元数据</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="182"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="179"/> <source>Listening Event</source> <translation>监听事件</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="191"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="188"/> <source>Deactivate</source> <translation>禁用</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="192"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="189"/> <source>Activate</source> <translation>启用</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="194"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="191"/> <source>Disable Auto Activate</source> <translation>关闭自动启用</translation> </message> @@ -5544,42 +5553,42 @@ If the issue persists, consider seeking technical support or consulting the docu <translation>提示:这些选项更改仅在应用程序重新启动后生效。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsNetwork.cpp" line="173"/> + <location filename="../../../../src/ui/dialog/settings/SettingsNetwork.cpp" line="172"/> <source>Test Server Url Accessibility</source> <translation>测试服务器 URL 连通性</translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsNetwork.cpp" line="174"/> + <location filename="../../../../src/ui/dialog/settings/SettingsNetwork.cpp" line="173"/> <source>Server Url</source> <translation>服务器路径</translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsNetwork.cpp" line="184"/> + <location filename="../../../../src/ui/dialog/settings/SettingsNetwork.cpp" line="183"/> <source>Success</source> <translation>成功</translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsNetwork.cpp" line="185"/> + <location filename="../../../../src/ui/dialog/settings/SettingsNetwork.cpp" line="184"/> <source>Successfully connect to the target server through the proxy server.</source> <translation>连接目标服务器成功(通过代理)。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsNetwork.cpp" line="189"/> + <location filename="../../../../src/ui/dialog/settings/SettingsNetwork.cpp" line="188"/> <source>Failed</source> <translation>失败</translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsNetwork.cpp" line="190"/> + <location filename="../../../../src/ui/dialog/settings/SettingsNetwork.cpp" line="189"/> <source>Unable to connect to the target server through the proxy server. Proxy settings may be invalid.</source> <translation>无法通过代理服务器连接到目标服务器。代理设置可能错误。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsNetwork.cpp" line="200"/> + <location filename="../../../../src/ui/dialog/settings/SettingsNetwork.cpp" line="199"/> <source>Test Proxy Server Connection...</source> <translation>测试代理服务器连接...</translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsNetwork.cpp" line="201"/> + <location filename="../../../../src/ui/dialog/settings/SettingsNetwork.cpp" line="200"/> <source>Is using your proxy settings to access the url. Note that this test operation will apply your proxy settings to the entire software.</source> <translation>正在使用您的代理设置访问 url。请注意,此测试操作会将您的代理设置应用于整个软件。</translation> </message> @@ -5763,27 +5772,27 @@ If the issue persists, consider seeking technical support or consulting the docu <translation>取消</translation> </message> <message> - <location filename="../../../../src/ui/dialog/SignersPicker.cpp" line="52"/> + <location filename="../../../../src/ui/dialog/SignersPicker.cpp" line="53"/> <source>Signers</source> <translation>签名者</translation> </message> <message> - <location filename="../../../../src/ui/dialog/SignersPicker.cpp" line="60"/> + <location filename="../../../../src/ui/dialog/SignersPicker.cpp" line="58"/> <source>Select Signer(s)</source> <translation>选择签名者</translation> </message> <message> - <location filename="../../../../src/ui/dialog/SignersPicker.cpp" line="63"/> + <location filename="../../../../src/ui/dialog/SignersPicker.cpp" line="61"/> <source>Please select one or more private keys you use for signing.</source> <translation>请选择您用于签名的一个或多个私钥。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/SignersPicker.cpp" line="64"/> + <location filename="../../../../src/ui/dialog/SignersPicker.cpp" line="62"/> <source>If no key is selected, the default key will be used for signing.</source> <translation>如果未选择密钥,则将使用默认密钥进行签名。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/SignersPicker.cpp" line="74"/> + <location filename="../../../../src/ui/dialog/SignersPicker.cpp" line="72"/> <source>Signers Picker</source> <translation>签署人选择界面</translation> </message> @@ -5791,9 +5800,9 @@ If the issue persists, consider seeking technical support or consulting the docu <context> <name>GpgFrontend::UI::SubkeyGenerateDialog</name> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="72"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="82"/> <source>Tipps: if the key pair has a passphrase, the subkey's passphrase must be equal to it.</source> - <translation>提示:如果密钥对有密码,则子密钥的密码必须与其相等。</translation> + <translation>提示:如果主密钥和子密钥都有密码,则子密钥的密码必须与主密钥相同。</translation> </message> <message> <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="85"/> @@ -5801,77 +5810,72 @@ If the issue persists, consider seeking technical support or consulting the docu <translation>生成新子密钥</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="98"/> - <source>Key Usage</source> - <translation>密钥使用</translation> - </message> - <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="100"/> - <source>Encryption</source> - <translation>加密</translation> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="65"/> + <source>Authentication</source> + <translation>验证</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="103"/> - <source>Signing</source> - <translation>签名</translation> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="59"/> + <source>Algorithm</source> + <translation type="unfinished">算法</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="106"/> - <source>Certification</source> - <translation>认证</translation> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="60"/> + <source>Key Length</source> + <translation type="unfinished">密钥长度</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="109"/> - <source>Authentication</source> - <translation>验证</translation> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="61"/> + <source>Expire Date</source> + <translation type="unfinished">到期日期</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="153"/> - <source>Key Type</source> - <translation>密钥类型</translation> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="62"/> + <source>Usage</source> + <translation type="unfinished">用法</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="154"/> - <source>KeySize (in Bit)</source> - <translation>密钥大小(以位为单位)</translation> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="63"/> + <source>Encrypt</source> + <translation type="unfinished">加密</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="155"/> - <source>Expiration Date</source> - <translation>截止日期</translation> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="64"/> + <source>Sign</source> + <translation type="unfinished">签名</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="156"/> - <source>Never Expire</source> - <translation>永不过期</translation> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="66"/> + <source>Non Expired</source> + <translation type="unfinished">不过期</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="157"/> - <source>Non Pass Phrase</source> - <translation>不设置密码</translation> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="67"/> + <source>No Passphrase</source> + <translation type="unfinished">无密码</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="167"/> - <source>Basic Information</source> - <translation>基本信息</translation> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="183"/> + <source>Please give a valid subkey algorithm.</source> + <translation type="unfinished">请选择一个有效的子密钥算法。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="280"/> - <source>Expiration time no more than 2 years.</source> - <translation>有效期不超过2年。</translation> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="192"/> + <source>Time to subkey expiration must not be less than 120 seconds.</source> + <translation type="unfinished">距离主密钥过期时间不得少于120秒。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="295"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="204"/> <source>Generating</source> <translation>生成</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="306"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="215"/> <source>Error</source> <translation>错误</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="307"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="216"/> <source>Unknown error occurred</source> <translation>发生未知错误</translation> </message> @@ -5922,21 +5926,21 @@ If the issue persists, consider seeking technical support or consulting the docu <context> <name>GpgFrontend::UI::TextEdit</name> <message> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="73"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="74"/> <source>Open Directory</source> <translation>打开目录</translation> </message> <message> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="182"/> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="196"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="183"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="197"/> <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="449"/> <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="486"/> <source>Warning</source> <translation>警告</translation> </message> <message> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="183"/> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="197"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="184"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="198"/> <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="450"/> <source>Cannot read file %1: %2.</source> @@ -5944,69 +5948,69 @@ If the issue persists, consider seeking technical support or consulting the docu %2。</translation> </message> <message> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="120"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="121"/> <source>Open file</source> <translation>打开文件</translation> </message> <message> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="83"/> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="91"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="84"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="92"/> <source>Error</source> <translation>错误</translation> </message> <message> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="84"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="85"/> <source>Cannot open this file. Please make sure that this is a regular file and it's readable.</source> <translation>无法打开此文件。请确保这是一个普通文件,并且有读取权限。</translation> </message> <message> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="92"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="93"/> <source>Cannot open this file. The file is TOO LARGE (>1MB) for GpgFrontend Text Editor.</source> <translation>无法打开此文件。文件对于 GpgFrontend 文本编辑器来说过大(>1MB)。</translation> </message> <message> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="100"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="101"/> <source>File Open Error</source> <translation>打开文件失败</translation> </message> <message> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="101"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="102"/> <source>The file "%1" could not be opened.</source> <translation>无法打开文件 "%1"。</translation> </message> <message> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="109"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="110"/> <source>Binary File Detected</source> <translation>检测到二进制文件</translation> </message> <message> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="110"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="111"/> <source>The file "%1" appears to be a binary file and will not be opened.</source> <translation>文件"%1"似乎是二进制文件,无法打开。</translation> </message> <message> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="232"/> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="248"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="233"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="249"/> <source>Save file</source> <translation>保存存档</translation> </message> <message> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="309"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="310"/> <source>Unsaved document</source> <translation>未保存的文件</translation> </message> <message> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="310"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="311"/> <source>The document "%1" has been modified. Do you want to save your changes?</source> <translation>文档“%1”已被修改。是否要保存更改?</translation> </message> <message> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="313"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="314"/> <source>Note:</source> <translation>笔记:</translation> </message> <message> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="314"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="315"/> <source>If you don't save these files, all changes are lost.</source> <translation>如果您不保存这些文件,所有更改都将丢失。</translation> </message> @@ -6073,9 +6077,9 @@ If the issue persists, consider seeking technical support or consulting the docu %2。</translation> </message> <message> - <location filename="../../../../src/ui/widgets/TextEditTabWidget.cpp" line="254"/> - <location filename="../../../../src/ui/widgets/TextEditTabWidget.cpp" line="268"/> - <location filename="../../../../src/ui/widgets/TextEditTabWidget.cpp" line="284"/> + <location filename="../../../../src/ui/widgets/TextEditTabWidget.cpp" line="251"/> + <location filename="../../../../src/ui/widgets/TextEditTabWidget.cpp" line="265"/> + <location filename="../../../../src/ui/widgets/TextEditTabWidget.cpp" line="281"/> <source>untitled</source> <translation>无标题</translation> </message> @@ -6125,154 +6129,154 @@ If the issue persists, consider seeking technical support or consulting the docu <context> <name>GpgFrontend::UI::VerifyKeyDetailBox</name> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="57"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="56"/> <source>Import from keyserver</source> <translation>从密钥服务器导入</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="62"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="61"/> <source>Key not present with id 0x</source> <translation>不存在 ID 为 0x 的密钥</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="66"/> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="91"/> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="106"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="65"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="90"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="105"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="120"/> <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="121"/> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="122"/> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="137"/> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="152"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="136"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="151"/> <source>Status</source> <translation>状态</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="66"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="65"/> <source>:</source> <translation>:</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="68"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="67"/> <source>Key not present in key list</source> <translation>密钥不在密钥列表中</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="76"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="75"/> <source>A Signature</source> <translation>一个签名</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="81"/> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="96"/> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="111"/> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="127"/> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="142"/> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="157"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="80"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="95"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="110"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="126"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="141"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="156"/> <source>Key Information is NOT Available</source> <translation>密钥信息不可用</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="83"/> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="98"/> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="113"/> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="129"/> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="144"/> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="159"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="82"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="97"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="112"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="128"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="143"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="158"/> <source>Fingerprint</source> <translation>指纹</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="91"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="90"/> <source>Cert Revoked</source> <translation>证书吊销</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="106"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="105"/> <source>Signature Expired</source> <translation>签名过期</translation> </message> <message> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="120"/> <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="121"/> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="122"/> <source>Key Expired</source> <translation>密钥过期</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="137"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="136"/> <source>General Error</source> <translation>一般错误</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="152"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="151"/> <source>Unknown Error </source> <translation>未知错误 </translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="182"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="181"/> <source>Signer Name</source> <translation>签名者名称</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="183"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="182"/> <source>Signer Email</source> <translation>签名者电子邮件</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="184"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="183"/> <source>Key's Fingerprint</source> <translation>密钥的指纹</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="185"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="184"/> <source>Valid</source> <translation>有效的</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="186"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="185"/> <source>Flags</source> <translation>标志</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="193"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="192"/> <source>Fully Valid</source> <translation>完全有效</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="195"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="194"/> <source>NOT Fully Valid</source> <translation>不完全有效</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="202"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="201"/> <source>Good</source> <translation>正常</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="205"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="204"/> <source>Bad</source> <translation>异常</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="208"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="207"/> <source>Expired</source> <translation>已到期</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="211"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="210"/> <source>Missing Key</source> <translation>缺少密钥</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="214"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="213"/> <source>Revoked Key</source> <translation>撤销密钥</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="217"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="216"/> <source>Expired Key</source> <translation>过期密钥</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="220"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="219"/> <source>Missing CRL</source> <translation>缺少 CRL</translation> </message> @@ -6280,7 +6284,7 @@ If the issue persists, consider seeking technical support or consulting the docu <context> <name>GpgFrontend::UI::Wizard</name> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="43"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="45"/> <source>First Start Wizard</source> <translation>欢迎</translation> </message> @@ -6288,32 +6292,32 @@ If the issue persists, consider seeking technical support or consulting the docu <context> <name>GpgKey</name> <message> - <location filename="../../../../src/core/model/GpgKey.cpp" line="91"/> + <location filename="../../../../src/core/model/GpgKey.cpp" line="89"/> <source>Unknown</source> <translation>未知</translation> </message> <message> - <location filename="../../../../src/core/model/GpgKey.cpp" line="93"/> + <location filename="../../../../src/core/model/GpgKey.cpp" line="91"/> <source>Undefined</source> <translation>不明确</translation> </message> <message> - <location filename="../../../../src/core/model/GpgKey.cpp" line="95"/> + <location filename="../../../../src/core/model/GpgKey.cpp" line="93"/> <source>Never</source> <translation>绝不</translation> </message> <message> - <location filename="../../../../src/core/model/GpgKey.cpp" line="97"/> + <location filename="../../../../src/core/model/GpgKey.cpp" line="95"/> <source>Marginal</source> <translation>边缘</translation> </message> <message> - <location filename="../../../../src/core/model/GpgKey.cpp" line="99"/> + <location filename="../../../../src/core/model/GpgKey.cpp" line="97"/> <source>Full</source> <translation>完全</translation> </message> <message> - <location filename="../../../../src/core/model/GpgKey.cpp" line="101"/> + <location filename="../../../../src/core/model/GpgKey.cpp" line="99"/> <source>Ultimate</source> <translation>终极</translation> </message> @@ -6331,17 +6335,12 @@ If the issue persists, consider seeking technical support or consulting the docu <translation>如果此过程太慢,请在 gnupg 配置文件中适当设置密钥服务器地址(取决于您所在国家或地区的网络情况)。</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="67"/> - <source>Show Verify Details</source> - <translation>显示验证详细信息</translation> - </message> - <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="75"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="64"/> <source>Public key not found locally</source> <translation>本地未找到公钥</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="76"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="65"/> <source>There is no target public key content in local for GpgFrontend to gather enough information about this Signature. Do you want to import the public key from Keyserver now?</source> <translation>本地没有目标公钥内容供 GpgFrontend 收集有关此签名的足够信息。现在要从密钥服务器导入公钥吗?</translation> </message> @@ -6399,42 +6398,47 @@ If the issue persists, consider seeking technical support or consulting the docu <translation>成功</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="578"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="555"/> <source>Sync All Public Key</source> <translation>同步所有公钥</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="579"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="556"/> <source>You have not checked any public keys that you want to synchronize, do you want to synchronize all local public keys from the key server?</source> <translation>您没有选中任何要同步的公钥,是否要从密钥服务器同步所有本地公钥?</translation> </message> <message> - <location filename="../../../../src/core/GpgCoreInit.cpp" line="398"/> + <location filename="../../../../src/core/GpgCoreInit.cpp" line="422"/> <source>Cannot Find GpgConf</source> <translation>无法找到 GpgConf</translation> </message> <message> - <location filename="../../../../src/core/GpgCoreInit.cpp" line="406"/> + <location filename="../../../../src/core/GpgCoreInit.cpp" line="430"/> <source>Cannot Find GnuPG</source> <translation>无法找到 GnuPG</translation> </message> <message> - <location filename="../../../../src/core/GpgCoreInit.cpp" line="421"/> - <source>Cannot Find Home Path</source> - <translation>无法找到家目录路径</translation> + <location filename="../../../../src/core/GpgCoreInit.cpp" line="405"/> + <source>Cannot get Infos from GpgConf</source> + <translation type="unfinished">无法从GpgConf获取信息</translation> + </message> + <message> + <location filename="../../../../src/core/GpgCoreInit.cpp" line="445"/> + <source>Cannot Find Default Home Path</source> + <translation type="unfinished">无法找到默认的GnuPG家目录</translation> </message> <message> - <location filename="../../../../src/core/GpgCoreInit.cpp" line="473"/> + <location filename="../../../../src/core/GpgCoreInit.cpp" line="471"/> <source>GpgME Initiation Failed</source> <translation>GpgME 初始化失败</translation> </message> <message> - <location filename="../../../../src/core/GpgCoreInit.cpp" line="547"/> + <location filename="../../../../src/core/GpgCoreInit.cpp" line="545"/> <source>GpgME Default Context Initiation Failed</source> <translation>GpgME 默认上下文初始化失败</translation> </message> <message> - <location filename="../../../../src/core/GpgCoreInit.cpp" line="558"/> + <location filename="../../../../src/core/GpgCoreInit.cpp" line="556"/> <source>Gpg Default Key Database Initiation Failed</source> <translation>Gpg 默认密钥数据库初始化失败</translation> </message> diff --git a/resource/lfs/locale/ts/GpgFrontend.zh_TW.ts b/resource/lfs/locale/ts/GpgFrontend.zh_TW.ts index 5d57917b..af5a87eb 100644 --- a/resource/lfs/locale/ts/GpgFrontend.zh_TW.ts +++ b/resource/lfs/locale/ts/GpgFrontend.zh_TW.ts @@ -137,57 +137,57 @@ <context> <name>GpgFrontend::GpgKeyTableModel</name> <message> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="42"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="40"/> <source>Select</source> <translation type="unfinished">選擇</translation> </message> <message> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="42"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="40"/> <source>Type</source> <translation type="unfinished">類型</translation> </message> <message> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="42"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="40"/> <source>Name</source> <translation type="unfinished">姓名</translation> </message> <message> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="43"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="41"/> <source>Email Address</source> <translation type="unfinished">電子郵件位址</translation> </message> <message> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="43"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="41"/> <source>Usage</source> <translation type="unfinished">用法</translation> </message> <message> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="43"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="41"/> <source>Trust</source> <translation type="unfinished">相信</translation> </message> <message> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="44"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="42"/> <source>Key ID</source> <translation type="unfinished">鑰匙編號</translation> </message> <message> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="44"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="42"/> <source>Create Date</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="44"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="42"/> <source>Algorithm</source> <translation type="unfinished">算法</translation> </message> <message> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="45"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="43"/> <source>Subkey(s)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="45"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="43"/> <source>Comment</source> <translation type="unfinished">評論</translation> </message> @@ -538,6 +538,14 @@ </message> </context> <context> + <name>GpgFrontend::KeyGenerateInfo</name> + <message> + <location filename="../../../../src/core/model/GpgKeyGenerateInfo.cpp" line="39"/> + <source>None</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> <name>GpgFrontend::Module::GlobalRegisterTable</name> <message> <location filename="../../../../src/core/module/GlobalRegisterTable.cpp" line="47"/> @@ -687,58 +695,58 @@ <context> <name>GpgFrontend::UI::ChoosePage</name> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="107"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="106"/> <source>Choose your action...</source> <translation type="unfinished">選擇你的行動...</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="108"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="107"/> <source>...by clicking on the appropriate link.</source> <translation type="unfinished">...通過點擊相應的鏈接。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="111"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="110"/> <source>If you have never used GpgFrontend before and also don't own a gpg key yet you may possibly want to read how to</source> <translation type="unfinished">如果您以前從未使用過 GpgFrontend 並且也沒有 gpg 金鑰,您可能想閱讀如何</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="114"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="113"/> <source>Generate Key</source> <translation type="unfinished">生成金鑰</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="121"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="120"/> <source>If you want to learn how to encrypt, decrypt, sign and verify text, you can read </source> <translation type="unfinished">若您想多學習如何加密、解密、簽署以及驗證原文,可詳讀 </translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="124"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="123"/> <source>Encrypt & Decrypt Text</source> <translation type="unfinished">加密和解密文本</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="124"/> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="136"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="123"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="135"/> <source>or</source> <translation type="unfinished">或者</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="126"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="125"/> <source>Sign & Verify Text</source> <translation type="unfinished">簽名和驗證文本</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="134"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="133"/> <source>If you want to operate file, you can read </source> <translation type="unfinished">如您想開始運行操作檔案,可詳讀 </translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="136"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="135"/> <source>Encrypt & Sign File</source> <translation type="unfinished">加密和簽名文件</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="138"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="137"/> <source>Sign & Verify File</source> <translation type="unfinished">簽署並驗證文件</translation> </message> @@ -746,39 +754,39 @@ <context> <name>GpgFrontend::UI::CommonUtils</name> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="481"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="419"/> <source>Timeout</source> <translation type="unfinished">暫停</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="224"/> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="356"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="162"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="294"/> <source>Success</source> <translation type="unfinished">成功</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="159"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="119"/> <source>Failed to Load GnuPG Context</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="161"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="121"/> <source>It seems that GnuPG (gpg) is not properly installed. Please refer to the <a href='https://www.gpgfrontend.bktus.com/overview/faq/#troubleshooting-gnupg-installation-issues'>FAQ</a> for instructions on fixing the installation. After resolving the issue, relaunch GpgFrontend.<br /><br />Alternatively, you can open the GnuPG Controller to configure a custom GnuPG installation for GpgFrontend to use. Once set, GpgFrontend will restart automatically.<br /><br />Details: %1</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="225"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="163"/> <source>Gpg Operation succeed.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="235"/> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="348"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="173"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="286"/> <source>Failure</source> <translation type="unfinished">失敗</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="236"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="174"/> <source>Gpg Operation failed. Error code: %1 @@ -787,101 +795,101 @@ Description: %3</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="263"/> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="270"/> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="538"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="201"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="208"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="476"/> <source>Error</source> <translation type="unfinished">錯誤</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="255"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="193"/> <source>Open Key</source> <translation type="unfinished">開關鍵</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="256"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="194"/> <source>Keyring files</source> <translation type="unfinished">鑰匙圈文件</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="264"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="202"/> <source>Cannot open this file. Please make sure that this is a regular file and it's readable.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="271"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="209"/> <source>The target file is too large for a keyring.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="277"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="215"/> <source>File Open Failed</source> <translation type="unfinished">文件打開失敗</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="278"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="216"/> <source>Failed to open file: </source> <translation type="unfinished">開啟檔案失敗原因 : </translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="329"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="267"/> <source>Processing</source> <translation type="unfinished">加工</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="349"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="287"/> <source>Failed to execute command.</source> <translation type="unfinished">無法執行命令。</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="357"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="295"/> <source>Succeed in executing command.</source> <translation type="unfinished">成功執行命令。</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="359"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="297"/> <source>Warning</source> <translation type="unfinished">警告</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="360"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="298"/> <source>Finished executing command.</source> <translation type="unfinished">命令執行完畢。</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="381"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="319"/> <source>Default Keyserver Not Found</source> <translation type="unfinished">未找到預設金鑰伺服器</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="382"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="320"/> <source>Cannot read default keyserver from your settings, please set a default keyserver first</source> <translation type="unfinished">無法從您的設定值中讀取預設金鑰伺服器,請先設定值預設金鑰伺服器</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="478"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="416"/> <source>Key Not Found</source> <translation type="unfinished">未找到金鑰</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="484"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="422"/> <source>Key Server Not Found</source> <translation type="unfinished">未找到金鑰伺服器</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="487"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="425"/> <source>Connection Error</source> <translation type="unfinished">連線錯誤</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="426"/> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="498"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="364"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="436"/> <source>The key has been updated</source> <translation type="unfinished">金鑰已更新</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="428"/> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="500"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="366"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="438"/> <source>No need to update the key</source> <translation type="unfinished">無需更新金鑰</translation> </message> @@ -889,37 +897,37 @@ Description: %3</source> <context> <name>GpgFrontend::UI::ConclusionPage</name> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="204"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="203"/> <source>Ready.</source> <translation type="unfinished">準備好。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="205"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="204"/> <source>Have fun with GpgFrontend!</source> <translation type="unfinished">與 GpgFrontend 一起玩得開心!</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="208"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="207"/> <source>You are ready to use GpgFrontend now.<br><br></source> <translation type="unfinished">您現在可以使用 GpgFrontend。<br><br></translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="210"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="209"/> <source>The Online Document</source> <translation type="unfinished">在線文檔</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="211"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="210"/> <source> will get you started with GpgFrontend. Anytime you encounter problems, please try to find help from the documentation</source> <translation type="unfinished"> 會讓你開始使用 GpgFrontend。任何時候遇到問題,請嘗試從文檔中尋求幫助</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="220"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="219"/> <source>Open offline help.</source> <translation type="unfinished">打開離線幫助。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="224"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="223"/> <source>Don't show the wizard again.</source> <translation type="unfinished"></translation> </message> @@ -948,8 +956,8 @@ Description: %3</source> </message> <message> <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="74"/> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="112"/> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="146"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="111"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="145"/> <source>Error</source> <translation type="unfinished">錯誤</translation> </message> @@ -975,82 +983,82 @@ Description: %3</source> <translation type="unfinished">請在導出前生成密碼以保護您的金鑰,這非常重要。不要忘記在安全的地方備份您的密碼。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="113"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="112"/> <source>No key is suitable to export.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="118"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="117"/> <source>Generating</source> <translation type="unfinished">生成</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="129"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="128"/> <source>Success</source> <translation type="unfinished">成功</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="131"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="130"/> <source>The Key Package has been successfully generated and has been protected by encryption algorithms(AES-256-ECB). You can safely transfer your Key Package.</source> <translation type="unfinished">金鑰包已成功生成並受到加密算法(AES-256-ECB)的保護。您可以安全地轉移您的金鑰包。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="136"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="135"/> <source>But the key file cannot be leaked under any circumstances. Please delete the Key Package and key file as soon as possible after completing the transfer operation.</source> <translation type="unfinished">但金鑰文件在任何情況下都不能洩露。請在完成傳輸操作後儘快刪除金鑰包和金鑰文件。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="147"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="146"/> <source>An error occurred while exporting the key package.</source> <translation type="unfinished">導出金鑰包時出錯。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="156"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="155"/> <source>Key Package Name</source> <translation type="unfinished">金鑰包名稱</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="157"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="156"/> <source>Output Path</source> <translation type="unfinished">輸出路徑</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="158"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="157"/> <source>Passphrase</source> <translation type="unfinished">密碼</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="160"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="159"/> <source>Tips: You can use Key Package to safely and conveniently transfer your public and private keys between devices.</source> <translation type="unfinished">提示:您可以使用金鑰包在設備之間安全方便地傳輸您的公鑰和私鑰。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="162"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="161"/> <source>Generate and Save Passphrase</source> <translation type="unfinished">生成並保存密碼</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="163"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="162"/> <source>Generate Key Package Name</source> <translation type="unfinished">生成金鑰包名</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="164"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="163"/> <source>Select Output Path</source> <translation type="unfinished">選擇輸出路徑</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="167"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="166"/> <source>Include secret key (Think twice before acting)</source> <translation type="unfinished">包括秘鑰(行動前請三思)</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="169"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="168"/> <source>Exclude keys that do not have a private key</source> <translation type="unfinished">排除沒有私鑰的金鑰</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="172"/> + <location filename="../../../../src/ui/dialog/import_export/ExportKeyPackageDialog.cpp" line="171"/> <source>Export As Key Package</source> <translation type="unfinished">導出為金鑰包</translation> </message> @@ -1058,141 +1066,151 @@ Description: %3</source> <context> <name>GpgFrontend::UI::FilePage</name> <message> - <location filename="../../../../src/ui/widgets/FilePage.cpp" line="63"/> + <location filename="../../../../src/ui/widgets/FilePage.cpp" line="46"/> + <source>Switch Batch Mode</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/widgets/FilePage.cpp" line="66"/> <source>Show Hidden File</source> <translation type="unfinished">顯示隱藏文件</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FilePage.cpp" line="69"/> + <location filename="../../../../src/ui/widgets/FilePage.cpp" line="72"/> <source>Show System File</source> <translation type="unfinished">顯示系統文件</translation> </message> + <message> + <location filename="../../../../src/ui/widgets/FilePage.cpp" line="78"/> + <source>ASCII Mode</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>GpgFrontend::UI::FileTreeView</name> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="88"/> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="101"/> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="159"/> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="204"/> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="225"/> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="266"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="93"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="106"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="164"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="209"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="232"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="279"/> <source>Error</source> <translation type="unfinished">錯誤</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="89"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="94"/> <source>The path is not exists, unprivileged or unreachable.</source> <translation type="unfinished">該路徑不存在、沒有特權或無法存取。</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="102"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="107"/> <source>The file is unprivileged or unreachable.</source> <translation type="unfinished">該文件沒有特權或無法存取。</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="152"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="157"/> <source>Warning</source> <translation type="unfinished">警告</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="153"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="158"/> <source>Are you sure you want to delete it?</source> <translation type="unfinished">你確定要刪除嗎?</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="160"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="165"/> <source>Unable to delete the file or folder.</source> <translation type="unfinished">無法刪除文件或文件夾。</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="169"/> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="182"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="174"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="187"/> <source>Make New Directory</source> <translation type="unfinished">新建目錄</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="170"/> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="183"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="175"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="188"/> <source>Directory Name</source> <translation type="unfinished">目錄名稱</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="197"/> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="218"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="202"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="225"/> <source>Create Empty File</source> <translation type="unfinished">創建空文件</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="197"/> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="218"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="202"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="225"/> <source>Filename (you can given extension)</source> <translation type="unfinished">文件名(您可以指定擴展名)</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="205"/> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="226"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="210"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="233"/> <source>Unable to create the file.</source> <translation type="unfinished">無法創建文件。</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="258"/> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="289"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="271"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="303"/> <source>Rename</source> <translation type="unfinished">改名</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="258"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="271"/> <source>New Filename</source> <translation type="unfinished">新文件名</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="267"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="280"/> <source>Unable to rename the file or folder.</source> <translation type="unfinished">無法重命名文件或文件夾。</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="284"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="297"/> <source>Open</source> <translation type="unfinished">打開</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="294"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="308"/> <source>Delete</source> <translation type="unfinished">刪除</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="299"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="313"/> <source>Calculate Hash</source> <translation type="unfinished">計算哈希</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="304"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="318"/> <source>Directory</source> <translation type="unfinished">目錄</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="309"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="323"/> <source>File</source> <translation type="unfinished">文件</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="314"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="328"/> <source>Compress...</source> <translation type="unfinished">壓縮...</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="321"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="335"/> <source>Open with Default System Application</source> <translation type="unfinished">使用預設系統應用程序打開</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="326"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="340"/> <source>New</source> <translation type="unfinished">新的</translation> </message> <message> - <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="382"/> + <location filename="../../../../src/ui/widgets/FileTreeView.cpp" line="402"/> <source>Calculating</source> <translation type="unfinished"></translation> </message> @@ -1229,68 +1247,63 @@ Description: %3</source> </message> <message> <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="52"/> - <source>Enable to use longer key expiration date.</source> - <translation type="unfinished">啟用以使用更長的金鑰到期日期。</translation> - </message> - <message> - <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="54"/> <source>Import files dropped on the Key List without confirmation.</source> <translation type="unfinished">未經確認,導入放在金鑰列表中的文件。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="56"/> + <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="54"/> <source>Disable loading of all modules (including integrated modules)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="58"/> + <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="56"/> <source>Language</source> <translation type="unfinished">語</translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="60"/> + <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="58"/> <source>NOTE</source> <translation type="unfinished">筆記</translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="60"/> + <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="58"/> <source>: </source> <translation type="unfinished">: </translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="61"/> + <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="59"/> <source>GpgFrontend will restart automatically if you change the language!</source> <translation type="unfinished">如果您更改語言,GpgFrontend 將自動重啟!</translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="63"/> + <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="61"/> <source>Data</source> <translation type="unfinished">數據</translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="65"/> - <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="83"/> + <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="63"/> + <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="81"/> <source>Clear All Log (Total Size: %1)</source> <translation type="unfinished">清除所有日誌(總大小:%1)</translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="68"/> - <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="97"/> + <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="66"/> + <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="95"/> <source>Clear All Data Objects (Total Size: %1)</source> <translation type="unfinished">清除所有數據對象(總大小:%1)</translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="71"/> + <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="69"/> <source>Reveal in File Explorer</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="90"/> + <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="88"/> <source>Confirm</source> <translation type="unfinished">確認</translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="91"/> + <location filename="../../../../src/ui/dialog/settings/SettingsGeneral.cpp" line="89"/> <source>Are you sure you want to clear all data objects? This will result in loss of all cached form positions, statuses, key servers, etc.</source> <translation type="unfinished">您確定要清除所有數據對象嗎?這將導致所有緩存的表單位置、狀態、金鑰伺服器等丟失。</translation> @@ -1299,150 +1312,182 @@ This will result in loss of all cached form positions, statuses, key servers, et <context> <name>GpgFrontend::UI::GnuPGControllerDialog</name> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="69"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="70"/> <source>General</source> <translation type="unfinished">一般設定</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="70"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="71"/> <source>Key Database</source> <translation type="unfinished">金鑰數據庫</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="71"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="72"/> <source>Advanced</source> <translation type="unfinished">先進的</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="51"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="52"/> <source>Use Binary Mode for File Operations</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="53"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="54"/> <source>Use Pinentry as Password Input Dialog</source> <translation type="unfinished">使用 Pinentry 作為密碼輸入對話框</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="54"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="55"/> <source>Enable GpgME Debug Log</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="55"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="56"/> <source>Use Custom GnuPG</source> <translation type="unfinished">使用自定義 GnuPG</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="56"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="57"/> <source>Select GnuPG Path</source> <translation type="unfinished">選擇 GnuPG 路徑</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="76"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="77"/> <source>Name</source> <translation type="unfinished">姓名</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="76"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="77"/> <source>Path</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="363"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="77"/> + <source>Status</source> + <translation type="unfinished">狀態</translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="77"/> + <source>Real Path</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="360"/> <source>Maximum Key Database Limit Reached</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="364"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="361"/> <source>Currently, GpgFrontend supports a maximum of 8 key databases. Please remove an existing database to add a new one.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="375"/> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="605"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="372"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="618"/> <source>Duplicate Key Database Paths</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="376"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="373"/> <source>The newly added key database path duplicates a previously existing one.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="445"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="382"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="629"/> + <source>Invalid Key Database Paths</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="383"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="630"/> + <source>The edited key database path is not a valid path that GpgFrontend can use</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="430"/> + <source>Active</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="430"/> + <source>Inactive</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="458"/> <source>Confirm Deletion</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="446"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="459"/> <source>Are you sure you want to delete the selected key database?</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="584"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="597"/> <source>No Key Database Selected</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="585"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="598"/> <source>Please select a key database to edit.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="606"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="619"/> <source>The edited key database path duplicates a previously existing one.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="58"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="59"/> <source>Restart Gpg Agent on start</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="60"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="61"/> <source>Kill all gnupg daemon at close</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="64"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="65"/> <source>Tips: please select a directory where "gpgconf" is located in.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="66"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="67"/> <source>Tips: notice that modify any of these settings will cause an Application restart.</source> <translation type="unfinished">提示:請注意,修改任何這些設定值都會導致應用程序重新啟動。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="107"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="108"/> <source>Open Directory</source> <translation type="unfinished">打開目錄</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="183"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="184"/> <source>GnuPG Controller</source> <translation type="unfinished">GnuPG 控制器</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="331"/> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="338"/> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="350"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="328"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="335"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="347"/> <source>Illegal GnuPG Path</source> <translation type="unfinished">非法 GnuPG 路徑</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="332"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="329"/> <source>Target GnuPG Path is not an exists readable directory.</source> <translation type="unfinished">目標 GnuPG 路徑不是現有的可讀目錄。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="339"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="336"/> <source>Target GnuPG Path is not an absolute path.</source> <translation type="unfinished">目標 GnuPG 路徑不是絕對路徑。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="351"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="348"/> <source>Target GnuPG Path contains no "gpgconf" executable.</source> <translation type="unfinished">目標 GnuPG 路徑不包含“gpgconf”可執行文件。</translation> </message> @@ -1450,27 +1495,38 @@ This will result in loss of all cached form positions, statuses, key servers, et <context> <name>GpgFrontend::UI::GpgFrontendApplication</name> <message> - <location filename="../../../../src/ui/GpgFrontendApplication.cpp" line="71"/> + <location filename="../../../../src/ui/GpgFrontendApplication.cpp" line="77"/> <source>Standard Exception Thrown</source> <translation type="unfinished">拋出標準異常</translation> </message> <message> - <location filename="../../../../src/ui/GpgFrontendApplication.cpp" line="72"/> + <location filename="../../../../src/ui/GpgFrontendApplication.cpp" line="78"/> <source>Oops, an standard exception was thrown during the running of the program. This is not a serious problem, it may be the negligence of the programmer, please report this problem if you can.</source> <translation type="unfinished">糟糕,在程序運行期間拋出了一個標準異常。這不是一個嚴重的問題,可能是程序員的疏忽,如果可以的話,請報告這個問題。</translation> </message> <message> - <location filename="../../../../src/ui/GpgFrontendApplication.cpp" line="80"/> + <location filename="../../../../src/ui/GpgFrontendApplication.cpp" line="86"/> <source>Unhandled Exception Thrown</source> <translation type="unfinished">未處理的異常拋出</translation> </message> <message> - <location filename="../../../../src/ui/GpgFrontendApplication.cpp" line="81"/> + <location filename="../../../../src/ui/GpgFrontendApplication.cpp" line="87"/> <source>Oops, an unhandled exception was thrown during the running of the program. This is not a serious problem, it may be the negligence of the programmer, please report this problem if you can.</source> <translation type="unfinished">糟糕,在程序運行期間引發了未處理的異常。這不是一個嚴重的問題,可能是程序員的疏忽,如果可以的話,請報告這個問題。</translation> </message> </context> <context> + <name>GpgFrontend::UI::GpgOperaHelper</name> + <message> + <location filename="../../../../src/ui/function/GpgOperaHelper.cpp" line="97"/> + <location filename="../../../../src/ui/function/GpgOperaHelper.cpp" line="133"/> + <location filename="../../../../src/ui/function/GpgOperaHelper.cpp" line="175"/> + <location filename="../../../../src/ui/function/GpgOperaHelper.cpp" line="213"/> + <source>Critical Error</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> <name>GpgFrontend::UI::InfoBoardWidget</name> <message> <location filename="../../../../src/ui/widgets/InfoBoardWidget.cpp" line="46"/> @@ -1554,42 +1610,42 @@ This will result in loss of all cached form positions, statuses, key servers, et <context> <name>GpgFrontend::UI::IntroPage</name> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="71"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="70"/> <source>Getting Started...</source> <translation type="unfinished">入門...</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="72"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="71"/> <source>... with GpgFrontend</source> <translation type="unfinished">... 使用 GpgFrontend</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="75"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="74"/> <source>Welcome to GpgFrontend for decrypting and signing text or files!</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="77"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="76"/> <source>is a Powerful, Easy-to-Use, Compact, Cross-Platform, and Installation-Free OpenPGP Crypto Tool. </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="79"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="78"/> <source>To get started, be sure to check out the</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="82"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="81"/> <source>by clicking the link, the page will open in your web browser</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="81"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="80"/> <source>Overview</source> <translation type="unfinished">概述</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="91"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="90"/> <source>If it supports the language currently being used in your system, GpgFrontend will automatically set it.</source> <translation type="unfinished">如果它支持您系統中當前使用的語言,GpgFrontend 將自動設定它。</translation> </message> @@ -1597,52 +1653,57 @@ This will result in loss of all cached form positions, statuses, key servers, et <context> <name>GpgFrontend::UI::KeyDatabaseEditDialog</name> <message> - <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="47"/> + <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="50"/> <source>Key Database Name</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="48"/> + <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="51"/> <source>Key Database Path</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="49"/> + <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="52"/> <source>Select A Key Database Path</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="51"/> - <source>Key Database Info</source> + <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="53"/> + <source>Convert to Relative Path</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="55"/> + <source>Key Database Info</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="59"/> <source>Open Directory</source> <translation type="unfinished">打開目錄</translation> </message> <message> - <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="58"/> + <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="62"/> <source>Illegal GnuPG Key Database Path</source> <translation type="unfinished">非法的 GnuPG 金鑰數據庫路徑</translation> </message> <message> - <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="59"/> + <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="63"/> <source>Target GnuPG Key Database Path is not an exists readable directory.</source> <translation type="unfinished">目標 GnuPG 金鑰數據庫路徑不是現有的可讀目錄。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="81"/> + <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="85"/> <source>The key database name cannot be empty.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="86"/> + <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="90"/> <source>The key database path cannot be empty.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="92"/> + <location filename="../../../../src/ui/dialog/KeyDatabaseEditDialog.cpp" line="96"/> <source>A key database with the name '%1' already exists. Please choose a different name.</source> <translation type="unfinished"></translation> </message> @@ -1676,144 +1737,250 @@ This will result in loss of all cached form positions, statuses, key servers, et </message> </context> <context> - <name>GpgFrontend::UI::KeyGenDialog</name> + <name>GpgFrontend::UI::KeyGenPage</name> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="66"/> - <source>Generate Key</source> - <translation type="unfinished">生成金鑰</translation> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="163"/> + <source>Create a keypair...</source> + <translation type="unfinished">創建金鑰對...</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="100"/> - <source>Name must contain at least five characters.</source> - <translation type="unfinished">名稱必須至少包含五個字符。</translation> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="164"/> + <source>...for decrypting and signing messages</source> + <translation type="unfinished">...用於解密和簽署消息</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="105"/> - <source>Please give a email address.</source> - <translation type="unfinished">請提供一個電子郵件位址。</translation> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="166"/> + <source>You should create a new keypair.The pair consists of a public and a private key.<br>Other users can use the public key to encrypt messages for you and verify messages signed by you.You can use the private key to decrypt and sign messages.<br>For more information have a look at the offline tutorial (which then is shown in the main window):</source> + <translation type="unfinished">您應該創建一個新的金鑰對。該對由一個公鑰和一個私鑰組成。<br>其他用戶可以使用公鑰為您加密消息並驗證您簽署的消息。您可以使用私鑰解密和簽名消息。<br>有關更多信息,請查看離線教程(然後顯示在主窗口中):</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="113"/> - <source>Expiration time too long.</source> - <translation type="unfinished">過期時間太長。</translation> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="178"/> + <source>Offline tutorial</source> + <translation type="unfinished">離線教程</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="158"/> - <source>Generating</source> - <translation type="unfinished">生成</translation> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="182"/> + <source>Create New Key</source> + <translation type="unfinished">創建新金鑰</translation> </message> +</context> +<context> + <name>GpgFrontend::UI::KeyGenerateDialog</name> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="169"/> - <source>Error</source> - <translation type="unfinished">錯誤</translation> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="63"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="70"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="578"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="584"/> + <source>Custom</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="170"/> - <source>Unknown error occurred</source> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="71"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="527"/> + <source>3 Months</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="206"/> - <source>Key Usage</source> - <translation type="unfinished">金鑰使用</translation> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="72"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="532"/> + <source>6 Months</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="208"/> - <source>Encryption</source> - <translation type="unfinished">加密</translation> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="73"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="537"/> + <source>1 Year</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="211"/> - <source>Signing</source> - <translation type="unfinished">簽約</translation> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="74"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="139"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="144"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="542"/> + <source>2 Years</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="214"/> - <source>Certification</source> - <translation type="unfinished">認證</translation> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="75"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="547"/> + <source>5 Years</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="217"/> - <source>Authentication</source> - <translation type="unfinished">驗證</translation> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="76"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="552"/> + <source>10 Years</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="455"/> - <source>Key Database</source> - <translation type="unfinished">金鑰數據庫</translation> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="77"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="100"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="109"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="558"/> + <source>Non Expired</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="456"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="81"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="290"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="589"/> + <source>Primary Key Only</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="82"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="338"/> + <source>Primary Key With Subkey</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="85"/> <source>Name</source> <translation type="unfinished">姓名</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="457"/> - <source>Email Address</source> - <translation type="unfinished">電子郵件位址</translation> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="86"/> + <source>Email</source> + <translation type="unfinished">電子郵件</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="458"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="87"/> <source>Comment</source> <translation type="unfinished">評論</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="459"/> - <source>Expiration Date</source> - <translation type="unfinished">截止日期</translation> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="88"/> + <source>Key Database</source> + <translation type="unfinished">金鑰數據庫</translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="89"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="92"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="102"/> + <source>Algorithm</source> + <translation type="unfinished">算法</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="460"/> - <source>Never Expire</source> - <translation type="unfinished">永不過期</translation> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="90"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="93"/> + <source>Validity Period</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="461"/> - <source>KeySize (in Bit)</source> - <translation type="unfinished">金鑰大小(以位為單位)</translation> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="94"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="104"/> + <source>Key Length</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="462"/> - <source>Key Type</source> - <translation type="unfinished">鑰匙類型</translation> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="95"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="105"/> + <source>Usage</source> + <translation type="unfinished">用法</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="463"/> - <source>Non Pass Phrase</source> - <translation type="unfinished">不合格短語</translation> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="96"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="106"/> + <source>Encrypt</source> + <translation type="unfinished">加密</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeygenDialog.cpp" line="477"/> - <source>Basic Information</source> - <translation type="unfinished">基本信息</translation> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="97"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="107"/> + <source>Sign</source> + <translation type="unfinished">標誌</translation> </message> -</context> -<context> - <name>GpgFrontend::UI::KeyGenPage</name> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="164"/> - <source>Create a keypair...</source> - <translation type="unfinished">創建金鑰對...</translation> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="98"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="108"/> + <source>Authentication</source> + <translation type="unfinished">驗證</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="165"/> - <source>...for decrypting and signing messages</source> - <translation type="unfinished">...用於解密和簽署消息</translation> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="99"/> + <source>No Passphrase</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="167"/> - <source>You should create a new keypair.The pair consists of a public and a private key.<br>Other users can use the public key to encrypt messages for you and verify messages signed by you.You can use the private key to decrypt and sign messages.<br>For more information have a look at the offline tutorial (which then is shown in the main window):</source> - <translation type="unfinished">您應該創建一個新的金鑰對。該對由一個公鑰和一個私鑰組成。<br>其他用戶可以使用公鑰為您加密消息並驗證您簽署的消息。您可以使用私鑰解密和簽名消息。<br>有關更多信息,請查看離線教程(然後顯示在主窗口中):</translation> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="103"/> + <source>Expire Date</source> + <translation type="unfinished">到期日期</translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="179"/> - <source>Offline tutorial</source> - <translation type="unfinished">離線教程</translation> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="112"/> + <source>Easy Mode</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="183"/> - <source>Create New Key</source> - <translation type="unfinished">創建新金鑰</translation> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="113"/> + <source>Primary Key</source> + <translation type="unfinished">首要的關鍵</translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="114"/> + <source>Subkey</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="117"/> + <source>Generate</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="134"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="261"/> + <source>None</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="146"/> + <source>Generate Key</source> + <translation type="unfinished">生成金鑰</translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="156"/> + <source>Name must contain at least five characters.</source> + <translation type="unfinished">名稱必須至少包含五個字符。</translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="161"/> + <source>Please give a valid email address.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="166"/> + <source>Please give a valid primary key algorithm.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="175"/> + <source>Time to primary key expiration must not be less than 120 seconds.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="182"/> + <source>Please give a valid subkey algorithm.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="190"/> + <source>Time to subkey expiration must not be less than 120 seconds.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="617"/> + <source>Error</source> + <translation type="unfinished">錯誤</translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="618"/> + <source>Unknown error occurred</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="630"/> + <source>Generating</source> + <translation type="unfinished">生成</translation> </message> </context> <context> @@ -1933,122 +2100,132 @@ This will result in loss of all cached form positions, statuses, key servers, et <context> <name>GpgFrontend::UI::KeyList</name> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="254"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="250"/> <source>Refresh</source> <translation type="unfinished">刷新</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="256"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="252"/> <source>Refresh the key list to synchronize changes.</source> <translation type="unfinished">刷新金鑰列表以同步更改。</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="257"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="253"/> <source>Sync Public Key</source> <translation type="unfinished">同步公鑰</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="259"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="255"/> <source>Sync public key with your default keyserver.</source> <translation type="unfinished">將公鑰與您的預設金鑰伺服器同步。</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="260"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="256"/> <source>Uncheck ALL</source> <translation type="unfinished">取消所有</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="262"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="258"/> <source>Cancel all checked items in the current tab at once.</source> <translation type="unfinished">一次取消當前選項卡中所有選中的項目。</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="263"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="259"/> <source>Check ALL</source> <translation type="unfinished">選擇所有</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="265"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="261"/> <source>Check all items in the current tab at once</source> <translation type="unfinished">一次檢查當前選項卡中的所有項目</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="266"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="262"/> <source>Search for keys...</source> <translation type="unfinished">搜索鑰匙...</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="108"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="106"/> <source>Key ID</source> <translation type="unfinished">鑰匙編號</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="119"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="117"/> <source>Algorithm</source> <translation type="unfinished">算法</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="130"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="128"/> <source>Owner Trust</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="142"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="140"/> <source>Create Date</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="154"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="152"/> <source>Subkey(s)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="168"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="166"/> <source>Comment</source> <translation type="unfinished">評論</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="300"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="296"/> <source>Refreshing Key List...</source> <translation type="unfinished">正在刷新金鑰列表...</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="477"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="473"/> <source>Import Keys</source> <translation type="unfinished">導入金鑰</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="479"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="475"/> <source>You've dropped something on the table.</source> <translation type="unfinished">你把東西掉在桌子上了。</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="480"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="476"/> <source>GpgFrontend will now try to import key(s).</source> <translation type="unfinished">GpgFrontend 現在將嘗試導入金鑰。</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="483"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="479"/> <source>Always import without bothering.</source> <translation type="unfinished">始終導入而無需打擾。</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="305"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="645"/> + <source>Error</source> + <translation type="unfinished">錯誤</translation> + </message> + <message> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="645"/> + <source>Key Not Found.</source> + <translation type="unfinished">未找到金鑰。</translation> + </message> + <message> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="301"/> <source>Key List Refreshed.</source> <translation type="unfinished">金鑰列表已刷新。</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="600"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="577"/> <source>Syncing Key List...</source> <translation type="unfinished">正在同步金鑰列表...</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="609"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="586"/> <source>Sync [%1/%2] %3 %4</source> <translation type="unfinished">同步 [%1/%2] %3 %4</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="619"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="596"/> <source>Key List Sync Done.</source> <translation type="unfinished">金鑰列表同步完成。</translation> </message> @@ -2056,368 +2233,354 @@ This will result in loss of all cached form positions, statuses, key servers, et <context> <name>GpgFrontend::UI::KeyMgmt</name> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="58"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="59"/> <source>All</source> <translation type="unfinished">全部</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="63"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="64"/> <source>Only Public Key</source> <translation type="unfinished">只有公鑰</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="70"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="71"/> <source>Has Private Key</source> <translation type="unfinished">有私鑰</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="77"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="78"/> <source>No Primary Key</source> <translation type="unfinished">無主鍵</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="86"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="87"/> <source>Revoked</source> <translation type="unfinished">撤銷</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="93"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="94"/> <source>Expired</source> <translation type="unfinished">已到期</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="117"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="114"/> <source>KeyPair Management</source> <translation type="unfinished">金鑰對管理</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="138"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="135"/> <source>Open</source> <translation type="unfinished">打開</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="140"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="137"/> <source>Open Key File</source> <translation type="unfinished">打開金鑰文件</translation> </message> <message> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="143"/> <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="146"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="149"/> <source>Close</source> <translation type="unfinished">關閉</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="152"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="149"/> <source>New Keypair</source> <translation type="unfinished">新金鑰對</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="155"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="152"/> <source>Generate KeyPair</source> <translation type="unfinished">生成金鑰對</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="159"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="156"/> <source>New Subkey</source> <translation type="unfinished">新增子系金鑰</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="163"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="160"/> <source>Generate Subkey For Selected KeyPair</source> <translation type="unfinished">為選定的金鑰對生成子金鑰</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="167"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="266"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="164"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="262"/> <source>File</source> <translation type="unfinished">文件</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="169"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="166"/> <source>Import New Key From File</source> <translation type="unfinished">從文件導入新金鑰</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="175"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="172"/> <source>Clipboard</source> <translation type="unfinished">剪貼板</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="179"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="176"/> <source>Import New Key From Clipboard</source> <translation type="unfinished">從剪貼板導入新金鑰</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="191"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="187"/> <source>Keyserver</source> <translation type="unfinished">金鑰伺服器</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="195"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="191"/> <source>Import New Key From Keyserver</source> <translation type="unfinished">從金鑰伺服器導入新金鑰</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="202"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="568"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="198"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="543"/> <source>Key Package</source> <translation type="unfinished">鑰匙包</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="205"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="201"/> <source>Import Key(s) From a Key Package</source> <translation type="unfinished">從金鑰包導入金鑰</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="209"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="205"/> <source>Export To Clipboard</source> <translation type="unfinished">導出到剪貼板</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="213"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="209"/> <source>Export Checked Key(s) To Clipboard</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="217"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="213"/> <source>Export As Key Package</source> <translation type="unfinished">導出為金鑰包</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="220"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="216"/> <source>Export Checked Key(s) To a Key Package</source> <translation type="unfinished">將檢查的金鑰導出到金鑰包</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="224"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="220"/> <source>Export As OpenSSH</source> <translation type="unfinished">導出為 OpenSSH</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="227"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="223"/> <source>Export Checked Key As OpenSSH Format to File</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="231"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="227"/> <source>Delete Selected Key(s)</source> <translation type="unfinished">刪除選定的鍵</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="233"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="229"/> <source>Delete the Selected keys</source> <translation type="unfinished">刪除選定的鍵</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="237"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="233"/> <source>Delete Checked Key(s)</source> <translation type="unfinished">刪除選中的金鑰</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="239"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="235"/> <source>Delete the Checked keys</source> <translation type="unfinished">刪除選中的鍵</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="244"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="240"/> <source>Show Key Details</source> <translation type="unfinished">顯示關鍵細節</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="246"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="242"/> <source>Show Details for this Key</source> <translation type="unfinished">顯示此鍵的詳細信息</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="250"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="252"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="246"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="248"/> <source>Set Owner Trust Level</source> <translation type="unfinished">設定所有者信任級別</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="270"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="290"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="266"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="286"/> <source>Key</source> <translation type="unfinished">鑰匙</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="271"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="267"/> <source>Generate Key</source> <translation type="unfinished">生成金鑰</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="275"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="303"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="271"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="299"/> <source>Import Key</source> <translation type="unfinished">導入金鑰</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="281"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="311"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="312"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="277"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="307"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="308"/> <source>Export Key</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="302"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="298"/> <source>Import key</source> <translation type="unfinished">導入金鑰</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="347"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="343"/> <source>Deleting Keys</source> <translation type="unfinished">刪除金鑰</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="348"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="344"/> <source>Are you sure that you want to delete the following keys?</source> <translation type="unfinished">您確定要刪除以下鍵嗎?</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="350"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="346"/> <source>The action can not be undone.</source> <translation type="unfinished">該操作無法撤消。</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="368"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="431"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="443"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="473"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="522"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="533"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="546"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="577"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="585"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="601"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="609"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="625"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="418"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="430"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="497"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="508"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="521"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="552"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="560"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="576"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="584"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="600"/> <source>Error</source> <translation type="unfinished">錯誤</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="368"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="473"/> - <source>Key Not Found.</source> - <translation type="unfinished">未找到金鑰。</translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="379"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="393"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="493"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="499"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="367"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="381"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="469"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="475"/> <source>Forbidden</source> <translation type="unfinished">禁止的</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="380"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="394"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="368"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="382"/> <source>Please check some keys before doing this operation.</source> <translation type="unfinished">請在執行此操作之前檢查一些鍵。</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="386"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="560"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="374"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="535"/> <source>key(s) exported</source> <translation type="unfinished">導出的金鑰</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="421"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="512"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="408"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="487"/> <source>Exporting</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="432"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="444"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="523"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="534"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="419"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="431"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="498"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="509"/> <source>Unknown error occurred</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="465"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="477"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="453"/> <source>Invalid Operation</source> <translation type="unfinished">無效操作</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="466"/> - <source>Please select one KeyPair before doing this operation.</source> - <translation type="unfinished">請在執行此操作前選擇一個 KeyPair。</translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="478"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="454"/> <source>If a key pair does not have a private key then it will not be able to generate sub-keys.</source> <translation type="unfinished">如果金鑰對沒有私鑰,那麼它將無法生成子金鑰。</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="494"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="470"/> <source>Please check a key before performing this operation.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="500"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="476"/> <source>This operation accepts just a single key.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="547"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="522"/> <source>This key may not be able to export as OpenSSH format. Please check the key-size of the subkey(s) used to sign.</source> <translation type="unfinished">此金鑰可能無法導出為 OpenSSH 格式。請檢查用於簽名的子金鑰的金鑰大小。</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="555"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="530"/> <source>Export OpenSSH Key To File</source> <translation type="unfinished">將 OpenSSH 金鑰導出到文件</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="556"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="531"/> <source>OpenSSH Public Key Files</source> <translation type="unfinished">OpenSSH 公鑰文件</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="568"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="543"/> <source>Import Key Package</source> <translation type="unfinished">導入金鑰包</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="578"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="602"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="553"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="577"/> <source>Cannot open this file. Please make sure that this is a regular file and it's readable.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="586"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="561"/> <source>The target file is too large for a key package.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="591"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="566"/> <source>Import Key Package Passphrase File</source> <translation type="unfinished">導入金鑰包密碼文件</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="592"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="567"/> <source>Key Package Passphrase File</source> <translation type="unfinished">金鑰包密碼文件</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="610"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="585"/> <source>The target file is too large for a key package passphrase.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="615"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="590"/> <source>Importing</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="632"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="607"/> <source>key(s) imported</source> <translation type="unfinished">導入的金鑰</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="626"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="601"/> <source>An error occur in importing key package.</source> <translation type="unfinished">導入金鑰包出錯。</translation> </message> @@ -2623,7 +2786,7 @@ This will result in loss of all cached form positions, statuses, key servers, et <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairDetailTab.cpp" line="350"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairDetailTab.cpp" line="344"/> <source>Notice: The public key has been published on keys.openpgp.org.</source> <translation type="unfinished"></translation> </message> @@ -2631,204 +2794,204 @@ This will result in loss of all cached form positions, statuses, key servers, et <context> <name>GpgFrontend::UI::KeyPairOperaTab</name> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="62"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="61"/> <source>General Operations</source> <translation type="unfinished">一般操作</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="68"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="67"/> <source>Export Public Key</source> <translation type="unfinished">導出公鑰</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="74"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="73"/> <source>Export Private Key</source> <translation type="unfinished">導出私鑰</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="81"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="80"/> <source>Modify Expiration Datetime (Primary Key)</source> <translation type="unfinished">修改到期日期時間(主鍵)</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="84"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="83"/> <source>Modify Password</source> <translation type="unfinished">修改密碼</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="208"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="207"/> <source>Generate Revoke Certificate</source> <translation type="unfinished">生成撤銷證書</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="125"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="124"/> <source>Modify TOFU Policy</source> <translation type="unfinished">修改豆腐政策</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="101"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="100"/> <source>Key Server Operations</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="109"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="689"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="108"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="687"/> <source>Import A Paper Key</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="119"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="118"/> <source>Revoke Certificate Operation</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="132"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="131"/> <source>Set Owner Trust Level</source> <translation type="unfinished">設定所有者信任級別</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="179"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="178"/> <source>Export Full Secret Key</source> <translation type="unfinished">導出完整金鑰</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="185"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="184"/> <source>Export Shortest Secret Key</source> <translation type="unfinished">導出最短金鑰</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="213"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="212"/> <source>Import Revoke Certificate</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="242"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="291"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="342"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="635"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="241"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="290"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="341"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="633"/> <source>Export Key To File</source> <translation type="unfinished">將金鑰導出到文件</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="243"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="292"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="343"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="636"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="242"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="291"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="342"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="634"/> <source>Key Files</source> <translation type="unfinished">關鍵文件</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="248"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="297"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="348"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="659"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="247"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="296"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="347"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="657"/> <source>Export Error</source> <translation type="unfinished">導出錯誤</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="249"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="298"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="349"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="660"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="248"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="297"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="348"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="658"/> <source>Couldn't open %1 for writing</source> <translation type="unfinished">無法打開 %1 進行寫入</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="196"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="195"/> <source>Export Secret Key As A Paper Key</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="256"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="307"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="596"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="255"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="306"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="594"/> <source>WARNING: You are about to export your</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="257"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="308"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="597"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="256"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="307"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="595"/> <source>PRIVATE KEY</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="258"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="598"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="257"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="596"/> <source>This is NOT your Public Key, so <b>DO NOT</b> share it with anyone.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="261"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="260"/> <source>You are exporting a <b>minimum size</b> private key, which removes all signatures except for the latest self-signatures.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="263"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="262"/> <source>Do you <b>REALLY</b> want to proceed?</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="265"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="264"/> <source>Exporting Short Private Key</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="309"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="308"/> <source>This operation will export your <b>private key</b>, including both the main key and all subkeys, into an external file. This key is extremely sensitive, and anyone with access to it can impersonate you. DO NOT share this file with anyone!</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="315"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="608"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="314"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="606"/> <source>Are you <b>ABSOLUTELY SURE</b> you want to proceed?</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="318"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="317"/> <source>Exporting Private Key</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="390"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="389"/> <source>Key Upload Failed</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="406"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="405"/> <source>The following email addresses have status: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="418"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="417"/> <source>Could not parse status information.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="391"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="390"/> <source>Failed to upload public key to the server. Fingerprint: %1 Error: %2</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="156"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="155"/> <source>Publish Public Key to Key Server</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="164"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="163"/> <source>Refresh Public Key From Key Server</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="423"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="422"/> <source>Public Key Upload Successful</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="424"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="423"/> <source>The public key was successfully uploaded to the key server keys.openpgp.org. Fingerprint: %1 @@ -2839,169 +3002,169 @@ Note: For verification, you can find more information here: https://keys.openpgp <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="458"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="456"/> <source>0 -> No Reason.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="458"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="456"/> <source>1 -> This key is no more safe.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="459"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="457"/> <source>2 -> Key is outdated.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="459"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="457"/> <source>3 -> Key is no longer used</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="466"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="555"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="464"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="553"/> <source>Revocation Certificates</source> <translation type="unfinished">吊銷證書</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="477"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="475"/> <source>Generate revocation certificate</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="504"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="513"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="502"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="511"/> <source>Policy Auto</source> <translation type="unfinished">政策自動</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="504"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="515"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="502"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="513"/> <source>Policy Good</source> <translation type="unfinished">政策好</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="504"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="517"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="502"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="515"/> <source>Policy Bad</source> <translation type="unfinished">政策不好</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="505"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="519"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="503"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="517"/> <source>Policy Ask</source> <translation type="unfinished">政策諮詢</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="505"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="521"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="503"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="519"/> <source>Policy Unknown</source> <translation type="unfinished">政策未知</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="509"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="507"/> <source>Modify TOFU Policy(Default is Auto)</source> <translation type="unfinished">修改TOFU 政策(預設為自動)</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="510"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="508"/> <source>Policy for the Key Pair:</source> <translation type="unfinished">金鑰對策略:</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="527"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="525"/> <source>Not Successful</source> <translation type="unfinished">不成功</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="528"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="526"/> <source>Modify TOFU policy not successfully.</source> <translation type="unfinished">修改 TOFU 策略不成功。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="542"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="554"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="540"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="552"/> <source>Import Key Revocation Certificate</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="543"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="541"/> <source>You are about to import the</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="544"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="542"/> <source>REVOCATION CERTIFICATE</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="545"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="543"/> <source>A successful import will result in the key being irreversibly revoked.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="547"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="545"/> <source>Do you REALLY want to execute this operation?</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="563"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="572"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="581"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="652"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="698"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="706"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="714"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="732"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="561"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="570"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="579"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="650"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="696"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="704"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="712"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="730"/> <source>Error</source> <translation type="unfinished">錯誤</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="564"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="582"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="699"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="715"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="562"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="580"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="697"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="713"/> <source>Cannot open this file. Please make sure that this is a regular file and it's readable.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="573"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="571"/> <source>The target file is too large for a key revocation certificate.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="601"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="599"/> <source>A <b>PaperKey</b> is a human-readable printout of your private key, which can be used to recover your key if you lose access to your digital copy. </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="605"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="603"/> <source>Keep this paper copy in a safe and secure place, such as a fireproof safe or a trusted vault.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="611"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="609"/> <source>Exporting Private Key as a PaperKey</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="653"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="651"/> <source>An error occurred trying to generate Paper Key.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="690"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="688"/> <source>Paper Key File</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="707"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="705"/> <source>The target file is too large for a paper key keyring.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="733"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairOperaTab.cpp" line="731"/> <source>An error occurred trying to recover the Paper Key back to the private key.</source> <translation type="unfinished"></translation> </message> @@ -3090,7 +3253,7 @@ Note: For verification, you can find more information here: https://keys.openpgp </message> <message> <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="124"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="353"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="351"/> <source>Export Subkey</source> <translation type="unfinished"></translation> </message> @@ -3105,227 +3268,227 @@ Note: For verification, you can find more information here: https://keys.openpgp <translation type="unfinished">到期日期</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="209"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="359"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="208"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="355"/> <source>Primary Key</source> <translation type="unfinished">首要的關鍵</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="210"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="359"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="209"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="356"/> <source>Subkey</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="233"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="232"/> <source>Never Expire</source> <translation type="unfinished">永不過期</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="289"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="288"/> <source>Never Expires</source> <translation type="unfinished">永不過期</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="311"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="310"/> <source>Certificate</source> <translation type="unfinished">證書</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="313"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="312"/> <source>Encrypt</source> <translation type="unfinished">加密</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="314"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="313"/> <source>Sign</source> <translation type="unfinished">標誌</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="315"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="314"/> <source>Auth</source> <translation type="unfinished">認證</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="320"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="319"/> <source>Exists</source> <translation type="unfinished">存在</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="321"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="320"/> <source>Not Exists</source> <translation type="unfinished">不存在</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="324"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="361"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="323"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="358"/> <source>Yes</source> <translation type="unfinished">是的</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="324"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="361"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="323"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="358"/> <source>No</source> <translation type="unfinished">不</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="352"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="351"/> <source>Export Primary Key</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="375"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="372"/> <source>Edit Expire Date</source> <translation type="unfinished">編輯到期日</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="379"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="376"/> <source>Export</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="383"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="380"/> <source>Delete</source> <translation type="unfinished">刪除</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="387"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="384"/> <source>Revoke</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="440"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="437"/> <source>Exporting Subkey</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="441"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="438"/> <source>You are about to export a private subkey.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="442"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="439"/> <source>While subkeys are less critical than the primary key, they should still be handled with care.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="445"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="442"/> <source>Do you want to proceed with exporting this subkey?</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="472"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="469"/> <source>Export Key To File</source> <translation type="unfinished">將金鑰導出到文件</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="473"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="470"/> <source>Key Files</source> <translation type="unfinished">關鍵文件</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="478"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="475"/> <source>Export Error</source> <translation type="unfinished">導出錯誤</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="479"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="476"/> <source>Couldn't open %1 for writing</source> <translation type="unfinished">無法打開 %1 進行寫入</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="488"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="485"/> <source><h3>You are about to delete the subkey:</h3><br /><b>KeyID:</b> %1<br /><br />This action is irreversible. Please confirm.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="494"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="491"/> <source>Delete Subkey Confirmation</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="509"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="559"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="506"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="556"/> <source>Illegal Operation</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="510"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="507"/> <source>Cannot delete the primary key or an invalid subkey.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="518"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="515"/> <source>Operation Failed</source> <translation type="unfinished">手術失敗</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="519"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="516"/> <source>The selected subkey could not be deleted. Please check your permissions or try again.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="525"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="522"/> <source>Operation Successful</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="526"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="523"/> <source>The subkey with KeyID %1 has been successfully deleted.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="536"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="533"/> <source><h3>Revoke Subkey Confirmation</h3><br /><b>KeyID:</b> %1<br /><br />Revoking a subkey will make it permanently unusable. This action is <b>irreversible</b>.<br />Are you sure you want to revoke this subkey?</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="543"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="540"/> <source>Revoke Subkey</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="560"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="557"/> <source>Cannot revoke the primary key or an invalid subkey.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="565"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="562"/> <source>0 -> No Reason.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="565"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="562"/> <source>1 -> This key is no more safe.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="566"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="563"/> <source>2 -> Key is outdated.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="566"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="563"/> <source>3 -> Key is no longer used</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="577"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="574"/> <source>Revocation Failed</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="578"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="575"/> <source>Failed to revoke the subkey. Please try again.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="581"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="578"/> <source>Revocation Successful</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="582"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="579"/> <source>The subkey has been successfully revoked.</source> <translation type="unfinished"></translation> </message> @@ -3403,8 +3566,8 @@ Note: For verification, you can find more information here: https://keys.openpgp <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="355"/> <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="481"/> <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="490"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="535"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="564"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="536"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="565"/> <source>Invalid Operation</source> <translation type="unfinished">無效操作</translation> </message> @@ -3414,37 +3577,37 @@ Note: For verification, you can find more information here: https://keys.openpgp <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="542"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="543"/> <source><h3>Revoke UID Confirmation</h3><br /><b>UID:</b> %1<br /><br />Revoking a UID will make it permanently unusable. This action is <b>irreversible</b>.<br />Are you sure you want to revoke this UID?</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="570"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="571"/> <source>0 -> No Reason.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="570"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="571"/> <source>4 -> User ID is no longer valid.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="581"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="582"/> <source>Revocation Failed</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="582"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="583"/> <source>Failed to revoke the UID. Please try again.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="585"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="586"/> <source>Revocation Successful</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="586"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="587"/> <source>The UID has been successfully revoked.</source> <translation type="unfinished"></translation> </message> @@ -3475,7 +3638,7 @@ Note: For verification, you can find more information here: https://keys.openpgp </message> <message> <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="356"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="565"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="566"/> <source>Cannot delete the Primary UID.</source> <translation type="unfinished"></translation> </message> @@ -3518,7 +3681,7 @@ Note: For verification, you can find more information here: https://keys.openpgp </message> <message> <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="431"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="549"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="550"/> <source>Revoke UID</source> <translation type="unfinished"></translation> </message> @@ -3528,7 +3691,7 @@ Note: For verification, you can find more information here: https://keys.openpgp <translation type="unfinished">刪除 UID</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="536"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairUIDTab.cpp" line="537"/> <source>Please select one UID before doing this operation.</source> <translation type="unfinished">請在執行此操作前選擇一個 UID。</translation> </message> @@ -3561,139 +3724,139 @@ Note: For verification, you can find more information here: https://keys.openpgp <context> <name>GpgFrontend::UI::KeyServerImportDialog</name> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="57"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="56"/> <source>Close</source> <translation type="unfinished">關閉</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="60"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="59"/> <source>Import ALL</source> <translation type="unfinished">全部導入</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="64"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="63"/> <source>Search</source> <translation type="unfinished">搜索</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="69"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="68"/> <source>Search String</source> <translation type="unfinished">搜索字符串</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="69"/> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="73"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="68"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="72"/> <source>: </source> <translation type="unfinished">: </translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="73"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="72"/> <source>Key Server</source> <translation type="unfinished">金鑰伺服器</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="114"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="113"/> <source>Import Keys from key server</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="157"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="156"/> <source>UID</source> <translation type="unfinished">用戶識別碼</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="157"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="156"/> <source>Creation date</source> <translation type="unfinished">創立日期</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="157"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="156"/> <source>KeyID</source> <translation type="unfinished">金鑰 ID</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="157"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="156"/> <source>Tag</source> <translation type="unfinished">標籤</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="180"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="179"/> <source>Text is empty.</source> <translation type="unfinished">文字為空。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="223"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="222"/> <source>Not Key Found</source> <translation type="unfinished">未找到金鑰</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="226"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="225"/> <source>Timeout</source> <translation type="unfinished">暫停</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="229"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="228"/> <source>Key Server Not Found</source> <translation type="unfinished">未找到金鑰伺服器</translation> </message> <message> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="231"/> <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="232"/> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="233"/> <source>Connection Error</source> <translation type="unfinished">連線錯誤</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="242"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="241"/> <source>Too many responses from keyserver!</source> <translation type="unfinished">來自金鑰伺服器的響應太多!</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="254"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="253"/> <source>No keys found, input may be kexId, retrying search with 0x.</source> <translation type="unfinished">未找到鍵,輸入可能是 kexId,使用 0x 重試搜索。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="264"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="263"/> <source>No keys found containing the search string!</source> <translation type="unfinished">未找到包含搜索字符串的鍵!</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="271"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="270"/> <source>Insufficiently specific search string!</source> <translation type="unfinished">不夠具體的搜索字符串!</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="306"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="305"/> <source>revoked</source> <translation type="unfinished">撤銷</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="309"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="308"/> <source>disabled</source> <translation type="unfinished">殘疾</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="354"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="353"/> <source>%1 keys found. Double click a key to import it.</source> <translation type="unfinished">找到 %1 個金鑰。雙擊一個鍵來導入它。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="375"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="374"/> <source>Warning</source> <translation type="unfinished">警告</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="376"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="375"/> <source>Please select one KeyPair before doing this operation.</source> <translation type="unfinished">請在執行此操作前選擇一個 KeyPair。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="423"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="421"/> <source>Key Imported</source> <translation type="unfinished">鑰匙進口</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="436"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="434"/> <source>Processing ...</source> <translation type="unfinished"></translation> </message> @@ -3701,27 +3864,27 @@ Note: For verification, you can find more information here: https://keys.openpgp <context> <name>GpgFrontend::UI::KeyServerImportTask</name> <message> - <location filename="../../../../src/ui/thread/KeyServerImportTask.cpp" line="78"/> + <location filename="../../../../src/ui/thread/KeyServerImportTask.cpp" line="81"/> <source>Key not found in the Keyserver.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/thread/KeyServerImportTask.cpp" line="81"/> + <location filename="../../../../src/ui/thread/KeyServerImportTask.cpp" line="84"/> <source>Network connection timeout.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/thread/KeyServerImportTask.cpp" line="84"/> + <location filename="../../../../src/ui/thread/KeyServerImportTask.cpp" line="87"/> <source>Cannot resolve the address of target key server.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/thread/KeyServerImportTask.cpp" line="87"/> + <location filename="../../../../src/ui/thread/KeyServerImportTask.cpp" line="90"/> <source>General connection error occurred.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/thread/KeyServerImportTask.cpp" line="96"/> + <location filename="../../../../src/ui/thread/KeyServerImportTask.cpp" line="99"/> <source>Success</source> <translation type="unfinished">成功</translation> </message> @@ -3749,22 +3912,17 @@ Note: For verification, you can find more information here: https://keys.openpgp <translation type="unfinished">無法更新金鑰對的過期日期。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeySetExpireDateDialog.cpp" line="135"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeySetExpireDateDialog.cpp" line="124"/> <source>Modified Expiration Date (Local Time)</source> <translation type="unfinished">修改到期日期(當地時間)</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeySetExpireDateDialog.cpp" line="136"/> - <source>Tips: For the sake of security, the key is valid for up to two years. If you are an expert user, please unlock it for a longer time in the settings.</source> - <translation type="unfinished">溫馨提示:為安全起見,金鑰有效期最長為兩年。如果您是專家用戶,請在設定值中解鎖更長的時間。</translation> - </message> - <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeySetExpireDateDialog.cpp" line="140"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeySetExpireDateDialog.cpp" line="125"/> <source>No Expiration</source> <translation type="unfinished">無有效期</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeySetExpireDateDialog.cpp" line="141"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeySetExpireDateDialog.cpp" line="126"/> <source>Modified Expiration Date</source> <translation type="unfinished">修改到期日</translation> </message> @@ -3772,12 +3930,12 @@ Note: For verification, you can find more information here: https://keys.openpgp <context> <name>GpgFrontend::UI::KeyTable</name> <message> - <location filename="../../../../src/ui/widgets/KeyTable.cpp" line="83"/> + <location filename="../../../../src/ui/widgets/KeyTable.cpp" line="84"/> <source>Error</source> <translation type="unfinished">錯誤</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyTable.cpp" line="83"/> + <location filename="../../../../src/ui/widgets/KeyTable.cpp" line="84"/> <source>Key Not Found.</source> <translation type="unfinished">未找到金鑰。</translation> </message> @@ -3800,22 +3958,22 @@ Note: For verification, you can find more information here: https://keys.openpgp <translation type="unfinished">為金鑰的 UID 簽名</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyUIDSignDialog.cpp" line="121"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyUIDSignDialog.cpp" line="120"/> <source>Unsuccessful Operation</source> <translation type="unfinished">不成功的操作</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyUIDSignDialog.cpp" line="122"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyUIDSignDialog.cpp" line="121"/> <source>Signature operation failed for UID %1</source> <translation type="unfinished">UID %1 的簽名操作失敗</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyUIDSignDialog.cpp" line="126"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyUIDSignDialog.cpp" line="125"/> <source>Operation Complete</source> <translation type="unfinished">操作完成</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyUIDSignDialog.cpp" line="127"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyUIDSignDialog.cpp" line="126"/> <source>The signature operation of the UID is complete</source> <translation type="unfinished">UID的簽名操作完成</translation> </message> @@ -3823,52 +3981,52 @@ Note: For verification, you can find more information here: https://keys.openpgp <context> <name>GpgFrontend::UI::KeyUploadDialog</name> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="66"/> + <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="65"/> <source>Uploading Public Key</source> <translation type="unfinished">上傳公開金鑰</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="84"/> + <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="83"/> <source>Error</source> <translation type="unfinished">錯誤</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="85"/> + <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="84"/> <source>Unknown error occurred</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="155"/> + <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="154"/> <source>Key Not Found</source> <translation type="unfinished">未找到金鑰</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="158"/> + <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="157"/> <source>Timeout</source> <translation type="unfinished">暫停</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="161"/> + <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="160"/> <source>Key Server Not Found</source> <translation type="unfinished">未找到金鑰伺服器</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="164"/> + <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="163"/> <source>Connection Error</source> <translation type="unfinished">連線錯誤</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="166"/> + <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="165"/> <source>Upload Failed</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="170"/> + <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="169"/> <source>Upload Success</source> <translation type="unfinished">上傳成功</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="171"/> + <location filename="../../../../src/ui/dialog/import_export/KeyUploadDialog.cpp" line="170"/> <source>Upload Public Key Successfully</source> <translation type="unfinished">上傳公鑰成功</translation> </message> @@ -3982,22 +4140,22 @@ Note: For verification, you can find more information here: https://keys.openpgp <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsKeyServer.cpp" line="245"/> + <location filename="../../../../src/ui/dialog/settings/SettingsKeyServer.cpp" line="244"/> <source>Reachable</source> <translation type="unfinished">可達</translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsKeyServer.cpp" line="248"/> + <location filename="../../../../src/ui/dialog/settings/SettingsKeyServer.cpp" line="247"/> <source>Not Reachable</source> <translation type="unfinished">不能達到</translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsKeyServer.cpp" line="260"/> + <location filename="../../../../src/ui/dialog/settings/SettingsKeyServer.cpp" line="259"/> <source>Test Key Server Connection...</source> <translation type="unfinished">測試金鑰伺服器連線...</translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsKeyServer.cpp" line="261"/> + <location filename="../../../../src/ui/dialog/settings/SettingsKeyServer.cpp" line="260"/> <source>This test only tests the network connectivity of the key server. Passing the test does not mean that the key server is functionally available.</source> <translation type="unfinished">本測試僅測試金鑰伺服器的網絡連通性。通過測試並不意味著金鑰伺服器在功能上可用。</translation> </message> @@ -4005,329 +4163,154 @@ Note: For verification, you can find more information here: https://keys.openpgp <context> <name>GpgFrontend::UI::MainWindow</name> <message> - <location filename="../../../../src/ui/main_window/MainWindow.cpp" line="156"/> - <location filename="../../../../src/ui/main_window/MainWindow.cpp" line="159"/> + <location filename="../../../../src/ui/main_window/MainWindow.cpp" line="163"/> + <location filename="../../../../src/ui/main_window/MainWindow.cpp" line="166"/> <source>Critical error occur while loading GpgFrontend.</source> <translation type="unfinished">加載 GpgFrontend 時發生嚴重錯誤。</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindow.cpp" line="158"/> + <location filename="../../../../src/ui/main_window/MainWindow.cpp" line="165"/> <source>Loading Failed</source> <translation type="unfinished">加載失敗</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="50"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="75"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="103"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="156"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="176"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="201"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="229"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="282"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="302"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="319"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="336"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="355"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="372"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="389"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="409"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="471"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="492"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="528"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="546"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="571"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="616"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="661"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="690"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="735"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="781"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="810"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="818"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="845"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="910"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="919"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="947"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="988"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="77"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="135"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="202"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="239"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="278"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="320"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="440"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="491"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="111"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="137"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="159"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="177"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="192"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="207"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="224"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="106"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="143"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="522"/> <source>Error</source> <translation type="unfinished">錯誤</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="51"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="177"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="303"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="356"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="410"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="493"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="572"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="691"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="811"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="911"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="989"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="523"/> <source>Cannot read from file: %1</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="64"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="190"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="119"/> <source>The target file %1 already exists, do you need to overwrite it?</source> <translation type="unfinished">目標文件 %1 已經存在,是否需要覆蓋?</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="67"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="193"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="310"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="363"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="450"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="623"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="742"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="824"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="925"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="122"/> <source>Warning</source> <translation type="unfinished">警告</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="76"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="202"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="320"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="373"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="617"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="736"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="819"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="920"/> - <source>Cannot write to file: %1</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="85"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="211"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="55"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="50"/> <source>Symmetric Encryption</source> <translation type="unfinished">對稱加密</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="86"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="212"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="51"/> <source>No Key Selected. Do you want to encrypt with a symmetric cipher using a passphrase?</source> <translation type="unfinished">未選擇金鑰。您想使用密碼使用對稱密碼進行加密嗎?</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="92"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="64"/> - <source>Symmetrically Encrypting</source> - <translation type="unfinished">對稱加密</translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="104"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="157"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="230"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="283"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="337"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="390"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="472"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="547"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="662"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="782"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="846"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="948"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="78"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="136"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="203"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="240"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="279"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="321"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="441"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="492"/> - <source>Unknown error occurred</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="135"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="261"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="598"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="717"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="396"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="172"/> <source>Invalid KeyPair</source> <translation type="unfinished">無效的金鑰對</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="136"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="262"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="599"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="718"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="397"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="60"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="261"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="448"/> <source>The selected keypair cannot be used for encryption.</source> <translation type="unfinished">所選的金鑰對不能用於加密。</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="137"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="263"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="600"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="719"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="115"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="181"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="398"/> - <source>For example the Following Key:</source> - <translation type="unfinished">例如以下鍵:</translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="144"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="123"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="632"/> - <source>Encrypting</source> - <translation type="unfinished">加密</translation> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="107"/> + <source>Cannot read from the following files: + +%1</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="218"/> - <source>Archiving & Symmetrically Encrypting</source> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="144"/> + <source>Cannot write to the following files: + +%1</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="270"/> - <source>Archiving & Encrypting</source> - <translation type="unfinished"></translation> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="174"/> + <source>For example the Following Key:</source> + <translation type="unfinished">例如以下鍵:</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="311"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="364"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="624"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="743"/> - <source>The target file already exists, do you need to overwrite it?</source> - <translation type="unfinished">目標文件已經存在,是否需要覆蓋?</translation> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="196"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="323"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="654"/> + <source>Encrypting</source> + <translation type="unfinished">加密</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="325"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="229"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="231"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="358"/> <source>Decrypting</source> <translation type="unfinished">解密</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="378"/> - <source>Decrypting & Extrating</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="424"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="587"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="706"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="163"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="379"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="158"/> <source>No Key Checked</source> <translation type="unfinished">未檢查金鑰</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="425"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="588"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="707"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="164"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="159"/> <source>Please check the key in the key toolbox on the right.</source> <translation type="unfinished">請檢查右側鑰匙工具箱中的鑰匙。</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="432"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="112"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="178"/> - <source>Invalid Operation</source> - <translation type="unfinished">無效操作</translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="433"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="208"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="369"/> <source>The selected key contains a key that does not actually have a sign usage.</source> <translation type="unfinished">所選金鑰包含一個實際上沒有符號用法的金鑰。</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="435"/> - <source>for example the Following Key:</source> - <translation type="unfinished">例如以下鍵:</translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="451"/> - <source>The signature file "%1" exists, do you need to overwrite it?</source> - <translation type="unfinished">簽名文件“%1”存在,是否需要覆蓋?</translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="460"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="190"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="703"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="217"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="388"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="721"/> <source>Signing</source> <translation type="unfinished">簽約</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="513"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="414"/> <source>File to be Verified</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="514"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="415"/> <source>Please provide An ABSOLUTE Path If Data And Signature is COMBINED within a single file, KEEP THIS EMPTY: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="529"/> - <source>Please select the appropriate origin file or signature file. Ensure that both are in this directory.</source> - <translation type="unfinished">請選擇合適的源文件或簽名文件。確保兩者都在此目錄中。</translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="535"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="267"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="307"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="370"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="245"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="434"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="326"/> <source>Verifying</source> <translation type="unfinished">驗證</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="648"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="425"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="786"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="271"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="478"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="804"/> <source>Encrypting and Signing</source> <translation type="unfinished">加密和簽名</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="767"/> - <source>Archiving & Encrypting & Signing</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="825"/> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="926"/> - <source>The output file %1 already exists, do you need to overwrite it?</source> - <translation type="unfinished">輸出文件 %1 已經存在,是否需要覆蓋?</translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="834"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="479"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="850"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="285"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="512"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="868"/> <source>Decrypting and Verifying</source> <translation type="unfinished">解密和驗證</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="882"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="347"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="533"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="445"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="402"/> <source>Missing Keys</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="883"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="348"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="534"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="446"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="403"/> <source>Some signatures cannot be verified because the corresponding keys are missing. The following fingerprints are missing: @@ -4337,216 +4320,230 @@ Would you like to fetch these keys from the key server?</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="898"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="363"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="548"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="462"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="417"/> <source>Verification Incomplete</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="899"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="364"/> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="549"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="463"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="418"/> <source>Verification was incomplete due to missing keys. You can manually import the keys later.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="935"/> - <source>Decrypting & Verifying & Extracting</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="996"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="529"/> <source>EML File Too Large</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="997"/> + <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="530"/> <source>The EML file "%1" is larger than 32MB and will not be opened.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="56"/> - <source>No Key Checked. Do you want to encrypt with a symmetric cipher using a passphrase?</source> - <translation type="unfinished">未檢查金鑰。您想使用密碼短語使用對稱密碼進行加密嗎?</translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="113"/> - <source>The selected key contains a key that does not actually have a encrypt usage.</source> - <translation type="unfinished">所選金鑰包含一個實際上沒有加密用途的金鑰。</translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="179"/> - <source>The selected key contains a key that does not actually have a signature usage.</source> - <translation type="unfinished">所選金鑰包含一個實際上沒有簽名用法的金鑰。</translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/MainWindowGpgOperaFunction.cpp" line="380"/> - <source>Please check some key in the key toolbox on the right.</source> - <translation type="unfinished">請檢查右側鑰匙工具箱中的一些鑰匙。</translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="111"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="137"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="159"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="177"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="192"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="207"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="224"/> - <source>Key Not Found.</source> - <translation type="unfinished">未找到金鑰。</translation> - </message> - <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="116"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="106"/> <source>Localize</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="119"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="109"/> <source>UTC</source> <translation type="unfinished">世界標準時間</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="142"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="120"/> <source>Local Time</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="324"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="274"/> <source>This version(%1) may have been withdrawn by the developer due to serious problems. Please stop using this version immediately and download the latest stable version (%2) on the Github Releases Page.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="339"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="288"/> <source>This may be a BETA Version (Latest Stable Version: %1).</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="345"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="301"/> <source>Commit Hash Mismatch</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="346"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="302"/> <source>The current version's commit hash does not match the official release. This may indicate a modified or unofficial build. For security reasons, please verify your installation or download the official release from the Github Releases Page.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="478"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="492"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="494"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="496"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="573"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="590"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="592"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="594"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="880"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="896"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="899"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="902"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="432"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="446"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="448"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="450"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="595"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="612"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="614"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="616"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="898"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="914"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="917"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="920"/> <source>None</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="486"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="584"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="889"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="440"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="606"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="907"/> <source>From</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="487"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="489"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="585"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="587"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="890"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="893"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="441"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="443"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="607"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="609"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="908"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="911"/> <source>Unknown</source> <translation type="unfinished">未知</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="489"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="587"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="892"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="443"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="609"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="910"/> <source>To</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="491"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="589"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="895"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="445"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="611"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="913"/> <source>Subject</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="494"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="592"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="898"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="448"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="614"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="916"/> <source>CC</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="496"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="594"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="901"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="450"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="616"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="919"/> <source>BCC</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="497"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="595"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="904"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="451"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="617"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="922"/> <source>Date</source> <translation type="unfinished">日期</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="502"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="909"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="456"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="927"/> <source>Signed EML Data Hash (SHA1)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="505"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="913"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="459"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="931"/> <source>Message Integrity Check Algorithm</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="625"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="689"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="755"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="772"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="517"/> + <source>FAIL</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="521"/> + <source>OK</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="524"/> + <source>WARN</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="535"/> + <source>Summary Report</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="536"/> + <source>Total Operations: %1 +</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="537"/> + <source>Successful: %1 +</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="538"/> + <source>Warnings: %1 +</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="539"/> + <source>Failures: %1 +</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="543"/> + <source>Failed Objects: %1 +</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="548"/> + <source>Warning Objects: %1 +</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="647"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="707"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="773"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="790"/> <source>No Key Selected</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="626"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="756"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="648"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="774"/> <source>Please select a key for encrypt the EML.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="690"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="773"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="708"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="791"/> <source>Please select a key for signing the EML.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="695"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="778"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="713"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="796"/> <source>Multiple Keys Selected</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="696"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="779"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="714"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="797"/> <source>Please select only one key to sign the EML.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="959"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="976"/> <source># EML Data Error The provided EML data does not conform to RFC 3156 standards and cannot be processed. @@ -4564,7 +4561,7 @@ After correcting the EML data, try the operation again.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="985"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="1002"/> <source># Email Operation Error An error occurred during the email operation. The process could not be completed. @@ -4588,17 +4585,19 @@ If the issue persists, consider seeking technical support or consulting the docu <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="319"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="262"/> <source>GpgFrontend Upgradeable (New Version: %1).</source> <translation type="unfinished">GpgFrontend 可升級(新版本:%1)。</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="297"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="269"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="296"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="296"/> <source>Update</source> <translation type="unfinished">更新</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="323"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotFunction.cpp" line="273"/> <source>Withdrawn Version</source> <translation type="unfinished">撤回版</translation> </message> @@ -4864,8 +4863,8 @@ If the issue persists, consider seeking technical support or consulting the docu </message> <message> <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="184"/> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="402"/> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="487"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="401"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="486"/> <source>File</source> <translation type="unfinished">文件</translation> </message> @@ -4885,406 +4884,406 @@ If the issue persists, consider seeking technical support or consulting the docu <translation type="unfinished">從剪貼板導入新金鑰</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="208"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="207"/> <source>Keyserver</source> <translation type="unfinished">金鑰伺服器</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="210"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="209"/> <source>Import New Key From Keyserver</source> <translation type="unfinished">從金鑰伺服器導入新金鑰</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="218"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="217"/> <source>Editor</source> <translation type="unfinished">編輯</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="219"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="218"/> <source>Import New Key From Editor</source> <translation type="unfinished">從編輯器導入新金鑰</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="224"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="223"/> <source>Manage Keys</source> <translation type="unfinished">管理金鑰</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="225"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="224"/> <source>Open Key Management</source> <translation type="unfinished">開放式金鑰管理</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="230"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="229"/> <source>Clear Password Cache</source> <translation type="unfinished">清除密碼緩存</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="231"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="230"/> <source>Clear Password Cache of GnuPG</source> <translation type="unfinished">清除 GnuPG 的密碼緩存</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="459"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="458"/> <source>Advanced</source> <translation type="unfinished">先進的</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="600"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="594"/> <source>Status Panel</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="346"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="360"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="378"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="309"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="323"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="338"/> <source>Successful Operation</source> <translation type="unfinished">成功運作</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="347"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="310"/> <source>Clear password cache successfully</source> <translation type="unfinished">清除密碼緩存成功</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="349"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="364"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="382"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="312"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="327"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="342"/> <source>Failed Operation</source> <translation type="unfinished">操作失敗</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="350"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="313"/> <source>Failed to clear password cache of GnuPG</source> <translation type="unfinished">無法清除 GnuPG 的密碼緩存</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="236"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="235"/> <source>Reload All Components</source> <translation type="unfinished">重新加載所有組件</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="237"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="236"/> <source>Reload All GnuPG's Components</source> <translation type="unfinished">重新加載所有 GnuPG 的組件</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="361"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="324"/> <source>Reload all the GnuPG's components successfully</source> <translation type="unfinished">成功重新加載所有 GnuPG 組件</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="365"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="328"/> <source>Failed to reload all or one of the GnuPG's component(s)</source> <translation type="unfinished">未能重新加載所有或其中一個 GnuPG 組件</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="242"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="241"/> <source>Restart All Components</source> <translation type="unfinished">重新啟動所有組件</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="243"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="242"/> <source>Restart All GnuPG's Components</source> <translation type="unfinished">重新啟動所有 GnuPG 的組件</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="379"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="339"/> <source>Restart all the GnuPG's components successfully</source> <translation type="unfinished">成功重啟所有 GnuPG 組件</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="383"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="343"/> <source>Failed to restart all or one of the GnuPG's component(s)</source> <translation type="unfinished">無法重新啟動所有或其中一個 GnuPG 組件</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="248"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="247"/> <source>Open GnuPG Controller</source> <translation type="unfinished">打開 GnuPG 控制器</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="249"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="248"/> <source>Open GnuPG Controller Dialog</source> <translation type="unfinished">打開 GnuPG 控制器對話框</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="254"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="253"/> <source>Open Module Controller</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="255"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="254"/> <source>Open Module Controller Dialog</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="264"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="263"/> <source>New E-Mail</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="265"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="264"/> <source>Create A New E-Mail Tab</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="273"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="272"/> <source>About</source> <translation type="unfinished">關於</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="274"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="273"/> <source>Show the application's About box</source> <translation type="unfinished">顯示應用程序的關於框</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="280"/> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="283"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="279"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="282"/> <source>GnuPG</source> <translation type="unfinished">GnuPG</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="281"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="280"/> <source>Information about Gnupg</source> <translation type="unfinished">關於 Gnupg 的信息</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="287"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="286"/> <source>Translate</source> <translation type="unfinished">翻譯</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="288"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="287"/> <source>Information about translation</source> <translation type="unfinished">翻譯信息</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="290"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="289"/> <source>Translators</source> <translation type="unfinished">翻譯員</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="294"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="293"/> <source>Check for Updates</source> <translation type="unfinished">檢查更新</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="295"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="294"/> <source>Check for updates</source> <translation type="unfinished">檢查更新</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="301"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="300"/> <source>Open Wizard</source> <translation type="unfinished">打開嚮導</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="302"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="301"/> <source>Open the wizard</source> <translation type="unfinished">打開嚮導</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="307"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="306"/> <source>Append Public Key to Editor</source> <translation type="unfinished">將公鑰附加到編輯器</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="308"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="307"/> <source>Append selected Keypair's Public Key to Editor</source> <translation type="unfinished">將選定的金鑰對的公鑰附加到編輯器</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="313"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="312"/> <source>Append Create DateTime to Editor</source> <translation type="unfinished">將創建日期時間附加到編輯器</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="314"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="313"/> <source>Append selected Key's creation date and time to Editor</source> <translation type="unfinished">將所選金鑰的創建日期和時間附加到編輯器</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="319"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="318"/> <source>Append Expire DateTime to Editor</source> <translation type="unfinished">將過期日期時間附加到編輯器</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="320"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="319"/> <source>Append selected Key's expiration date and time to Editor</source> <translation type="unfinished">將所選金鑰的到期日期和時間附加到編輯器</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="325"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="324"/> <source>Append Fingerprint to Editor</source> <translation type="unfinished">將指紋附加到編輯器</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="326"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="325"/> <source>Append selected Key's Fingerprint to Editor</source> <translation type="unfinished">將所選金鑰的指紋附加到編輯器</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="331"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="330"/> <source>Copy Email</source> <translation type="unfinished">複製電子郵件</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="332"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="331"/> <source>Copy selected Keypair's to clipboard</source> <translation type="unfinished">將選定的金鑰對複製到剪貼板</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="337"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="336"/> <source>Copy Default UID</source> <translation type="unfinished">複製預設 UID</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="338"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="337"/> <source>Copy selected Keypair's default UID to clipboard</source> <translation type="unfinished">將所選金鑰對的預設 UID 複製到剪貼板</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="343"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="342"/> <source>Copy Key ID</source> <translation type="unfinished">複製金鑰 ID</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="344"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="343"/> <source>Copy selected Keypair's ID to clipboard</source> <translation type="unfinished">將所選金鑰對的 ID 複製到剪貼板</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="349"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="348"/> <source>Show Key Details</source> <translation type="unfinished">顯示關鍵細節</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="350"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="349"/> <source>Show Details for this Key</source> <translation type="unfinished">顯示此鍵的詳細信息</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="355"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="354"/> <source>Add To Favourite</source> <translation type="unfinished">加入到收藏夾</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="356"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="355"/> <source>Add this key to Favourite Table</source> <translation type="unfinished">將此鍵加入到收藏夾表</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="362"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="361"/> <source>Remove From Favourite</source> <translation type="unfinished">從收藏夾中刪除</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="363"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="362"/> <source>Remove this key from Favourite Table</source> <translation type="unfinished">從收藏表中刪除此鍵</translation> </message> <message> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="369"/> <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="370"/> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="371"/> <source>Set Owner Trust Level</source> <translation type="unfinished">設定所有者信任級別</translation> </message> <message> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="389"/> <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="390"/> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="391"/> <source>Remove PGP Header</source> <translation type="unfinished">刪除 PGP 標頭</translation> </message> <message> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="394"/> <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="395"/> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="396"/> <source>Add PGP Header</source> <translation type="unfinished">加入 PGP 標頭</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="420"/> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="514"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="419"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="508"/> <source>Edit</source> <translation type="unfinished">編輯</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="440"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="439"/> <source>Crypt</source> <translation type="unfinished">地穴</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="450"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="449"/> <source>Keys</source> <translation type="unfinished">鑰匙</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="451"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="450"/> <source>Import Key</source> <translation type="unfinished">導入金鑰</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="467"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="466"/> <source>View</source> <translation type="unfinished">看法</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="469"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="468"/> <source>Help</source> <translation type="unfinished">幫助</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="499"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="498"/> <source>Operations</source> <translation type="unfinished">運作中</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="509"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="503"/> <source>Key</source> <translation type="unfinished">鑰匙</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="522"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="516"/> <source>Special Edit</source> <translation type="unfinished">特別編輯</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="536"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="530"/> <source>Import key from...</source> <translation type="unfinished">匯入金鑰位置...</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="537"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="531"/> <source>Import key</source> <translation type="unfinished">導入金鑰</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="553"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="547"/> <source>Ready</source> <translation type="unfinished">準備好</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="560"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="554"/> <source>Key ToolBox</source> <translation type="unfinished">鑰匙工具箱</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="568"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="562"/> <source>Default</source> <translation type="unfinished">預設</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="575"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="569"/> <source>Favourite</source> <translation type="unfinished">最喜歡的</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="582"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="576"/> <source>Only Public Key</source> <translation type="unfinished">只有公鑰</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="589"/> + <location filename="../../../../src/ui/main_window/MainWindowUI.cpp" line="583"/> <source>Has Private Key</source> <translation type="unfinished">有私鑰</translation> </message> @@ -5333,89 +5332,89 @@ If the issue persists, consider seeking technical support or consulting the docu </message> <message> <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="84"/> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="195"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="192"/> <source>Enable Auto Activate</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="144"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="141"/> <source>BASIC INFO</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="146"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="143"/> <source>ID</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="148"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="145"/> <source>Version</source> <translation type="unfinished">版本</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="150"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="147"/> <source>SDK Version</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="152"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="149"/> <source>Qt ENV Version</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="154"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="151"/> <source>Hash</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="155"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="152"/> <source>Path</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="159"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="156"/> <source>Auto Activate</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="160"/> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="162"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="157"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="159"/> <source>True</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="160"/> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="162"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="157"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="159"/> <source>False</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="161"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="158"/> <source>Active</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="166"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="163"/> <source>METADATA</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="182"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="179"/> <source>Listening Event</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="191"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="188"/> <source>Deactivate</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="192"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="189"/> <source>Activate</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="194"/> + <location filename="../../../../src/ui/dialog/controller/ModuleControllerDialog.cpp" line="191"/> <source>Disable Auto Activate</source> <translation type="unfinished"></translation> </message> @@ -5494,42 +5493,42 @@ If the issue persists, consider seeking technical support or consulting the docu <translation type="unfinished">提示: 選項變更僅在應用程式重新啟動後才會生效。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsNetwork.cpp" line="173"/> + <location filename="../../../../src/ui/dialog/settings/SettingsNetwork.cpp" line="172"/> <source>Test Server Url Accessibility</source> <translation type="unfinished">測試伺服器 Url 存取可用性</translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsNetwork.cpp" line="174"/> + <location filename="../../../../src/ui/dialog/settings/SettingsNetwork.cpp" line="173"/> <source>Server Url</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsNetwork.cpp" line="184"/> + <location filename="../../../../src/ui/dialog/settings/SettingsNetwork.cpp" line="183"/> <source>Success</source> <translation type="unfinished">成功</translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsNetwork.cpp" line="185"/> + <location filename="../../../../src/ui/dialog/settings/SettingsNetwork.cpp" line="184"/> <source>Successfully connect to the target server through the proxy server.</source> <translation type="unfinished">成功連線經由代理伺服器至目標伺服器</translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsNetwork.cpp" line="189"/> + <location filename="../../../../src/ui/dialog/settings/SettingsNetwork.cpp" line="188"/> <source>Failed</source> <translation type="unfinished">失敗</translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsNetwork.cpp" line="190"/> + <location filename="../../../../src/ui/dialog/settings/SettingsNetwork.cpp" line="189"/> <source>Unable to connect to the target server through the proxy server. Proxy settings may be invalid.</source> <translation type="unfinished">無法連線經由代理伺服器至目標伺服器。代理伺服器設定值可能為無效的。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsNetwork.cpp" line="200"/> + <location filename="../../../../src/ui/dialog/settings/SettingsNetwork.cpp" line="199"/> <source>Test Proxy Server Connection...</source> <translation type="unfinished">測試代理伺服器連線...</translation> </message> <message> - <location filename="../../../../src/ui/dialog/settings/SettingsNetwork.cpp" line="201"/> + <location filename="../../../../src/ui/dialog/settings/SettingsNetwork.cpp" line="200"/> <source>Is using your proxy settings to access the url. Note that this test operation will apply your proxy settings to the entire software.</source> <translation type="unfinished">正在使用您的代理伺服器設定值存取 url。請注意,此測試操作會將您的代理伺服器設定值應用於整個軟件。</translation> </message> @@ -5713,27 +5712,27 @@ If the issue persists, consider seeking technical support or consulting the docu <translation type="unfinished">取消</translation> </message> <message> - <location filename="../../../../src/ui/dialog/SignersPicker.cpp" line="52"/> + <location filename="../../../../src/ui/dialog/SignersPicker.cpp" line="53"/> <source>Signers</source> <translation type="unfinished">簽名者</translation> </message> <message> - <location filename="../../../../src/ui/dialog/SignersPicker.cpp" line="60"/> + <location filename="../../../../src/ui/dialog/SignersPicker.cpp" line="58"/> <source>Select Signer(s)</source> <translation type="unfinished">選擇簽名者</translation> </message> <message> - <location filename="../../../../src/ui/dialog/SignersPicker.cpp" line="63"/> + <location filename="../../../../src/ui/dialog/SignersPicker.cpp" line="61"/> <source>Please select one or more private keys you use for signing.</source> <translation type="unfinished">請選擇您用於簽名的一個或多個私鑰。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/SignersPicker.cpp" line="64"/> + <location filename="../../../../src/ui/dialog/SignersPicker.cpp" line="62"/> <source>If no key is selected, the default key will be used for signing.</source> <translation type="unfinished">如果未選擇金鑰,則將使用預設金鑰進行簽名。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/SignersPicker.cpp" line="74"/> + <location filename="../../../../src/ui/dialog/SignersPicker.cpp" line="72"/> <source>Signers Picker</source> <translation type="unfinished"></translation> </message> @@ -5741,7 +5740,7 @@ If the issue persists, consider seeking technical support or consulting the docu <context> <name>GpgFrontend::UI::SubkeyGenerateDialog</name> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="72"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="82"/> <source>Tipps: if the key pair has a passphrase, the subkey's passphrase must be equal to it.</source> <translation type="unfinished">提示:如果金鑰對有密碼,則子金鑰的密碼必須與其相等。</translation> </message> @@ -5751,77 +5750,72 @@ If the issue persists, consider seeking technical support or consulting the docu <translation type="unfinished">生成新子金鑰</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="98"/> - <source>Key Usage</source> - <translation type="unfinished">金鑰使用</translation> - </message> - <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="100"/> - <source>Encryption</source> - <translation type="unfinished">加密</translation> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="65"/> + <source>Authentication</source> + <translation type="unfinished">驗證</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="103"/> - <source>Signing</source> - <translation type="unfinished">簽約</translation> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="59"/> + <source>Algorithm</source> + <translation type="unfinished">算法</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="106"/> - <source>Certification</source> - <translation type="unfinished">認證</translation> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="60"/> + <source>Key Length</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="109"/> - <source>Authentication</source> - <translation type="unfinished">驗證</translation> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="61"/> + <source>Expire Date</source> + <translation type="unfinished">到期日期</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="153"/> - <source>Key Type</source> - <translation type="unfinished">鑰匙類型</translation> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="62"/> + <source>Usage</source> + <translation type="unfinished">用法</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="154"/> - <source>KeySize (in Bit)</source> - <translation type="unfinished">金鑰大小(以位為單位)</translation> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="63"/> + <source>Encrypt</source> + <translation type="unfinished">加密</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="155"/> - <source>Expiration Date</source> - <translation type="unfinished">截止日期</translation> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="64"/> + <source>Sign</source> + <translation type="unfinished">標誌</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="156"/> - <source>Never Expire</source> - <translation type="unfinished">永不過期</translation> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="66"/> + <source>Non Expired</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="157"/> - <source>Non Pass Phrase</source> - <translation type="unfinished">不合格短語</translation> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="67"/> + <source>No Passphrase</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="167"/> - <source>Basic Information</source> - <translation type="unfinished">基本信息</translation> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="183"/> + <source>Please give a valid subkey algorithm.</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="280"/> - <source>Expiration time no more than 2 years.</source> - <translation type="unfinished">有效期不超過2年。</translation> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="192"/> + <source>Time to subkey expiration must not be less than 120 seconds.</source> + <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="295"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="204"/> <source>Generating</source> <translation type="unfinished">生成</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="306"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="215"/> <source>Error</source> <translation type="unfinished">錯誤</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="307"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="216"/> <source>Unknown error occurred</source> <translation type="unfinished"></translation> </message> @@ -5872,21 +5866,21 @@ If the issue persists, consider seeking technical support or consulting the docu <context> <name>GpgFrontend::UI::TextEdit</name> <message> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="73"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="74"/> <source>Open Directory</source> <translation type="unfinished">打開目錄</translation> </message> <message> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="182"/> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="196"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="183"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="197"/> <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="449"/> <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="486"/> <source>Warning</source> <translation type="unfinished">警告</translation> </message> <message> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="183"/> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="197"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="184"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="198"/> <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="450"/> <source>Cannot read file %1: %2.</source> @@ -5894,69 +5888,69 @@ If the issue persists, consider seeking technical support or consulting the docu %2。</translation> </message> <message> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="120"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="121"/> <source>Open file</source> <translation type="unfinished">打開文件</translation> </message> <message> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="83"/> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="91"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="84"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="92"/> <source>Error</source> <translation type="unfinished">錯誤</translation> </message> <message> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="84"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="85"/> <source>Cannot open this file. Please make sure that this is a regular file and it's readable.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="92"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="93"/> <source>Cannot open this file. The file is TOO LARGE (>1MB) for GpgFrontend Text Editor.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="100"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="101"/> <source>File Open Error</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="101"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="102"/> <source>The file "%1" could not be opened.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="109"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="110"/> <source>Binary File Detected</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="110"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="111"/> <source>The file "%1" appears to be a binary file and will not be opened.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="232"/> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="248"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="233"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="249"/> <source>Save file</source> <translation type="unfinished">保存存檔</translation> </message> <message> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="309"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="310"/> <source>Unsaved document</source> <translation type="unfinished">未保存的文件</translation> </message> <message> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="310"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="311"/> <source>The document "%1" has been modified. Do you want to save your changes?</source> <translation type="unfinished">文檔“%1”已被修改。是否要保存更改?</translation> </message> <message> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="313"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="314"/> <source>Note:</source> <translation type="unfinished">筆記:</translation> </message> <message> - <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="314"/> + <location filename="../../../../src/ui/widgets/TextEdit.cpp" line="315"/> <source>If you don't save these files, all changes are lost.</source> <translation type="unfinished">如果您不保存這些文件,所有更改都將丟失。</translation> </message> @@ -6023,9 +6017,9 @@ If the issue persists, consider seeking technical support or consulting the docu %2。</translation> </message> <message> - <location filename="../../../../src/ui/widgets/TextEditTabWidget.cpp" line="254"/> - <location filename="../../../../src/ui/widgets/TextEditTabWidget.cpp" line="268"/> - <location filename="../../../../src/ui/widgets/TextEditTabWidget.cpp" line="284"/> + <location filename="../../../../src/ui/widgets/TextEditTabWidget.cpp" line="251"/> + <location filename="../../../../src/ui/widgets/TextEditTabWidget.cpp" line="265"/> + <location filename="../../../../src/ui/widgets/TextEditTabWidget.cpp" line="281"/> <source>untitled</source> <translation type="unfinished">無標題</translation> </message> @@ -6075,154 +6069,154 @@ If the issue persists, consider seeking technical support or consulting the docu <context> <name>GpgFrontend::UI::VerifyKeyDetailBox</name> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="57"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="56"/> <source>Import from keyserver</source> <translation type="unfinished">從金鑰伺服器導入</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="62"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="61"/> <source>Key not present with id 0x</source> <translation type="unfinished">不存在 ID 為 0x 的金鑰</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="66"/> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="91"/> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="106"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="65"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="90"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="105"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="120"/> <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="121"/> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="122"/> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="137"/> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="152"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="136"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="151"/> <source>Status</source> <translation type="unfinished">狀態</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="66"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="65"/> <source>:</source> <translation type="unfinished">:</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="68"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="67"/> <source>Key not present in key list</source> <translation type="unfinished">金鑰不在金鑰列表中</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="76"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="75"/> <source>A Signature</source> <translation type="unfinished">一個簽名</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="81"/> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="96"/> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="111"/> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="127"/> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="142"/> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="157"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="80"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="95"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="110"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="126"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="141"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="156"/> <source>Key Information is NOT Available</source> <translation type="unfinished">關鍵信息不可用</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="83"/> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="98"/> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="113"/> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="129"/> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="144"/> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="159"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="82"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="97"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="112"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="128"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="143"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="158"/> <source>Fingerprint</source> <translation type="unfinished">指紋</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="91"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="90"/> <source>Cert Revoked</source> <translation type="unfinished">證書吊銷</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="106"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="105"/> <source>Signature Expired</source> <translation type="unfinished">簽名過期</translation> </message> <message> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="120"/> <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="121"/> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="122"/> <source>Key Expired</source> <translation type="unfinished">金鑰過期</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="137"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="136"/> <source>General Error</source> <translation type="unfinished">一般錯誤</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="152"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="151"/> <source>Unknown Error </source> <translation type="unfinished">異常錯誤 </translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="182"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="181"/> <source>Signer Name</source> <translation type="unfinished">簽名者姓名</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="183"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="182"/> <source>Signer Email</source> <translation type="unfinished">簽名者電子郵件</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="184"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="183"/> <source>Key's Fingerprint</source> <translation type="unfinished">鑰匙的指紋</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="185"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="184"/> <source>Valid</source> <translation type="unfinished">有效的</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="186"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="185"/> <source>Flags</source> <translation type="unfinished">旗幟</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="193"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="192"/> <source>Fully Valid</source> <translation type="unfinished">完全有效</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="195"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="194"/> <source>NOT Fully Valid</source> <translation type="unfinished">不完全有效</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="202"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="201"/> <source>Good</source> <translation type="unfinished">好的</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="205"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="204"/> <source>Bad</source> <translation type="unfinished">壞的</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="208"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="207"/> <source>Expired</source> <translation type="unfinished">已到期</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="211"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="210"/> <source>Missing Key</source> <translation type="unfinished">缺少鑰匙</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="214"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="213"/> <source>Revoked Key</source> <translation type="unfinished">撤銷金鑰</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="217"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="216"/> <source>Expired Key</source> <translation type="unfinished">過期金鑰</translation> </message> <message> - <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="220"/> + <location filename="../../../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="219"/> <source>Missing CRL</source> <translation type="unfinished">缺少 CRL</translation> </message> @@ -6230,7 +6224,7 @@ If the issue persists, consider seeking technical support or consulting the docu <context> <name>GpgFrontend::UI::Wizard</name> <message> - <location filename="../../../../src/ui/dialog/Wizard.cpp" line="43"/> + <location filename="../../../../src/ui/dialog/Wizard.cpp" line="45"/> <source>First Start Wizard</source> <translation type="unfinished">首次啟動嚮導</translation> </message> @@ -6238,32 +6232,32 @@ If the issue persists, consider seeking technical support or consulting the docu <context> <name>GpgKey</name> <message> - <location filename="../../../../src/core/model/GpgKey.cpp" line="91"/> + <location filename="../../../../src/core/model/GpgKey.cpp" line="89"/> <source>Unknown</source> <translation type="unfinished">未知</translation> </message> <message> - <location filename="../../../../src/core/model/GpgKey.cpp" line="93"/> + <location filename="../../../../src/core/model/GpgKey.cpp" line="91"/> <source>Undefined</source> <translation type="unfinished">不明確的</translation> </message> <message> - <location filename="../../../../src/core/model/GpgKey.cpp" line="95"/> + <location filename="../../../../src/core/model/GpgKey.cpp" line="93"/> <source>Never</source> <translation type="unfinished">絕不</translation> </message> <message> - <location filename="../../../../src/core/model/GpgKey.cpp" line="97"/> + <location filename="../../../../src/core/model/GpgKey.cpp" line="95"/> <source>Marginal</source> <translation type="unfinished">邊緣</translation> </message> <message> - <location filename="../../../../src/core/model/GpgKey.cpp" line="99"/> + <location filename="../../../../src/core/model/GpgKey.cpp" line="97"/> <source>Full</source> <translation type="unfinished">滿的</translation> </message> <message> - <location filename="../../../../src/core/model/GpgKey.cpp" line="101"/> + <location filename="../../../../src/core/model/GpgKey.cpp" line="99"/> <source>Ultimate</source> <translation type="unfinished">最終的</translation> </message> @@ -6281,17 +6275,12 @@ If the issue persists, consider seeking technical support or consulting the docu <translation type="unfinished">如果此過程太慢,請在 gnupg 組態檔案中適當設定金鑰伺服器位址(取決於您所在國家或地區的網絡情況)。</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="67"/> - <source>Show Verify Details</source> - <translation type="unfinished">顯示驗證詳細信息</translation> - </message> - <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="75"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="64"/> <source>Public key not found locally</source> <translation type="unfinished">本地未找到公鑰</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="76"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="65"/> <source>There is no target public key content in local for GpgFrontend to gather enough information about this Signature. Do you want to import the public key from Keyserver now?</source> <translation type="unfinished">本地沒有目標公鑰內容供 GpgFrontend 收集有關此簽名的足夠信息。現在要從 Keyserver 導入公鑰嗎?</translation> </message> @@ -6349,42 +6338,47 @@ If the issue persists, consider seeking technical support or consulting the docu <translation type="unfinished">成功</translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="578"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="555"/> <source>Sync All Public Key</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/widgets/KeyList.cpp" line="579"/> + <location filename="../../../../src/ui/widgets/KeyList.cpp" line="556"/> <source>You have not checked any public keys that you want to synchronize, do you want to synchronize all local public keys from the key server?</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/core/GpgCoreInit.cpp" line="398"/> + <location filename="../../../../src/core/GpgCoreInit.cpp" line="422"/> <source>Cannot Find GpgConf</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/core/GpgCoreInit.cpp" line="406"/> + <location filename="../../../../src/core/GpgCoreInit.cpp" line="430"/> <source>Cannot Find GnuPG</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/core/GpgCoreInit.cpp" line="421"/> - <source>Cannot Find Home Path</source> + <location filename="../../../../src/core/GpgCoreInit.cpp" line="405"/> + <source>Cannot get Infos from GpgConf</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/core/GpgCoreInit.cpp" line="445"/> + <source>Cannot Find Default Home Path</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/core/GpgCoreInit.cpp" line="473"/> + <location filename="../../../../src/core/GpgCoreInit.cpp" line="471"/> <source>GpgME Initiation Failed</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/core/GpgCoreInit.cpp" line="547"/> + <location filename="../../../../src/core/GpgCoreInit.cpp" line="545"/> <source>GpgME Default Context Initiation Failed</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/core/GpgCoreInit.cpp" line="558"/> + <location filename="../../../../src/core/GpgCoreInit.cpp" line="556"/> <source>Gpg Default Key Database Initiation Failed</source> <translation type="unfinished"></translation> </message> diff --git a/src/GpgFrontendContext.h b/src/GpgFrontendContext.h index ae3177aa..507ee051 100644 --- a/src/GpgFrontendContext.h +++ b/src/GpgFrontendContext.h @@ -32,6 +32,8 @@ #include <memory> +#include "core/GpgConstants.h" + namespace GpgFrontend { struct GpgFrontendContext; @@ -46,6 +48,8 @@ struct GpgFrontendContext { bool gather_external_gnupg_info; bool unit_test_mode; + int rtn = GpgFrontend::kCrashCode; + /** * @brief Construct a new Gpg Frontend Context object * diff --git a/src/app.cpp b/src/app.cpp index 0804d64e..6d28ac6b 100644 --- a/src/app.cpp +++ b/src/app.cpp @@ -28,8 +28,7 @@ #include "GpgFrontendContext.h" #include "core/GpgConstants.h" -#include "core/GpgCoreInit.h" -#include "core/module/ModuleInit.h" +#include "core/function/CacheManager.h" #include "ui/GpgFrontendUIInit.h" // main @@ -37,8 +36,6 @@ namespace GpgFrontend { -constexpr int kCrashCode = ~0; ///< - /** * @brief * @@ -79,26 +76,18 @@ auto StartApplication(const GFCxtWPtr& p_ctx) -> int { // load module's translations GpgFrontend::UI::InitModulesTranslations(); - - - // finally create main window return_from_event_loop_code = GpgFrontend::UI::RunGpgFrontendUI(app); } while (return_from_event_loop_code == GpgFrontend::kRestartCode && restart_count++ < 99); - // first should shutdown the module system - GpgFrontend::Module::ShutdownGpgFrontendModules(); - - // then shutdown the core - GpgFrontend::DestroyGpgFrontendCore(); + // clear cache of unsaved pages + GpgFrontend::CacheManager::GetInstance().SaveDurableCache( + "editor_unsaved_pages", QJsonDocument(QJsonArray()), true); - // deep restart mode - if (return_from_event_loop_code == GpgFrontend::kDeepRestartCode || - return_from_event_loop_code == kCrashCode) { - QProcess::startDetached(qApp->arguments()[0], qApp->arguments()); - }; + // set return code + ctx->rtn = return_from_event_loop_code; // exit the program return return_from_event_loop_code; diff --git a/src/cmd.cpp b/src/cmd.cpp index b8de7d4c..97934abc 100644 --- a/src/cmd.cpp +++ b/src/cmd.cpp @@ -39,6 +39,7 @@ #include "core/module/ModuleManager.h" #include "core/thread/TaskRunnerGetter.h" #include "core/utils/BuildInfoUtils.h" +#include "core/utils/GpgUtils.h" // GpgFrontend @@ -160,7 +161,7 @@ auto PrintEnvInfo() -> int { stream << '\n'; int index = 0; - auto key_dbs = GetKeyDatabaseInfoBySettings(default_database_path); + auto key_dbs = GetKeyDatabaseInfoBySettings(); for (const auto& key_database : key_dbs) { stream << Tr("Key Database [") << index++ << "] " << Tr("Name: ") << key_database.name << " " << Tr("-> Path: ") << key_database.path @@ -232,6 +233,7 @@ auto RunTest(const GFCxtWPtr& p_ctx) -> int { .GetTaskRunner(Thread::TaskRunnerGetter::kTaskRunnerType_Default) ->PostTask(task); + ctx->rtn = kNonRestartCode; looper.exec(); return 0; } diff --git a/src/core/GpgConstants.h b/src/core/GpgConstants.h index 6945b27a..d6632b2a 100644 --- a/src/core/GpgConstants.h +++ b/src/core/GpgConstants.h @@ -33,6 +33,7 @@ namespace GpgFrontend { constexpr int kNonRestartCode = 0; constexpr int kRestartCode = 1000; ///< only refresh ui constexpr int kDeepRestartCode = 1001; // refresh core and ui +constexpr int kCrashCode = ~0; ///< application crash // Channels constexpr int kGpgFrontendDefaultChannel = 0; ///< diff --git a/src/core/GpgCoreInit.cpp b/src/core/GpgCoreInit.cpp index 0659377a..5018b8e4 100644 --- a/src/core/GpgCoreInit.cpp +++ b/src/core/GpgCoreInit.cpp @@ -36,9 +36,7 @@ #include "core/function/gpg/GpgAdvancedOperator.h" #include "core/function/gpg/GpgContext.h" #include "core/function/gpg/GpgKeyGetter.h" -#include "core/model/SettingsObject.h" #include "core/module/ModuleManager.h" -#include "core/struct/settings_object/KeyDatabaseListSO.h" #include "core/thread/Task.h" #include "core/thread/TaskRunnerGetter.h" #include "core/utils/CommonUtils.h" @@ -47,19 +45,20 @@ namespace GpgFrontend { -void DestroyGpgFrontendCore() { SingletonStorageCollection::Destroy(); } +void DestroyGpgFrontendCore() { + // stop all task runner + Thread::TaskRunnerGetter::GetInstance().StopAllTeakRunner(); + + // destroy all singleton objects + SingletonStorageCollection::Destroy(); +} auto VerifyGpgconfPath(const QFileInfo& gnupg_install_fs_path) -> bool { return gnupg_install_fs_path.isAbsolute() && gnupg_install_fs_path.exists() && gnupg_install_fs_path.isFile(); } -auto VerifyKeyDatabasePath(const QFileInfo& key_database_fs_path) -> bool { - return key_database_fs_path.isAbsolute() && key_database_fs_path.exists() && - key_database_fs_path.isDir(); -} - -auto SearchGpgconfPath(const QList<QString>& candidate_paths) -> QString { +auto SearchGpgconfPath(const QStringList& candidate_paths) -> QString { for (const auto& path : candidate_paths) { if (VerifyGpgconfPath(QFileInfo(path))) { // return a unify path @@ -69,33 +68,37 @@ auto SearchGpgconfPath(const QList<QString>& candidate_paths) -> QString { return {}; } -auto SearchKeyDatabasePath(const QList<QString>& candidate_paths) -> QString { - for (const auto& path : candidate_paths) { - if (VerifyKeyDatabasePath(QFileInfo(path))) { - // return a unify path - return QFileInfo(path).absoluteFilePath(); - } - } - return {}; -} - auto GetDefaultKeyDatabasePath(const QString& gpgconf_path) -> QString { - if (gpgconf_path.isEmpty()) return {}; + QString default_db_path; - QFileInfo info(gpgconf_path); - if (!info.exists() || !info.isFile()) return {}; + // portable mode + if (GlobalSettingStation::GetInstance().IsProtableMode()) { + default_db_path = + GlobalSettingStation::GetInstance().GetAppDataPath() + "/db"; + } else { + if (gpgconf_path.isEmpty()) return {}; - auto* p = new QProcess(QCoreApplication::instance()); - p->setProgram(info.absoluteFilePath()); - p->setArguments({"--list-dirs", "homedir"}); - p->start(); + QFileInfo info(gpgconf_path); + if (!info.exists() || !info.isFile()) return {}; + + auto* p = new QProcess(QCoreApplication::instance()); + p->setProgram(info.absoluteFilePath()); + p->setArguments({"--list-dirs", "homedir"}); + p->start(); + + p->waitForFinished(); + default_db_path = p->readAll().trimmed(); + p->deleteLater(); + } - p->waitForFinished(); - auto home_path = p->readAll().trimmed(); - p->deleteLater(); + QFileInfo info(default_db_path); + default_db_path = info.absoluteFilePath(); - QFileInfo home_info(home_path); - return home_info.absoluteFilePath(); + // update GRT + Module::UpsertRTValue("core", "gpgme.ctx.default_database_path", + default_db_path); + + return default_db_path; } auto InitGpgME() -> bool { @@ -270,43 +273,56 @@ auto RefreshGpgMEBackendEngine(const QString& gpgconf_path, return true; } -auto GetGnuPGPathByGpgConf(const QString& gpgconf_install_fs_path) -> QString { +auto GetComponentPathsByGpgConf(const QString& gpgconf_install_fs_path) + -> bool { auto* process = new QProcess(QCoreApplication::instance()); process->setProgram(gpgconf_install_fs_path); + process->setArguments({"--check-programs"}); process->start(); - process->waitForFinished(1000); + process->waitForFinished(30000); + auto output_buffer = process->readAllStandardOutput(); process->deleteLater(); - if (output_buffer.isEmpty()) return {}; + if (output_buffer.isEmpty()) return false; auto line_split_list = QString(output_buffer).split("\n"); for (const auto& line : line_split_list) { auto info_split_list = line.split(":"); - if (info_split_list.size() != 3) continue; + if (info_split_list.size() != 6) continue; - auto component_name = info_split_list[0].trimmed(); + auto component_name = info_split_list[0].trimmed().toLower(); auto component_desc = info_split_list[1].trimmed(); auto component_path = info_split_list[2].trimmed(); + auto exists = info_split_list[3].trimmed(); + auto runnable = info_split_list[4].trimmed(); - if (component_name.toLower() == "gpg") { #if defined(_WIN32) || defined(WIN32) - // replace some special substrings on windows platform - component_path.replace("%3a", ":"); + // replace some special substrings on windows platform + component_path.replace("%3a", ":"); #endif - QFileInfo file_info(component_path); - if (file_info.exists() && file_info.isFile()) { - return file_info.absoluteFilePath(); - } - return {}; - } + + if (exists != "1" || runnable != "1") continue; + + QFileInfo file_info(component_path); + if (!file_info.exists() || !file_info.isFile()) continue; + + Module::UpsertRTValue( + "core", QString("gnupg.components.%1.checked").arg(component_name), 1); + Module::UpsertRTValue( + "core", QString("gnupg.components.%1.path").arg(component_name), + file_info.absoluteFilePath()); + + LOG_D() << "gpg components checked: " << component_name + << "path: " << file_info.absoluteFilePath(); } - return ""; + + return true; } auto DecideGpgConfPath(const QString& default_gpgconf_path) -> QString { - auto settings = GlobalSettingStation::GetInstance().GetSettings(); + auto settings = GetSettings(); auto use_custom_gnupg_install_path = settings.value("gnupg/use_custom_gnupg_install_path", false).toBool(); auto custom_gnupg_install_path = @@ -359,8 +375,15 @@ auto DecideGpgConfPath(const QString& default_gpgconf_path) -> QString { return ""; } -auto DecideGnuPGPath(const QString& gpgconf_path) -> QString { - return GetGnuPGPathByGpgConf(gpgconf_path); +auto DecideGnuPGPath(const QString& default_gnupg_path) -> QString { + QFileInfo info(default_gnupg_path); + + if (default_gnupg_path.isEmpty() || !info.exists() || !info.isFile()) { + return Module::RetrieveRTValueTypedOrDefault<>( + "core", "gnupg.components.gpg.path", QString{}); + } + + return default_gnupg_path; } auto InitBasicPath() -> bool { @@ -374,12 +397,23 @@ auto InitBasicPath() -> bool { LOG_I() << "default gnupg path found by gpgme: " << default_gnupg_path; auto target_gpgconf_path = DecideGpgConfPath(default_gpgconf_path); + + if (!GetComponentPathsByGpgConf(default_gpgconf_path)) { + LOG_E() << "Cannot get components paths by gpgconf!" + << "GpgFrontend cannot start under this situation!"; + CoreSignalStation::GetInstance()->SignalBadGnupgEnv( + QCoreApplication::tr("Cannot get Infos from GpgConf")); + return false; + } + auto target_gnupg_path = default_gnupg_path; + if (target_gpgconf_path != default_gpgconf_path) { - target_gnupg_path = DecideGnuPGPath(target_gpgconf_path); + target_gnupg_path = DecideGnuPGPath(target_gnupg_path); } + LOG_I() << "gpgconf path used: " << target_gpgconf_path; - LOG_I() << "gnupg path provided by gpgconf: " << target_gnupg_path; + LOG_I() << "gnupg path used: " << target_gnupg_path; if (target_gpgconf_path.isEmpty()) { LOG_E() << "Cannot find gpgconf!" @@ -408,10 +442,12 @@ auto InitBasicPath() -> bool { LOG_E() << "Cannot find default home path by gpgconf!" << "GpgFrontend cannot start under this situation!"; CoreSignalStation::GetInstance()->SignalBadGnupgEnv( - QCoreApplication::tr("Cannot Find Home Path")); + QCoreApplication::tr("Cannot Find Default Home Path")); return false; } + if (!QDir(default_home_path).exists()) QDir(default_home_path).mkpath("."); + RefreshGpgMEBackendEngine(target_gpgconf_path, target_gnupg_path, default_home_path); @@ -425,45 +461,6 @@ auto InitBasicPath() -> bool { return true; } -auto GetKeyDatabasesBySettings(QString& default_home_path) - -> QList<KeyDatabaseItemSO> { - auto key_db_list_so = SettingsObject("key_database_list"); - auto key_db_list = KeyDatabaseListSO(key_db_list_so); - auto key_dbs = key_db_list.key_databases; - -#if QT_VERSION >= QT_VERSION_CHECK(6, 1, 0) - key_dbs.removeIf( - [default_home_path](const KeyDatabaseItemSO& key_database) -> bool { - return key_database.path == default_home_path; - }); -#else - for (auto iter = key_dbs.begin(); iter != key_dbs.end();) { - if (iter->path == default_home_path) { - iter = key_dbs.erase(iter); - } else { - ++iter; - } - } -#endif - - key_db_list_so.Store(key_db_list.ToJson()); - return key_dbs; -} - -auto GetKeyDatabaseInfoBySettings(QString& default_home_path) - -> QList<KeyDatabaseInfo> { - auto key_dbs = GetKeyDatabasesBySettings(default_home_path); - QList<KeyDatabaseInfo> infos; - for (const auto& key_db : key_dbs) { - KeyDatabaseInfo info; - info.name = key_db.name; - info.path = key_db.path; - info.channel = -1; - infos.append(info); - } - return infos; -} - auto InitGpgFrontendCore(CoreInitArgs args) -> int { // initialize gpgme if (!InitGpgME()) { @@ -491,7 +488,7 @@ auto InitGpgFrontendCore(CoreInitArgs args) -> int { auto default_home_path = Module::RetrieveRTValueTypedOrDefault<>( "core", "gpgme.ctx.default_database_path", QString{}); - auto settings = GlobalSettingStation::GetInstance().GetSettings(); + auto settings = GetSettings(); // read settings from config file auto forbid_all_gnupg_connection = @@ -519,16 +516,16 @@ auto InitGpgFrontendCore(CoreInitArgs args) -> int { return 0; } + auto key_dbs = GetKeyDatabaseInfoBySettings(); + // load default context auto& default_ctx = GpgFrontend::GpgContext::CreateInstance( kGpgFrontendDefaultChannel, [=]() -> ChannelObjectPtr { GpgFrontend::GpgContextInitArgs args; - // set key database path - if (!default_home_path.isEmpty()) { - args.db_name = "DEFAULT"; - args.db_path = default_home_path; - } + const auto& default_key_db_info = key_dbs.front(); + args.db_name = default_key_db_info.name; + args.db_path = default_key_db_info.path; args.offline_mode = forbid_all_gnupg_connection; args.auto_import_missing_key = auto_import_missing_key; @@ -564,30 +561,12 @@ auto InitGpgFrontendCore(CoreInitArgs args) -> int { CoreSignalStation::GetInstance()->SignalGoodGnupgEnv(); LOG_I() << "Basic ENV Checking Finished"; - auto key_dbs = GetKeyDatabasesBySettings(default_home_path); - auto* task = new Thread::Task( [=](const DataObjectPtr&) -> int { - // key database path - QList<KeyDatabaseItemSO> buffered_key_dbs; - - // try to use user defined key database - if (!key_dbs.empty()) { - for (const auto& key_database : key_dbs) { - if (VerifyKeyDatabasePath(QFileInfo(key_database.path))) { - auto key_database_fs_path = - QFileInfo(key_database.path).absoluteFilePath(); - LOG_D() << "load gpg key database: " << key_database.path; - buffered_key_dbs.append(key_database); - } else { - LOG_W() << "gpg key database path is not suitable: " - << key_database.path; - } - } - } - int channel_index = kGpgFrontendDefaultChannel + 1; - for (const auto& key_db : buffered_key_dbs) { + for (int i = 1; i < key_dbs.size(); i++) { + const auto& key_db = key_dbs[i]; + // init ctx, also checking the basic env auto& ctx = GpgFrontend::GpgContext::CreateInstance( channel_index, [=]() -> ChannelObjectPtr { @@ -616,7 +595,7 @@ auto InitGpgFrontendCore(CoreInitArgs args) -> int { continue; } - if (!GpgKeyGetter::GetInstance(ctx.GetChannel()).FetchKey()) { + if (!GpgKeyGetter::GetInstance(ctx.GetChannel()).FlushKeyCache()) { FLOG_E() << "gpgme context init key cache failed, index:" << channel_index; continue; @@ -642,7 +621,7 @@ auto InitGpgFrontendCore(CoreInitArgs args) -> int { ->PostTask(task); if (!args.unit_test_mode && restart_all_gnupg_components_on_start) { - GpgAdvancedOperator::RestartGpgComponents(); + GpgAdvancedOperator::RestartGpgComponents(nullptr); } return 0; } @@ -658,7 +637,7 @@ void StartMonitorCoreInitializationStatus() { "core", "env.state.basic", 0); LOG_D() << "monitor: core env is still initializing, waiting..."; - QThread::msleep(15); + QThread::msleep(100); } if (core_init_state < 0) return -1; diff --git a/src/core/GpgCoreInit.h b/src/core/GpgCoreInit.h index b23f5a9a..0a35d6d1 100644 --- a/src/core/GpgCoreInit.h +++ b/src/core/GpgCoreInit.h @@ -72,12 +72,4 @@ auto GPGFRONTEND_CORE_EXPORT InitGpgME() -> bool; */ auto GPGFRONTEND_CORE_EXPORT InitBasicPath() -> bool; -/** - * @brief Get the Key Databases By Settings object - * - * @return auto - */ -auto GPGFRONTEND_CORE_EXPORT GetKeyDatabaseInfoBySettings( - QString& default_home_path) -> QList<KeyDatabaseInfo>; - } // namespace GpgFrontend diff --git a/src/core/function/ArchiveFileOperator.cpp b/src/core/function/ArchiveFileOperator.cpp index 49b50834..808807c4 100644 --- a/src/core/function/ArchiveFileOperator.cpp +++ b/src/core/function/ArchiveFileOperator.cpp @@ -85,7 +85,7 @@ auto ArchiveCloseWriteCallback(struct archive *, void *client_data) -> int { } void ArchiveFileOperator::NewArchive2DataExchanger( - const QString &target_directory, std::shared_ptr<GFDataExchanger> exchanger, + const QString &target_directory, QSharedPointer<GFDataExchanger> exchanger, const OperationCallback &cb) { RunIOOperaAsync( [=](const DataObjectPtr &data_object) -> GFError { @@ -194,7 +194,7 @@ void ArchiveFileOperator::NewArchive2DataExchanger( } void ArchiveFileOperator::ExtractArchiveFromDataExchanger( - std::shared_ptr<GFDataExchanger> ex, const QString &target_path, + QSharedPointer<GFDataExchanger> ex, const QString &target_path, const OperationCallback &cb) { RunIOOperaAsync( [=](const DataObjectPtr &data_object) -> GFError { diff --git a/src/core/function/ArchiveFileOperator.h b/src/core/function/ArchiveFileOperator.h index 005ea349..ace16d2b 100644 --- a/src/core/function/ArchiveFileOperator.h +++ b/src/core/function/ArchiveFileOperator.h @@ -53,7 +53,7 @@ class GPGFRONTEND_CORE_EXPORT ArchiveFileOperator { * @param files */ static void NewArchive2DataExchanger(const QString &target_directory, - std::shared_ptr<GFDataExchanger>, + QSharedPointer<GFDataExchanger>, const OperationCallback &cb); /** @@ -63,7 +63,7 @@ class GPGFRONTEND_CORE_EXPORT ArchiveFileOperator { * @param base_path */ static void ExtractArchiveFromDataExchanger( - std::shared_ptr<GFDataExchanger> fd, const QString &target_path, + QSharedPointer<GFDataExchanger> fd, const QString &target_path, const OperationCallback &cb); }; } // namespace GpgFrontend diff --git a/src/core/function/GlobalSettingStation.cpp b/src/core/function/GlobalSettingStation.cpp index 4c88fde4..62b24331 100644 --- a/src/core/function/GlobalSettingStation.cpp +++ b/src/core/function/GlobalSettingStation.cpp @@ -48,7 +48,7 @@ class GlobalSettingStation::Impl { Module::UpsertRTValue("core", "env.state.portable", 1); LOG_I() << "GpgFrontend runs in the portable mode now"; - app_data_path_ = app_path_ + "/../"; + app_data_path_ = QDir(app_path_ + "/../").canonicalPath(); app_config_path_ = app_data_path_ + "/config"; portable_mode_ = true; @@ -61,6 +61,11 @@ class GlobalSettingStation::Impl { #if defined(_WIN32) || defined(WIN32) LOG_I() << "app config path: " << app_config_path_; if (!QDir(app_config_path_).exists()) QDir(app_config_path_).mkpath("."); +#else + if (IsProtableMode()) { + LOG_I() << "app config path: " << app_config_path_; + if (!QDir(app_config_path_).exists()) QDir(app_config_path_).mkpath("."); + } #endif if (!QDir(app_data_path_).exists()) QDir(app_data_path_).mkpath("."); @@ -74,6 +79,7 @@ class GlobalSettingStation::Impl { #if defined(_WIN32) || defined(WIN32) return QSettings(app_config_file_path(), QSettings::IniFormat); #else + if (IsProtableMode()) return {app_config_file_path(), QSettings::IniFormat}; return QSettings(); #endif } @@ -171,6 +177,8 @@ class GlobalSettingStation::Impl { return exec_binary_path + "/modules"; } + [[nodiscard]] auto IsProtableMode() const -> bool { return portable_mode_; } + private: [[nodiscard]] auto app_config_file_path() const -> QString { return app_config_path_ + "/config.ini"; @@ -244,4 +252,11 @@ auto GlobalSettingStation::GetConfigPath() const -> QString { auto GlobalSettingStation::GetIntegratedModulePath() const -> QString { return p_->GetIntegratedModulePath(); } + +auto GlobalSettingStation::IsProtableMode() const -> bool { + return p_->IsProtableMode(); +} +auto GetSettings() -> QSettings { + return GlobalSettingStation::GetInstance().GetSettings(); +} } // namespace GpgFrontend
\ No newline at end of file diff --git a/src/core/function/GlobalSettingStation.h b/src/core/function/GlobalSettingStation.h index f45c0b49..9ef29792 100644 --- a/src/core/function/GlobalSettingStation.h +++ b/src/core/function/GlobalSettingStation.h @@ -131,8 +131,19 @@ class GPGFRONTEND_CORE_EXPORT GlobalSettingStation */ [[nodiscard]] auto GetIntegratedModulePath() const -> QString; + /** + * @brief + * + * @return true + * @return false + */ + [[nodiscard]] auto IsProtableMode() const -> bool; + private: class Impl; SecureUniquePtr<Impl> p_; }; + +auto GPGFRONTEND_CORE_EXPORT GetSettings() -> QSettings; + } // namespace GpgFrontend diff --git a/src/core/function/basic/GpgFunctionObject.h b/src/core/function/basic/GpgFunctionObject.h index 06ad6bfd..41a597e5 100644 --- a/src/core/function/basic/GpgFunctionObject.h +++ b/src/core/function/basic/GpgFunctionObject.h @@ -141,11 +141,11 @@ class SingletonFunctionObject : public ChannelObject { } /** - * @brief Get all the channel ids + * @brief Get the All Channel Id object * - * @return std::vector<int> + * @return QContainer<int> */ - static auto GetAllChannelId() -> std::vector<int> { + static auto GetAllChannelId() -> QContainer<int> { return SingletonStorageCollection::GetInstance(false) ->GetSingletonStorage(typeid(T)) ->GetAllChannelId(); diff --git a/src/core/function/basic/SingletonStorage.cpp b/src/core/function/basic/SingletonStorage.cpp index e51acd77..be26d0f5 100644 --- a/src/core/function/basic/SingletonStorage.cpp +++ b/src/core/function/basic/SingletonStorage.cpp @@ -31,7 +31,8 @@ #include <shared_mutex> #include "core/function/basic/ChannelObject.h" -#include "utils/MemoryUtils.h" +#include "core/typedef/CoreTypedef.h" +#include "core/utils/MemoryUtils.h" namespace GpgFrontend { @@ -60,8 +61,8 @@ class SingletonStorage::Impl { } } - auto GetAllChannelId() -> std::vector<int> { - std::vector<int> channels; + auto GetAllChannelId() -> QContainer<int> { + QContainer<int> channels; channels.reserve(instances_map_.size()); for (const auto& [key, value] : instances_map_) { channels.push_back(key); @@ -119,7 +120,7 @@ auto SingletonStorage::FindObjectInChannel(int channel) return p_->FindObjectInChannel(channel); } -auto SingletonStorage::GetAllChannelId() -> std::vector<int> { +auto SingletonStorage::GetAllChannelId() -> QContainer<int> { return p_->GetAllChannelId(); } diff --git a/src/core/function/basic/SingletonStorage.h b/src/core/function/basic/SingletonStorage.h index 81ae570f..574a16ec 100644 --- a/src/core/function/basic/SingletonStorage.h +++ b/src/core/function/basic/SingletonStorage.h @@ -29,6 +29,7 @@ #pragma once #include "core/function/SecureMemoryAllocator.h" +#include "core/typedef/GpgTypedef.h" namespace GpgFrontend { @@ -66,11 +67,11 @@ class GPGFRONTEND_CORE_EXPORT SingletonStorage { auto FindObjectInChannel(int channel) -> ChannelObject*; /** - * @brief Get all the channel ids + * @brief Get the All Channel Id object * - * @return std::vector<int> + * @return QContainer<int> */ - auto GetAllChannelId() -> std::vector<int>; + auto GetAllChannelId() -> QContainer<int>; /** * @brief Set a new object in channel object diff --git a/src/core/function/gpg/GpgAdvancedOperator.cpp b/src/core/function/gpg/GpgAdvancedOperator.cpp index 6b56d867..590110e9 100644 --- a/src/core/function/gpg/GpgAdvancedOperator.cpp +++ b/src/core/function/gpg/GpgAdvancedOperator.cpp @@ -32,211 +32,89 @@ #include "GpgAdvancedOperator.h" +#include <utility> + #include "core/function/gpg/GpgCommandExecutor.h" #include "core/module/ModuleManager.h" +#include "core/utils/GpgUtils.h" -void GpgFrontend::GpgAdvancedOperator::ClearGpgPasswordCache( - OperationCallback cb) { - const auto gpgconf_path = Module::RetrieveRTValueTypedOrDefault<>( - "core", "gpgme.ctx.gpgconf_path", QString{}); - - if (gpgconf_path.isEmpty()) { - FLOG_W("cannot get valid gpgconf path from rt, abort."); - cb(-1, TransferParams()); - return; - } +namespace GpgFrontend { -#if defined(__APPLE__) && defined(__MACH__) - FLOG_I("kill all gpg components in order to clear gpg password cache"); - KillAllGpgComponents(); -#else - GpgFrontend::GpgCommandExecutor::ExecuteSync( - {gpgconf_path, QStringList{"--reload", "gpg-agent"}, - [=](int exit_code, const QString & /*p_out*/, - const QString & /*p_err*/) { - cb(exit_code == 0 ? 0 : -1, TransferParams()); - }}); -#endif -} - -void GpgFrontend::GpgAdvancedOperator::ReloadGpgComponents( - OperationCallback cb) { +void ExecuteGpgCommand(const QString &operation, const QStringList &extra_args, + OperationCallback cb) { const auto gpgconf_path = Module::RetrieveRTValueTypedOrDefault<>( "core", "gpgme.ctx.gpgconf_path", QString{}); if (gpgconf_path.isEmpty()) { FLOG_W("cannot get valid gpgconf path from rt, abort."); - cb(-1, TransferParams()); + if (cb) cb(-1, TransferParams()); return; } - GpgFrontend::GpgCommandExecutor::ExecuteSync( - {gpgconf_path, QStringList{"--reload"}, - [=](int exit_code, const QString &, const QString &) { - FLOG_D("gpgconf reload exit code: %d", exit_code); - cb(exit_code == 0 ? 0 : -1, TransferParams()); - }}); -} - -void GpgFrontend::GpgAdvancedOperator::KillAllGpgComponents() { - const auto gpgconf_path = Module::RetrieveRTValueTypedOrDefault<>( - "core", "gpgme.ctx.gpgconf_path", QString{}); - - if (gpgconf_path.isEmpty()) { - FLOG_W("cannot get valid gpgconf path from rt, abort."); - return; + auto key_dbs = GetGpgKeyDatabaseInfos(); + auto total_tasks = static_cast<int>(key_dbs.size()); + std::atomic<int> completed_tasks{0}; + std::vector<int> results(total_tasks, 0); + + int task_index = 0; + for (const auto &key_db : key_dbs) { + const int current_index = task_index++; + const auto target_home_dir = + QDir::toNativeSeparators(QFileInfo(key_db.path).canonicalFilePath()); + + QStringList arguments = QStringList{"--homedir", target_home_dir}; + arguments.append(extra_args); + + GpgCommandExecutor::ExecuteSync( + {gpgconf_path, arguments, + [=, &completed_tasks, &results](int exit_code, const QString &, + const QString &) { + FLOG_D("%s exit code: %d", qPrintable(operation), exit_code); + + results[current_index] = exit_code; + + if (++completed_tasks == total_tasks && cb) { + int final_result = + std::all_of(results.begin(), results.end(), + [](int result) { return result >= 0; }) + ? 0 + : -1; + cb(final_result, TransferParams()); + } + }}); } - - GpgFrontend::GpgCommandExecutor::ExecuteSync( - {gpgconf_path, QStringList{"--verbose", "--kill", "all"}, - [=](int exit_code, const QString &p_out, const QString &p_err) { - bool success = true; - if (exit_code != 0) { - success = false; - LOG_W() << "gpgconf execute error, process stderr: " << p_err - << ", process stdout: " << p_out; - return; - } - - FLOG_D("gpgconf --kill --all execute result: %d", success); - }}); } -void GpgFrontend::GpgAdvancedOperator::RestartGpgComponents() { - const auto gpgconf_path = Module::RetrieveRTValueTypedOrDefault<>( - "core", "gpgme.ctx.gpgconf_path", QString{}); - - if (gpgconf_path.isEmpty()) { - FLOG_W("cannot get valid gpgconf path from rt, abort."); - return; - } - - GpgFrontend::GpgCommandExecutor::ExecuteSync( - {gpgconf_path, QStringList{"--verbose", "--kill", "all"}, - [=](int exit_code, const QString &p_out, const QString &p_err) { - FLOG_D("gpgconf --kill all command got exit code: %d", exit_code); - bool success = true; - if (exit_code != 0) { - success = false; - LOG_W() << "gpgconf execute error, process stderr: " << p_err - << ", process stdout: " << p_out; - return; - } - - FLOG_D("gpgconf --kill --all execute result: %d", success); - if (!success) { - FLOG_W("restart all component after core initalized failed"); - Module::UpsertRTValue( - "core", "gpg_advanced_operator.restart_gpg_components", false); - return; - } - -#if defined(__APPLE__) && defined(__MACH__) - FLOG_I("getting gpg-agent to start automatically on macOS"); -#else - StartGpgAgent([](int err, DataObjectPtr) { - if (err >= 0) { - Module::UpsertRTValue( - "core", "gpg_advanced_operator.restart_gpg_components", true); - return; - } - }); -#endif - }}); +void GpgAdvancedOperator::ClearGpgPasswordCache(OperationCallback cb) { + ExecuteGpgCommand("Clear GPG Password Cache", {"--reload", "gpg-agent"}, + std::move(cb)); } -void GpgFrontend::GpgAdvancedOperator::ResetConfigures(OperationCallback cb) { +void GpgAdvancedOperator::ReloadGpgComponents(OperationCallback cb) { const auto gpgconf_path = Module::RetrieveRTValueTypedOrDefault<>( "core", "gpgme.ctx.gpgconf_path", QString{}); - - if (gpgconf_path.isEmpty()) { - FLOG_W("cannot get valid gpgconf path from rt, abort."); - cb(-1, TransferParams()); - return; - } - - GpgFrontend::GpgCommandExecutor::ExecuteSync( - {gpgconf_path, QStringList{"--apply-defaults"}, - [=](int exit_code, const QString &, const QString &) { - FLOG_D("gpgconf apply-defaults exit code: %d", exit_code); - cb(exit_code == 0 ? 0 : -1, TransferParams()); - }}); + ExecuteGpgCommand("Reload GPG Components", {"--reload", "all"}, + std::move(cb)); } -void GpgFrontend::GpgAdvancedOperator::StartGpgAgent(OperationCallback cb) { - if (!Module::IsModuleActivate(kGnuPGInfoGatheringModuleID)) { - cb(-1, TransferParams()); - return; - } - - const auto gpg_agent_path = Module::RetrieveRTValueTypedOrDefault<>( - kGnuPGInfoGatheringModuleID, "gnupg.gpg_agent_path", QString{}); - - const auto home_path = Module::RetrieveRTValueTypedOrDefault<>( - kGnuPGInfoGatheringModuleID, "gnupg.home_path", QString{}); - - if (gpg_agent_path.isEmpty()) { - FLOG_W("cannot get valid gpg agent path from rt, abort."); - cb(-1, TransferParams()); - return; - } - - GpgFrontend::GpgCommandExecutor::ExecuteSync( - {gpg_agent_path, QStringList{"--homedir", home_path, "--daemon"}, - [=](int exit_code, const QString &, const QString &) { - FLOG_D("gpg-agent daemon exit code: %d", exit_code); - cb(exit_code >= 0 ? 0 : -1, TransferParams()); - }}); +void GpgAdvancedOperator::KillAllGpgComponents(OperationCallback cb) { + ExecuteGpgCommand("Kill All GPG Components", {"--kill", "all"}, + std::move(cb)); } -void GpgFrontend::GpgAdvancedOperator::StartDirmngr(OperationCallback cb) { - if (!Module::IsModuleActivate(kGnuPGInfoGatheringModuleID)) { - cb(-1, TransferParams()); - return; - } - - const auto dirmngr_path = Module::RetrieveRTValueTypedOrDefault<>( - kGnuPGInfoGatheringModuleID, "gnupg.dirmngr_path", QString{}); - - const auto home_path = Module::RetrieveRTValueTypedOrDefault<>( - kGnuPGInfoGatheringModuleID, "gnupg.home_path", QString{}); - - if (dirmngr_path.isEmpty()) { - FLOG_W("cannot get valid dirmngr path from rt, abort."); - cb(-1, TransferParams()); - return; - } - - GpgFrontend::GpgCommandExecutor::ExecuteSync( - {dirmngr_path, QStringList{"--homedir", home_path, "--daemon"}, - [=](int exit_code, const QString &, const QString &) { - FLOG_D("gpgconf daemon exit code: %d", exit_code); - cb(exit_code >= 0 ? 0 : -1, TransferParams()); - }}); +void GpgAdvancedOperator::ResetConfigures(OperationCallback cb) { + ExecuteGpgCommand("Reset Gnupg Configures", {"--apply-defaults"}, + std::move(cb)); } -void GpgFrontend::GpgAdvancedOperator::StartKeyBoxd(OperationCallback cb) { - if (!Module::IsModuleActivate(kGnuPGInfoGatheringModuleID)) { - cb(-1, TransferParams()); - return; - } - - const auto keyboxd_path = Module::RetrieveRTValueTypedOrDefault<>( - kGnuPGInfoGatheringModuleID, "gnupg.keyboxd_path", QString{}); - - const auto home_path = Module::RetrieveRTValueTypedOrDefault<>( - kGnuPGInfoGatheringModuleID, "gnupg.home_path", QString{}); - - if (keyboxd_path.isEmpty()) { - FLOG_W("cannot get valid keyboxd path from rt, abort."); - cb(-1, TransferParams()); - return; - } +void GpgAdvancedOperator::LaunchGpgComponents(OperationCallback cb) { + ExecuteGpgCommand("Launch All GPG Components", {"--launch", "all"}, + std::move(cb)); +} - GpgFrontend::GpgCommandExecutor::ExecuteSync( - {keyboxd_path, QStringList{"--homedir", home_path, "--daemon"}, - [=](int exit_code, const QString &, const QString &) { - FLOG_D("gpgconf daemon exit code: %d", exit_code); - cb(exit_code >= 0 ? 0 : -1, TransferParams()); - }}); +void GpgAdvancedOperator::RestartGpgComponents(OperationCallback cb) { + KillAllGpgComponents(nullptr); + LaunchGpgComponents(std::move(cb)); } + +} // namespace GpgFrontend
\ No newline at end of file diff --git a/src/core/function/gpg/GpgAdvancedOperator.h b/src/core/function/gpg/GpgAdvancedOperator.h index 1be2c2e4..cfd5fbcf 100644 --- a/src/core/function/gpg/GpgAdvancedOperator.h +++ b/src/core/function/gpg/GpgAdvancedOperator.h @@ -60,7 +60,7 @@ class GPGFRONTEND_CORE_EXPORT GpgAdvancedOperator { * @return true * @return false */ - static void RestartGpgComponents(); + static void RestartGpgComponents(OperationCallback); /** * @brief @@ -76,29 +76,13 @@ class GPGFRONTEND_CORE_EXPORT GpgAdvancedOperator { * @return true * @return false */ - static void StartGpgAgent(OperationCallback); - - /** - * @brief - * - * @return true - * @return false - */ - static void StartDirmngr(OperationCallback); - - /** - * @brief - * - * @return true - * @return false - */ - static void StartKeyBoxd(OperationCallback); + static void LaunchGpgComponents(OperationCallback); /** * @brief * */ - static void KillAllGpgComponents(); + static void KillAllGpgComponents(OperationCallback); }; } // namespace GpgFrontend diff --git a/src/core/function/gpg/GpgBasicOperator.cpp b/src/core/function/gpg/GpgBasicOperator.cpp index 6443f242..7f36e60a 100644 --- a/src/core/function/gpg/GpgBasicOperator.cpp +++ b/src/core/function/gpg/GpgBasicOperator.cpp @@ -43,29 +43,49 @@ namespace GpgFrontend { GpgBasicOperator::GpgBasicOperator(int channel) : SingletonFunctionObject<GpgBasicOperator>(channel) {} -void GpgBasicOperator::Encrypt(const KeyArgsList& keys, - const GFBuffer& in_buffer, bool ascii, - const GpgOperationCallback& cb) { - RunGpgOperaAsync( - [=](const DataObjectPtr& data_object) -> GpgError { - if (keys.empty()) return GPG_ERR_CANCELED; +void SetSignersImpl(GpgContext& ctx_, const KeyArgsList& signers, bool ascii) { + auto* ctx = ascii ? ctx_.DefaultContext() : ctx_.BinaryContext(); - std::vector<gpgme_key_t> recipients(keys.begin(), keys.end()); + gpgme_signers_clear(ctx); - // Last entry data_in array has to be nullptr - recipients.emplace_back(nullptr); + for (const GpgKey& key : signers) { + LOG_D() << "signer's key fpr: " << key.GetFingerprint(); + if (key.IsHasActualSignCap()) { + auto error = gpgme_signers_add(ctx, gpgme_key_t(key)); + CheckGpgError(error); + } + } + if (signers.size() != gpgme_signers_count(ctx_.DefaultContext())) { + FLOG_D("not all signers added"); + } +} - GpgData data_in(in_buffer); - GpgData data_out; +auto EncryptImpl(GpgContext& ctx_, const KeyArgsList& keys, + const GFBuffer& in_buffer, bool ascii, + const DataObjectPtr& data_object) -> GpgError { + auto recipients = Convert2RawGpgMEKeyList(keys); - auto* ctx = ascii ? ctx_.DefaultContext() : ctx_.BinaryContext(); - auto err = CheckGpgError(gpgme_op_encrypt(ctx, recipients.data(), - GPGME_ENCRYPT_ALWAYS_TRUST, - data_in, data_out)); - data_object->Swap({GpgEncryptResult(gpgme_op_encrypt_result(ctx)), - data_out.Read2GFBuffer()}); + GpgData data_in(in_buffer); + GpgData data_out; - return err; + auto* ctx = ascii ? ctx_.DefaultContext() : ctx_.BinaryContext(); + auto err = CheckGpgError( + gpgme_op_encrypt(ctx, keys.isEmpty() ? nullptr : recipients.data(), + GPGME_ENCRYPT_ALWAYS_TRUST, data_in, data_out)); + data_object->Swap({ + GpgEncryptResult(gpgme_op_encrypt_result(ctx)), + data_out.Read2GFBuffer(), + }); + + return err; +} + +void GpgBasicOperator::Encrypt(const KeyArgsList& keys, + const GFBuffer& in_buffer, bool ascii, + const GpgOperationCallback& cb) { + RunGpgOperaAsync( + [=](const DataObjectPtr& data_object) { + return EncryptImpl(ctx_, keys, in_buffer, ascii, data_object); }, cb, "gpgme_op_encrypt", "2.1.0"); } @@ -74,25 +94,8 @@ auto GpgBasicOperator::EncryptSync(const KeyArgsList& keys, const GFBuffer& in_buffer, bool ascii) -> std::tuple<GpgError, DataObjectPtr> { return RunGpgOperaSync( - [=](const DataObjectPtr& data_object) -> GpgError { - if (keys.empty()) return GPG_ERR_CANCELED; - - std::vector<gpgme_key_t> recipients(keys.begin(), keys.end()); - - // Last entry data_in array has to be nullptr - recipients.emplace_back(nullptr); - - GpgData data_in(in_buffer); - GpgData data_out; - - auto* ctx = ascii ? ctx_.DefaultContext() : ctx_.BinaryContext(); - auto err = CheckGpgError(gpgme_op_encrypt(ctx, recipients.data(), - GPGME_ENCRYPT_ALWAYS_TRUST, - data_in, data_out)); - data_object->Swap({GpgEncryptResult(gpgme_op_encrypt_result(ctx)), - data_out.Read2GFBuffer()}); - - return err; + [=](const DataObjectPtr& data_object) { + return EncryptImpl(ctx_, keys, in_buffer, ascii, data_object); }, "gpgme_op_encrypt", "2.1.0"); } @@ -100,17 +103,8 @@ auto GpgBasicOperator::EncryptSync(const KeyArgsList& keys, void GpgBasicOperator::EncryptSymmetric(const GFBuffer& in_buffer, bool ascii, const GpgOperationCallback& cb) { RunGpgOperaAsync( - [=](const DataObjectPtr& data_object) -> GpgError { - GpgData data_in(in_buffer); - GpgData data_out; - - auto* ctx = ascii ? ctx_.DefaultContext() : ctx_.BinaryContext(); - auto err = CheckGpgError(gpgme_op_encrypt( - ctx, nullptr, GPGME_ENCRYPT_SYMMETRIC, data_in, data_out)); - data_object->Swap({GpgEncryptResult(gpgme_op_encrypt_result(ctx)), - data_out.Read2GFBuffer()}); - - return err; + [=](const DataObjectPtr& data_object) { + return EncryptImpl(ctx_, {}, in_buffer, ascii, data_object); }, cb, "gpgme_op_encrypt_symmetric", "2.1.0"); } @@ -119,35 +113,32 @@ auto GpgBasicOperator::EncryptSymmetricSync(const GFBuffer& in_buffer, bool ascii) -> std::tuple<GpgError, DataObjectPtr> { return RunGpgOperaSync( - [=](const DataObjectPtr& data_object) -> GpgError { - GpgData data_in(in_buffer); - GpgData data_out; - - auto* ctx = ascii ? ctx_.DefaultContext() : ctx_.BinaryContext(); - auto err = CheckGpgError(gpgme_op_encrypt( - ctx, nullptr, GPGME_ENCRYPT_SYMMETRIC, data_in, data_out)); - data_object->Swap({GpgEncryptResult(gpgme_op_encrypt_result(ctx)), - data_out.Read2GFBuffer()}); - - return err; + [=](const DataObjectPtr& data_object) { + return EncryptImpl(ctx_, {}, in_buffer, ascii, data_object); }, "gpgme_op_encrypt_symmetric", "2.1.0"); } +auto DecryptImpl(GpgContext& ctx_, const GFBuffer& in_buffer, + const DataObjectPtr& data_object) -> GpgError { + GpgData data_in(in_buffer); + GpgData data_out; + + auto err = + CheckGpgError(gpgme_op_decrypt(ctx_.DefaultContext(), data_in, data_out)); + data_object->Swap({ + GpgDecryptResult(gpgme_op_decrypt_result(ctx_.DefaultContext())), + data_out.Read2GFBuffer(), + }); + + return err; +} + void GpgBasicOperator::Decrypt(const GFBuffer& in_buffer, const GpgOperationCallback& cb) { RunGpgOperaAsync( - [=](const DataObjectPtr& data_object) -> GpgError { - GpgData data_in(in_buffer); - GpgData data_out; - - auto err = CheckGpgError( - gpgme_op_decrypt(ctx_.DefaultContext(), data_in, data_out)); - data_object->Swap( - {GpgDecryptResult(gpgme_op_decrypt_result(ctx_.DefaultContext())), - data_out.Read2GFBuffer()}); - - return err; + [=](const DataObjectPtr& data_object) { + return DecryptImpl(ctx_, in_buffer, data_object); }, cb, "gpgme_op_decrypt", "2.1.0"); } @@ -155,45 +146,43 @@ void GpgBasicOperator::Decrypt(const GFBuffer& in_buffer, auto GpgBasicOperator::DecryptSync(const GFBuffer& in_buffer) -> std::tuple<GpgError, DataObjectPtr> { return RunGpgOperaSync( - [=](const DataObjectPtr& data_object) -> GpgError { - GpgData data_in(in_buffer); - GpgData data_out; - - auto err = CheckGpgError( - gpgme_op_decrypt(ctx_.DefaultContext(), data_in, data_out)); - data_object->Swap( - {GpgDecryptResult(gpgme_op_decrypt_result(ctx_.DefaultContext())), - data_out.Read2GFBuffer()}); - - return err; + [=](const DataObjectPtr& data_object) { + return DecryptImpl(ctx_, in_buffer, data_object); }, "gpgme_op_decrypt", "2.1.0"); } +auto VerifyImpl(GpgContext& ctx_, const GFBuffer& in_buffer, + const GFBuffer& sig_buffer, + const DataObjectPtr& data_object) -> GpgError { + GpgError err; + + GpgData data_in(in_buffer); + GpgData data_out; + + if (!sig_buffer.Empty()) { + GpgData sig_data(sig_buffer); + err = CheckGpgError( + gpgme_op_verify(ctx_.DefaultContext(), sig_data, data_in, nullptr)); + } else { + err = CheckGpgError( + gpgme_op_verify(ctx_.DefaultContext(), data_in, nullptr, data_out)); + } + + data_object->Swap({ + GpgVerifyResult(gpgme_op_verify_result(ctx_.DefaultContext())), + GFBuffer(), + }); + + return err; +} + void GpgBasicOperator::Verify(const GFBuffer& in_buffer, const GFBuffer& sig_buffer, const GpgOperationCallback& cb) { RunGpgOperaAsync( [=](const DataObjectPtr& data_object) -> GpgError { - GpgError err; - - GpgData data_in(in_buffer); - GpgData data_out; - - if (!sig_buffer.Empty()) { - GpgData sig_data(sig_buffer); - err = CheckGpgError(gpgme_op_verify(ctx_.DefaultContext(), sig_data, - data_in, nullptr)); - } else { - err = CheckGpgError(gpgme_op_verify(ctx_.DefaultContext(), data_in, - nullptr, data_out)); - } - - data_object->Swap({ - GpgVerifyResult(gpgme_op_verify_result(ctx_.DefaultContext())), - }); - - return err; + return VerifyImpl(ctx_, in_buffer, sig_buffer, data_object); }, cb, "gpgme_op_verify", "2.1.0"); } @@ -202,51 +191,41 @@ auto GpgBasicOperator::VerifySync(const GFBuffer& in_buffer, const GFBuffer& sig_buffer) -> std::tuple<GpgError, DataObjectPtr> { return RunGpgOperaSync( - [=](const DataObjectPtr& data_object) -> GpgError { - GpgError err; + [=](const DataObjectPtr& data_object) { + return VerifyImpl(ctx_, in_buffer, sig_buffer, data_object); + }, + "gpgme_op_verify", "2.1.0"); +} - GpgData data_in(in_buffer); - GpgData data_out; +auto SignImpl(GpgContext& ctx_, const KeyArgsList& signers, + const GFBuffer& in_buffer, GpgSignMode mode, bool ascii, + const DataObjectPtr& data_object) -> GpgError { + if (signers.empty()) return GPG_ERR_CANCELED; - if (!sig_buffer.Empty()) { - GpgData sig_data(sig_buffer); - err = CheckGpgError(gpgme_op_verify(ctx_.DefaultContext(), sig_data, - data_in, nullptr)); - } else { - err = CheckGpgError(gpgme_op_verify(ctx_.DefaultContext(), data_in, - nullptr, data_out)); - } + GpgError err; - data_object->Swap({ - GpgVerifyResult(gpgme_op_verify_result(ctx_.DefaultContext())), - }); + // Set Singers of this opera + SetSignersImpl(ctx_, signers, ascii); - return err; - }, - "gpgme_op_verify", "2.1.0"); + GpgData data_in(in_buffer); + GpgData data_out; + + auto* ctx = ascii ? ctx_.DefaultContext() : ctx_.BinaryContext(); + err = CheckGpgError(gpgme_op_sign(ctx, data_in, data_out, mode)); + + data_object->Swap({ + GpgSignResult(gpgme_op_sign_result(ctx)), + data_out.Read2GFBuffer(), + }); + return err; } void GpgBasicOperator::Sign(const KeyArgsList& signers, const GFBuffer& in_buffer, GpgSignMode mode, bool ascii, const GpgOperationCallback& cb) { RunGpgOperaAsync( - [=](const DataObjectPtr& data_object) -> GpgError { - if (signers.empty()) return GPG_ERR_CANCELED; - - GpgError err; - - // Set Singers of this opera - SetSigners(signers, ascii); - - GpgData data_in(in_buffer); - GpgData data_out; - - auto* ctx = ascii ? ctx_.DefaultContext() : ctx_.BinaryContext(); - err = CheckGpgError(gpgme_op_sign(ctx, data_in, data_out, mode)); - - data_object->Swap({GpgSignResult(gpgme_op_sign_result(ctx)), - data_out.Read2GFBuffer()}); - return err; + [=](const DataObjectPtr& data_object) { + return SignImpl(ctx_, signers, in_buffer, mode, ascii, data_object); }, cb, "gpgme_op_sign", "2.1.0"); } @@ -255,45 +234,36 @@ auto GpgBasicOperator::SignSync( const KeyArgsList& signers, const GFBuffer& in_buffer, GpgSignMode mode, bool ascii) -> std::tuple<GpgError, DataObjectPtr> { return RunGpgOperaSync( - [=](const DataObjectPtr& data_object) -> GpgError { - if (signers.empty()) return GPG_ERR_CANCELED; + [=](const DataObjectPtr& data_object) { + return SignImpl(ctx_, signers, in_buffer, mode, ascii, data_object); + }, + "gpgme_op_sign", "2.1.0"); +} - GpgError err; +auto DecryptVerifyImpl(GpgContext& ctx_, const GFBuffer& in_buffer, + const DataObjectPtr& data_object) -> GpgError { + GpgError err; - // Set Singers of this opera - SetSigners(signers, ascii); + GpgData data_in(in_buffer); + GpgData data_out; - GpgData data_in(in_buffer); - GpgData data_out; + err = CheckGpgError( + gpgme_op_decrypt_verify(ctx_.DefaultContext(), data_in, data_out)); - auto* ctx = ascii ? ctx_.DefaultContext() : ctx_.BinaryContext(); - err = CheckGpgError(gpgme_op_sign(ctx, data_in, data_out, mode)); + data_object->Swap({ + GpgDecryptResult(gpgme_op_decrypt_result(ctx_.DefaultContext())), + GpgVerifyResult(gpgme_op_verify_result(ctx_.DefaultContext())), + data_out.Read2GFBuffer(), + }); - data_object->Swap({GpgSignResult(gpgme_op_sign_result(ctx)), - data_out.Read2GFBuffer()}); - return err; - }, - "gpgme_op_sign", "2.1.0"); + return err; } void GpgBasicOperator::DecryptVerify(const GFBuffer& in_buffer, const GpgOperationCallback& cb) { RunGpgOperaAsync( - [=](const DataObjectPtr& data_object) -> GpgError { - GpgError err; - - GpgData data_in(in_buffer); - GpgData data_out; - - err = CheckGpgError( - gpgme_op_decrypt_verify(ctx_.DefaultContext(), data_in, data_out)); - - data_object->Swap( - {GpgDecryptResult(gpgme_op_decrypt_result(ctx_.DefaultContext())), - GpgVerifyResult(gpgme_op_verify_result(ctx_.DefaultContext())), - data_out.Read2GFBuffer()}); - - return err; + [=](const DataObjectPtr& data_object) { + return DecryptVerifyImpl(ctx_, in_buffer, data_object); }, cb, "gpgme_op_decrypt_verify", "2.1.0"); } @@ -302,22 +272,37 @@ auto GpgBasicOperator::DecryptVerifySync(const GFBuffer& in_buffer) -> std::tuple<GpgError, DataObjectPtr> { return RunGpgOperaSync( [=](const DataObjectPtr& data_object) -> GpgError { - GpgError err; + return DecryptVerifyImpl(ctx_, in_buffer, data_object); + }, + "gpgme_op_decrypt_verify", "2.1.0"); +} - GpgData data_in(in_buffer); - GpgData data_out; +auto EncryptSignImpl(GpgContext& ctx_, const KeyArgsList& keys, + const KeyArgsList& signers, const GFBuffer& in_buffer, + bool ascii, const DataObjectPtr& data_object) -> GpgError { + if (keys.empty() || signers.empty()) return GPG_ERR_CANCELED; - err = CheckGpgError( - gpgme_op_decrypt_verify(ctx_.DefaultContext(), data_in, data_out)); + GpgError err; + QContainer<gpgme_key_t> recipients(keys.begin(), keys.end()); - data_object->Swap( - {GpgDecryptResult(gpgme_op_decrypt_result(ctx_.DefaultContext())), - GpgVerifyResult(gpgme_op_verify_result(ctx_.DefaultContext())), - data_out.Read2GFBuffer()}); + // Last entry data_in array has to be nullptr + recipients.emplace_back(nullptr); - return err; - }, - "gpgme_op_decrypt_verify", "2.1.0"); + SetSignersImpl(ctx_, signers, ascii); + + GpgData data_in(in_buffer); + GpgData data_out; + + auto* ctx = ascii ? ctx_.DefaultContext() : ctx_.BinaryContext(); + err = CheckGpgError(gpgme_op_encrypt_sign( + ctx, recipients.data(), GPGME_ENCRYPT_ALWAYS_TRUST, data_in, data_out)); + + data_object->Swap({ + GpgEncryptResult(gpgme_op_encrypt_result(ctx)), + GpgSignResult(gpgme_op_sign_result(ctx)), + data_out.Read2GFBuffer(), + }); + return err; } void GpgBasicOperator::EncryptSign(const KeyArgsList& keys, @@ -326,28 +311,8 @@ void GpgBasicOperator::EncryptSign(const KeyArgsList& keys, const GpgOperationCallback& cb) { RunGpgOperaAsync( [=](const DataObjectPtr& data_object) -> GpgError { - if (keys.empty() || signers.empty()) return GPG_ERR_CANCELED; - - GpgError err; - std::vector<gpgme_key_t> recipients(keys.begin(), keys.end()); - - // Last entry data_in array has to be nullptr - recipients.emplace_back(nullptr); - - SetSigners(signers, ascii); - - GpgData data_in(in_buffer); - GpgData data_out; - - auto* ctx = ascii ? ctx_.DefaultContext() : ctx_.BinaryContext(); - err = CheckGpgError(gpgme_op_encrypt_sign(ctx, recipients.data(), - GPGME_ENCRYPT_ALWAYS_TRUST, - data_in, data_out)); - - data_object->Swap({GpgEncryptResult(gpgme_op_encrypt_result(ctx)), - GpgSignResult(gpgme_op_sign_result(ctx)), - data_out.Read2GFBuffer()}); - return err; + return EncryptSignImpl(ctx_, keys, signers, in_buffer, ascii, + data_object); }, cb, "gpgme_op_encrypt_sign", "2.1.0"); } @@ -358,57 +323,24 @@ auto GpgBasicOperator::EncryptSignSync(const KeyArgsList& keys, -> std::tuple<GpgError, DataObjectPtr> { return RunGpgOperaSync( [=](const DataObjectPtr& data_object) -> GpgError { - if (keys.empty() || signers.empty()) return GPG_ERR_CANCELED; - - GpgError err; - std::vector<gpgme_key_t> recipients(keys.begin(), keys.end()); - - // Last entry data_in array has to be nullptr - recipients.emplace_back(nullptr); - - SetSigners(signers, ascii); - - GpgData data_in(in_buffer); - GpgData data_out; - - auto* ctx = ascii ? ctx_.DefaultContext() : ctx_.BinaryContext(); - err = CheckGpgError(gpgme_op_encrypt_sign(ctx, recipients.data(), - GPGME_ENCRYPT_ALWAYS_TRUST, - data_in, data_out)); - - data_object->Swap({GpgEncryptResult(gpgme_op_encrypt_result(ctx)), - GpgSignResult(gpgme_op_sign_result(ctx)), - data_out.Read2GFBuffer()}); - return err; + return EncryptSignImpl(ctx_, keys, signers, in_buffer, ascii, + data_object); }, "gpgme_op_encrypt_sign", "2.1.0"); } void GpgBasicOperator::SetSigners(const KeyArgsList& signers, bool ascii) { - auto* ctx = ascii ? ctx_.DefaultContext() : ctx_.BinaryContext(); - - gpgme_signers_clear(ctx); - - for (const GpgKey& key : signers) { - LOG_D() << "signer's key fpr: " << key.GetFingerprint(); - if (key.IsHasActualSigningCapability()) { - auto error = gpgme_signers_add(ctx, gpgme_key_t(key)); - CheckGpgError(error); - } - } - if (signers.size() != gpgme_signers_count(ctx_.DefaultContext())) { - FLOG_D("not all signers added"); - } + SetSignersImpl(ctx_, signers, ascii); } -auto GpgBasicOperator::GetSigners(bool ascii) -> std::unique_ptr<KeyArgsList> { +auto GpgBasicOperator::GetSigners(bool ascii) -> KeyArgsList { auto* ctx = ascii ? ctx_.DefaultContext() : ctx_.BinaryContext(); auto count = gpgme_signers_count(ctx); - auto signers = std::make_unique<std::vector<GpgKey>>(); + auto signers = KeyArgsList{}; for (auto i = 0U; i < count; i++) { auto key = GpgKey(gpgme_signers_enum(ctx, i)); - signers->push_back(GpgKey(std::move(key))); + signers.push_back(GpgKey(std::move(key))); } return signers; } diff --git a/src/core/function/gpg/GpgBasicOperator.h b/src/core/function/gpg/GpgBasicOperator.h index 431ccf1c..990d7af5 100644 --- a/src/core/function/gpg/GpgBasicOperator.h +++ b/src/core/function/gpg/GpgBasicOperator.h @@ -226,7 +226,7 @@ class GPGFRONTEND_CORE_EXPORT GpgBasicOperator * * @return Intelligent pointer pointing to the private key list */ - auto GetSigners(bool ascii) -> std::unique_ptr<KeyArgsList>; + auto GetSigners(bool ascii) -> KeyArgsList; private: GpgContext& ctx_ = GpgContext::GetInstance( diff --git a/src/core/function/gpg/GpgCommandExecutor.cpp b/src/core/function/gpg/GpgCommandExecutor.cpp index 3e218b92..5256de60 100644 --- a/src/core/function/gpg/GpgCommandExecutor.cpp +++ b/src/core/function/gpg/GpgCommandExecutor.cpp @@ -45,8 +45,8 @@ auto BuildTaskFromExecCtx(const GpgCommandExecutor::ExecuteContext &context) Thread::Task::TaskCallback result_callback = [cmd](int /*rtn*/, const DataObjectPtr &data_object) { - FLOG_D("data object args count of cmd executor result callback: %ld", - data_object->GetObjectSize()); + LOG_D() << "data object args count of cmd executor result callback:" + << data_object->GetObjectSize(); if (!data_object->Check<int, QString, GpgCommandExecutorCallback>()) { FLOG_W("data object checking failed"); diff --git a/src/core/function/gpg/GpgFileOpera.cpp b/src/core/function/gpg/GpgFileOpera.cpp index 5d29364b..3b2efd52 100644 --- a/src/core/function/gpg/GpgFileOpera.cpp +++ b/src/core/function/gpg/GpgFileOpera.cpp @@ -40,31 +40,63 @@ namespace GpgFrontend { -constexpr ssize_t kDataExchangerSize = 8192; +auto ExtractArchiveHelper(const QString& out_path) + -> QSharedPointer<GFDataExchanger> { + auto ex = CreateStandardGFDataExchanger(); + ArchiveFileOperator::ExtractArchiveFromDataExchanger( + ex, out_path, [](GFError err, const DataObjectPtr&) { + FLOG_D("extract archive from data exchanger operation, err: %d", err); + }); + return ex; +} + +void CreateArchiveHelper(const QString& in_path, + const QSharedPointer<GFDataExchanger>& ex) { + auto w_ex = QWeakPointer<GFDataExchanger>(ex); + + ArchiveFileOperator::NewArchive2DataExchanger( + in_path, ex, [=](GFError err, const DataObjectPtr&) { + FLOG_D("new archive 2 data exchanger operation, err: %d", err); + if (decltype(ex) p_ex = w_ex.lock(); err < 0 && p_ex != nullptr) { + ex->CloseWrite(); + } + }); +} GpgFileOpera::GpgFileOpera(int channel) : SingletonFunctionObject<GpgFileOpera>(channel) {} +auto EncryptFileGpgDataImpl(GpgContext& ctx_, const KeyArgsList& keys, + GpgData& data_in, bool ascii, GpgData& data_out, + const DataObjectPtr& data_object) -> GpgError { + auto recipients = Convert2RawGpgMEKeyList(keys); + auto* ctx = ascii ? ctx_.DefaultContext() : ctx_.BinaryContext(); + + auto err = CheckGpgError( + gpgme_op_encrypt(ctx, keys.isEmpty() ? nullptr : recipients.data(), + GPGME_ENCRYPT_ALWAYS_TRUST, data_in, data_out)); + data_object->Swap({GpgEncryptResult(gpgme_op_encrypt_result(ctx))}); + return err; +} + +auto EncryptFileImpl(GpgContext& ctx_, const KeyArgsList& keys, + const QString& in_path, bool ascii, + const QString& out_path, + const DataObjectPtr& data_object) -> GpgError { + GpgData data_in(in_path, true); + GpgData data_out(out_path, false); + + return EncryptFileGpgDataImpl(ctx_, keys, data_in, ascii, data_out, + data_object); +} + void GpgFileOpera::EncryptFile(const KeyArgsList& keys, const QString& in_path, bool ascii, const QString& out_path, const GpgOperationCallback& cb) { RunGpgOperaAsync( - [=](const DataObjectPtr& data_object) -> GpgError { - std::vector<gpgme_key_t> recipients(keys.begin(), keys.end()); - - // Last entry data_in array has to be nullptr - recipients.emplace_back(nullptr); - - GpgData data_in(in_path, true); - GpgData data_out(out_path, false); - - auto* ctx = ascii ? ctx_.DefaultContext() : ctx_.BinaryContext(); - auto err = CheckGpgError(gpgme_op_encrypt(ctx, recipients.data(), - GPGME_ENCRYPT_ALWAYS_TRUST, - data_in, data_out)); - data_object->Swap({GpgEncryptResult(gpgme_op_encrypt_result(ctx))}); - - return err; + [=](const DataObjectPtr& data_object) { + return EncryptFileImpl(ctx_, keys, in_path, ascii, out_path, + data_object); }, cb, "gpgme_op_encrypt", "2.1.0"); } @@ -73,22 +105,9 @@ auto GpgFileOpera::EncryptFileSync( const KeyArgsList& keys, const QString& in_path, bool ascii, const QString& out_path) -> std::tuple<GpgError, DataObjectPtr> { return RunGpgOperaSync( - [=](const DataObjectPtr& data_object) -> GpgError { - std::vector<gpgme_key_t> recipients(keys.begin(), keys.end()); - - // Last entry data_in array has to be nullptr - recipients.emplace_back(nullptr); - - GpgData data_in(in_path, true); - GpgData data_out(out_path, false); - - auto* ctx = ascii ? ctx_.DefaultContext() : ctx_.BinaryContext(); - auto err = CheckGpgError(gpgme_op_encrypt(ctx, recipients.data(), - GPGME_ENCRYPT_ALWAYS_TRUST, - data_in, data_out)); - data_object->Swap({GpgEncryptResult(gpgme_op_encrypt_result(ctx))}); - - return err; + [=](const DataObjectPtr& data_object) { + return EncryptFileImpl(ctx_, keys, in_path, ascii, out_path, + data_object); }, "gpgme_op_encrypt", "2.1.0"); } @@ -97,54 +116,46 @@ void GpgFileOpera::EncryptDirectory(const KeyArgsList& keys, const QString& in_path, bool ascii, const QString& out_path, const GpgOperationCallback& cb) { - auto ex = std::make_shared<GFDataExchanger>(kDataExchangerSize); - auto w_ex = std::weak_ptr<GFDataExchanger>(ex); + auto ex = CreateStandardGFDataExchanger(); RunGpgOperaAsync( [=](const DataObjectPtr& data_object) -> GpgError { - std::vector<gpgme_key_t> recipients(keys.begin(), keys.end()); - - // Last entry data_in array has to be nullptr - recipients.emplace_back(nullptr); - GpgData data_in(ex); GpgData data_out(out_path, false); - FLOG_D("encrypt directory start"); - - auto* ctx = ascii ? ctx_.DefaultContext() : ctx_.BinaryContext(); - auto err = CheckGpgError(gpgme_op_encrypt(ctx, recipients.data(), - GPGME_ENCRYPT_ALWAYS_TRUST, - data_in, data_out)); - data_object->Swap({GpgEncryptResult(gpgme_op_encrypt_result(ctx))}); - - FLOG_D("encrypt directory finished, err: %d", err); - return err; + return EncryptFileGpgDataImpl(ctx_, keys, data_in, ascii, data_out, + data_object); }, cb, "gpgme_op_encrypt", "2.1.0"); - ArchiveFileOperator::NewArchive2DataExchanger( - in_path, ex, [=](GFError err, const DataObjectPtr&) { - FLOG_D("new archive 2 data exchanger operation, err: %d", err); - if (decltype(ex) p_ex = w_ex.lock(); err < 0 && p_ex != nullptr) { - ex->CloseWrite(); - } - }); + CreateArchiveHelper(in_path, ex); +} + +auto DecryptFileGpgDataImpl(GpgContext& ctx_, GpgData& data_in, + GpgData& data_out, + const DataObjectPtr& data_object) -> GpgError { + auto err = + CheckGpgError(gpgme_op_decrypt(ctx_.DefaultContext(), data_in, data_out)); + data_object->Swap( + {GpgDecryptResult(gpgme_op_decrypt_result(ctx_.DefaultContext()))}); + + return err; +} + +auto DecryptFileImpl(GpgContext& ctx_, const QString& in_path, + const QString& out_path, + const DataObjectPtr& data_object) -> GpgError { + GpgData data_in(in_path, true); + GpgData data_out(out_path, false); + + return DecryptFileGpgDataImpl(ctx_, data_in, data_out, data_object); } void GpgFileOpera::DecryptFile(const QString& in_path, const QString& out_path, const GpgOperationCallback& cb) { RunGpgOperaAsync( - [=](const DataObjectPtr& data_object) -> GpgError { - GpgData data_in(in_path, true); - GpgData data_out(out_path, false); - - auto err = CheckGpgError( - gpgme_op_decrypt(ctx_.DefaultContext(), data_in, data_out)); - data_object->Swap( - {GpgDecryptResult(gpgme_op_decrypt_result(ctx_.DefaultContext()))}); - - return err; + [=](const DataObjectPtr& data_object) { + return DecryptFileImpl(ctx_, in_path, out_path, data_object); }, cb, "gpgme_op_decrypt", "2.1.0"); } @@ -153,16 +164,8 @@ auto GpgFileOpera::DecryptFileSync(const QString& in_path, const QString& out_path) -> std::tuple<GpgError, DataObjectPtr> { return RunGpgOperaSync( - [=](const DataObjectPtr& data_object) -> GpgError { - GpgData data_in(in_path, true); - GpgData data_out(out_path, false); - - auto err = CheckGpgError( - gpgme_op_decrypt(ctx_.DefaultContext(), data_in, data_out)); - data_object->Swap( - {GpgDecryptResult(gpgme_op_decrypt_result(ctx_.DefaultContext()))}); - - return err; + [=](const DataObjectPtr& data_object) { + return DecryptFileImpl(ctx_, in_path, out_path, data_object); }, "gpgme_op_decrypt", "2.1.0"); } @@ -170,49 +173,55 @@ auto GpgFileOpera::DecryptFileSync(const QString& in_path, void GpgFileOpera::DecryptArchive(const QString& in_path, const QString& out_path, const GpgOperationCallback& cb) { - auto ex = std::make_shared<GFDataExchanger>(kDataExchangerSize); - - ArchiveFileOperator::ExtractArchiveFromDataExchanger( - ex, out_path, [](GFError err, const DataObjectPtr&) { - FLOG_D("extract archive from data exchanger operation, err: %d", err); - }); + auto ex = ExtractArchiveHelper(out_path); RunGpgOperaAsync( [=](const DataObjectPtr& data_object) -> GpgError { GpgData data_in(in_path, true); GpgData data_out(ex); - auto err = CheckGpgError( - gpgme_op_decrypt(ctx_.DefaultContext(), data_in, data_out)); - - data_object->Swap( - {GpgDecryptResult(gpgme_op_decrypt_result(ctx_.DefaultContext()))}); - return err; + return DecryptFileGpgDataImpl(ctx_, data_in, data_out, data_object); }, cb, "gpgme_op_decrypt", "2.1.0"); } -void GpgFileOpera::SignFile(const KeyArgsList& keys, const QString& in_path, - bool ascii, const QString& out_path, - const GpgOperationCallback& cb) { - RunGpgOperaAsync( - [=](const DataObjectPtr& data_object) -> GpgError { - GpgError err; +auto SignFileGpgDataImpl(GpgContext& ctx_, GpgBasicOperator& basic_opera_, + const KeyArgsList& keys, GpgData& data_in, bool ascii, + GpgData& data_out, + const DataObjectPtr& data_object) -> GpgError { + GpgError err; - // Set Singers of this opera - GpgBasicOperator::GetInstance(GetChannel()).SetSigners(keys, ascii); + // Set Singers of this opera + basic_opera_.SetSigners(keys, ascii); - GpgData data_in(in_path, true); - GpgData data_out(out_path, false); + auto* ctx = ascii ? ctx_.DefaultContext() : ctx_.BinaryContext(); + err = CheckGpgError( + gpgme_op_sign(ctx, data_in, data_out, GPGME_SIG_MODE_DETACH)); + + data_object->Swap({ + GpgSignResult(gpgme_op_sign_result(ctx)), + }); + return err; +} + +auto SignFileImpl(GpgContext& ctx_, GpgBasicOperator& basic_opera_, + const KeyArgsList& keys, const QString& in_path, bool ascii, + const QString& out_path, + const DataObjectPtr& data_object) -> GpgError { + GpgData data_in(in_path, true); + GpgData data_out(out_path, false); - auto* ctx = ascii ? ctx_.DefaultContext() : ctx_.BinaryContext(); - err = CheckGpgError( - gpgme_op_sign(ctx, data_in, data_out, GPGME_SIG_MODE_DETACH)); + return SignFileGpgDataImpl(ctx_, basic_opera_, keys, data_in, ascii, data_out, + data_object); +} - data_object->Swap({ - GpgSignResult(gpgme_op_sign_result(ctx)), - }); - return err; +void GpgFileOpera::SignFile(const KeyArgsList& keys, const QString& in_path, + bool ascii, const QString& out_path, + const GpgOperationCallback& cb) { + RunGpgOperaAsync( + [=](const DataObjectPtr& data_object) { + return SignFileImpl(ctx_, basic_opera_, keys, in_path, ascii, out_path, + data_object); }, cb, "gpgme_op_sign", "2.1.0"); } @@ -221,50 +230,42 @@ auto GpgFileOpera::SignFileSync(const KeyArgsList& keys, const QString& in_path, bool ascii, const QString& out_path) -> std::tuple<GpgError, DataObjectPtr> { return RunGpgOperaSync( - [=](const DataObjectPtr& data_object) -> GpgError { - GpgError err; - - // Set Singers of this opera - GpgBasicOperator::GetInstance(GetChannel()).SetSigners(keys, ascii); - - GpgData data_in(in_path, true); - GpgData data_out(out_path, false); - - auto* ctx = ascii ? ctx_.DefaultContext() : ctx_.BinaryContext(); - err = CheckGpgError( - gpgme_op_sign(ctx, data_in, data_out, GPGME_SIG_MODE_DETACH)); - - data_object->Swap({ - GpgSignResult(gpgme_op_sign_result(ctx)), - }); - return err; + [=](const DataObjectPtr& data_object) { + return SignFileImpl(ctx_, basic_opera_, keys, in_path, ascii, out_path, + data_object); }, "gpgme_op_sign", "2.1.0"); } +auto VerifyFileImpl(GpgContext& ctx_, const QString& data_path, + const QString& sign_path, + const DataObjectPtr& data_object) -> GpgError { + GpgError err; + + GpgData data_in(data_path, true); + GpgData data_out; + if (!sign_path.isEmpty()) { + GpgData sig_data(sign_path, true); + err = CheckGpgError( + gpgme_op_verify(ctx_.DefaultContext(), sig_data, data_in, nullptr)); + } else { + err = CheckGpgError( + gpgme_op_verify(ctx_.DefaultContext(), data_in, nullptr, data_out)); + } + + data_object->Swap({ + GpgVerifyResult(gpgme_op_verify_result(ctx_.DefaultContext())), + }); + + return err; +} + void GpgFileOpera::VerifyFile(const QString& data_path, const QString& sign_path, const GpgOperationCallback& cb) { RunGpgOperaAsync( [=](const DataObjectPtr& data_object) -> GpgError { - GpgError err; - - GpgData data_in(data_path, true); - GpgData data_out; - if (!sign_path.isEmpty()) { - GpgData sig_data(sign_path, true); - err = CheckGpgError(gpgme_op_verify(ctx_.DefaultContext(), sig_data, - data_in, nullptr)); - } else { - err = CheckGpgError(gpgme_op_verify(ctx_.DefaultContext(), data_in, - nullptr, data_out)); - } - - data_object->Swap({ - GpgVerifyResult(gpgme_op_verify_result(ctx_.DefaultContext())), - }); - - return err; + return VerifyFileImpl(ctx_, data_path, sign_path, data_object); }, cb, "gpgme_op_verify", "2.1.0"); } @@ -274,57 +275,55 @@ auto GpgFileOpera::VerifyFileSync(const QString& data_path, -> std::tuple<GpgError, DataObjectPtr> { return RunGpgOperaSync( [=](const DataObjectPtr& data_object) -> GpgError { - GpgError err; - - GpgData data_in(data_path, true); - GpgData data_out; - if (!sign_path.isEmpty()) { - GpgData sig_data(sign_path, true); - err = CheckGpgError(gpgme_op_verify(ctx_.DefaultContext(), sig_data, - data_in, nullptr)); - } else { - err = CheckGpgError(gpgme_op_verify(ctx_.DefaultContext(), data_in, - nullptr, data_out)); - } - - data_object->Swap({ - GpgVerifyResult(gpgme_op_verify_result(ctx_.DefaultContext())), - }); - - return err; + return VerifyFileImpl(ctx_, data_path, sign_path, data_object); }, "gpgme_op_verify", "2.1.0"); } +auto EncryptSignFileGpgDataImpl(GpgContext& ctx_, + GpgBasicOperator& basic_opera_, + const KeyArgsList& keys, + const KeyArgsList& signer_keys, + GpgData& data_in, bool ascii, GpgData& data_out, + const DataObjectPtr& data_object) -> GpgError { + GpgError err; + auto recipients = Convert2RawGpgMEKeyList(keys); + + basic_opera_.SetSigners(signer_keys, ascii); + + auto* ctx = ascii ? ctx_.DefaultContext() : ctx_.BinaryContext(); + err = CheckGpgError(gpgme_op_encrypt_sign( + ctx, recipients.data(), GPGME_ENCRYPT_ALWAYS_TRUST, data_in, data_out)); + + data_object->Swap({ + GpgEncryptResult(gpgme_op_encrypt_result(ctx)), + GpgSignResult(gpgme_op_sign_result(ctx)), + }); + + return err; +} + +auto EncryptSignFileImpl(GpgContext& ctx_, GpgBasicOperator& basic_opera_, + const KeyArgsList& keys, + const KeyArgsList& signer_keys, const QString& in_path, + bool ascii, const QString& out_path, + const DataObjectPtr& data_object) -> GpgError { + GpgData data_in(in_path, true); + GpgData data_out(out_path, false); + + return EncryptSignFileGpgDataImpl(ctx_, basic_opera_, keys, signer_keys, + data_in, ascii, data_out, data_object); +} + void GpgFileOpera::EncryptSignFile(const KeyArgsList& keys, const KeyArgsList& signer_keys, const QString& in_path, bool ascii, const QString& out_path, const GpgOperationCallback& cb) { RunGpgOperaAsync( - [=](const DataObjectPtr& data_object) -> GpgError { - GpgError err; - std::vector<gpgme_key_t> recipients(keys.begin(), keys.end()); - - // Last entry data_in array has to be nullptr - recipients.emplace_back(nullptr); - - GpgBasicOperator::GetInstance(GetChannel()) - .SetSigners(signer_keys, ascii); - - GpgData data_in(in_path, true); - GpgData data_out(out_path, false); - - auto* ctx = ascii ? ctx_.DefaultContext() : ctx_.BinaryContext(); - err = CheckGpgError(gpgme_op_encrypt_sign(ctx, recipients.data(), - GPGME_ENCRYPT_ALWAYS_TRUST, - data_in, data_out)); - - data_object->Swap({ - GpgEncryptResult(gpgme_op_encrypt_result(ctx)), - GpgSignResult(gpgme_op_sign_result(ctx)), - }); - return err; + [=](const DataObjectPtr& data_object) { + return EncryptSignFileImpl(ctx_, basic_opera_, keys, signer_keys, + in_path, ascii, out_path, data_object); }, cb, "gpgme_op_encrypt_sign", "2.1.0"); } @@ -334,29 +333,9 @@ auto GpgFileOpera::EncryptSignFileSync( const QString& in_path, bool ascii, const QString& out_path) -> std::tuple<GpgError, DataObjectPtr> { return RunGpgOperaSync( - [=](const DataObjectPtr& data_object) -> GpgError { - GpgError err; - std::vector<gpgme_key_t> recipients(keys.begin(), keys.end()); - - // Last entry data_in array has to be nullptr - recipients.emplace_back(nullptr); - - GpgBasicOperator::GetInstance(GetChannel()) - .SetSigners(signer_keys, ascii); - - GpgData data_in(in_path, true); - GpgData data_out(out_path, false); - - auto* ctx = ascii ? ctx_.DefaultContext() : ctx_.BinaryContext(); - err = CheckGpgError(gpgme_op_encrypt_sign(ctx, recipients.data(), - GPGME_ENCRYPT_ALWAYS_TRUST, - data_in, data_out)); - - data_object->Swap({ - GpgEncryptResult(gpgme_op_encrypt_result(ctx)), - GpgSignResult(gpgme_op_sign_result(ctx)), - }); - return err; + [=](const DataObjectPtr& data_object) { + return EncryptSignFileImpl(ctx_, basic_opera_, keys, signer_keys, + in_path, ascii, out_path, data_object); }, "gpgme_op_encrypt_sign", "2.1.0"); } @@ -366,43 +345,42 @@ void GpgFileOpera::EncryptSignDirectory(const KeyArgsList& keys, const QString& in_path, bool ascii, const QString& out_path, const GpgOperationCallback& cb) { - auto ex = std::make_shared<GFDataExchanger>(kDataExchangerSize); - auto w_ex = std::weak_ptr<GFDataExchanger>(ex); + auto ex = CreateStandardGFDataExchanger(); RunGpgOperaAsync( [=](const DataObjectPtr& data_object) -> GpgError { - GpgError err; - std::vector<gpgme_key_t> recipients(keys.begin(), keys.end()); - - // Last entry data_in array has to be nullptr - recipients.emplace_back(nullptr); - - GpgBasicOperator::GetInstance(GetChannel()) - .SetSigners(signer_keys, ascii); - GpgData data_in(ex); GpgData data_out(out_path, false); - auto* ctx = ascii ? ctx_.DefaultContext() : ctx_.BinaryContext(); - err = CheckGpgError(gpgme_op_encrypt_sign(ctx, recipients.data(), - GPGME_ENCRYPT_ALWAYS_TRUST, - data_in, data_out)); - - data_object->Swap({ - GpgEncryptResult(gpgme_op_encrypt_result(ctx)), - GpgSignResult(gpgme_op_sign_result(ctx)), - }); - return err; + return EncryptSignFileGpgDataImpl(ctx_, basic_opera_, keys, signer_keys, + data_in, ascii, data_out, + data_object); }, cb, "gpgme_op_encrypt_sign", "2.1.0"); - ArchiveFileOperator::NewArchive2DataExchanger( - in_path, ex, [=](GFError err, const DataObjectPtr&) { - FLOG_D("new archive 2 fd operation, err: %d", err); - if (decltype(ex) p_ex = w_ex.lock(); err < 0 && p_ex != nullptr) { - ex->CloseWrite(); - } - }); + CreateArchiveHelper(in_path, ex); +} + +auto DecryptVerifyFileGpgDataImpl( + GpgContext& ctx_, GpgData& data_in, GpgData& data_out, + const DataObjectPtr& data_object) -> GpgError { + auto err = CheckGpgError( + gpgme_op_decrypt_verify(ctx_.DefaultContext(), data_in, data_out)); + + data_object->Swap({ + GpgDecryptResult(gpgme_op_decrypt_result(ctx_.DefaultContext())), + GpgVerifyResult(gpgme_op_verify_result(ctx_.DefaultContext())), + }); + return err; +} + +auto DecryptVerifyFileImpl(GpgContext& ctx_, const QString& in_path, + const QString& out_path, + const DataObjectPtr& data_object) -> GpgError { + GpgData data_in(in_path, true); + GpgData data_out(out_path, false); + + return DecryptVerifyFileGpgDataImpl(ctx_, data_in, data_out, data_object); } void GpgFileOpera::DecryptVerifyFile(const QString& in_path, @@ -410,20 +388,7 @@ void GpgFileOpera::DecryptVerifyFile(const QString& in_path, const GpgOperationCallback& cb) { RunGpgOperaAsync( [=](const DataObjectPtr& data_object) -> GpgError { - GpgError err; - - GpgData data_in(in_path, true); - GpgData data_out(out_path, false); - - err = CheckGpgError( - gpgme_op_decrypt_verify(ctx_.DefaultContext(), data_in, data_out)); - - data_object->Swap({ - GpgDecryptResult(gpgme_op_decrypt_result(ctx_.DefaultContext())), - GpgVerifyResult(gpgme_op_verify_result(ctx_.DefaultContext())), - }); - - return err; + return DecryptVerifyFileImpl(ctx_, in_path, out_path, data_object); }, cb, "gpgme_op_decrypt_verify", "2.1.0"); } @@ -433,20 +398,7 @@ auto GpgFileOpera::DecryptVerifyFileSync(const QString& in_path, -> std::tuple<GpgError, DataObjectPtr> { return RunGpgOperaSync( [=](const DataObjectPtr& data_object) -> GpgError { - GpgError err; - - GpgData data_in(in_path, true); - GpgData data_out(out_path, false); - - err = CheckGpgError( - gpgme_op_decrypt_verify(ctx_.DefaultContext(), data_in, data_out)); - - data_object->Swap({ - GpgDecryptResult(gpgme_op_decrypt_result(ctx_.DefaultContext())), - GpgVerifyResult(gpgme_op_verify_result(ctx_.DefaultContext())), - }); - - return err; + return DecryptVerifyFileImpl(ctx_, in_path, out_path, data_object); }, "gpgme_op_decrypt_verify", "2.1.0"); } @@ -454,29 +406,14 @@ auto GpgFileOpera::DecryptVerifyFileSync(const QString& in_path, void GpgFileOpera::DecryptVerifyArchive(const QString& in_path, const QString& out_path, const GpgOperationCallback& cb) { - auto ex = std::make_shared<GFDataExchanger>(kDataExchangerSize); - - ArchiveFileOperator::ExtractArchiveFromDataExchanger( - ex, out_path, [](GFError err, const DataObjectPtr&) { - FLOG_D("extract archive from ex operation, err: %d", err); - }); + auto ex = ExtractArchiveHelper(out_path); RunGpgOperaAsync( [=](const DataObjectPtr& data_object) -> GpgError { - GpgError err; - GpgData data_in(in_path, true); GpgData data_out(ex); - - err = CheckGpgError( - gpgme_op_decrypt_verify(ctx_.DefaultContext(), data_in, data_out)); - - data_object->Swap({ - GpgDecryptResult(gpgme_op_decrypt_result(ctx_.DefaultContext())), - GpgVerifyResult(gpgme_op_verify_result(ctx_.DefaultContext())), - }); - - return err; + return DecryptVerifyFileGpgDataImpl(ctx_, data_in, data_out, + data_object); }, cb, "gpgme_op_decrypt_verify", "2.1.0"); } @@ -486,17 +423,7 @@ void GpgFileOpera::EncryptFileSymmetric(const QString& in_path, bool ascii, const GpgOperationCallback& cb) { RunGpgOperaAsync( [=](const DataObjectPtr& data_object) -> GpgError { - GpgData data_in(in_path, true); - GpgData data_out(out_path, false); - - auto* ctx = ascii ? ctx_.DefaultContext() : ctx_.BinaryContext(); - auto err = CheckGpgError(gpgme_op_encrypt( - ctx, nullptr, GPGME_ENCRYPT_SYMMETRIC, data_in, data_out)); - data_object->Swap({ - GpgEncryptResult(gpgme_op_encrypt_result(ctx)), - }); - - return err; + return EncryptFileImpl(ctx_, {}, in_path, ascii, out_path, data_object); }, cb, "gpgme_op_encrypt_symmetric", "2.1.0"); } @@ -506,73 +433,45 @@ auto GpgFileOpera::EncryptFileSymmetricSync(const QString& in_path, bool ascii, -> std::tuple<GpgError, DataObjectPtr> { return RunGpgOperaSync( [=](const DataObjectPtr& data_object) -> GpgError { - GpgData data_in(in_path, true); - GpgData data_out(out_path, false); - - auto* ctx = ascii ? ctx_.DefaultContext() : ctx_.BinaryContext(); - auto err = CheckGpgError(gpgme_op_encrypt( - ctx, nullptr, GPGME_ENCRYPT_SYMMETRIC, data_in, data_out)); - data_object->Swap({ - GpgEncryptResult(gpgme_op_encrypt_result(ctx)), - }); - - return err; + return EncryptFileImpl(ctx_, {}, in_path, ascii, out_path, data_object); }, "gpgme_op_encrypt_symmetric", "2.1.0"); } -void GpgFileOpera::EncryptDerectorySymmetric(const QString& in_path, bool ascii, +void GpgFileOpera::EncryptDirectorySymmetric(const QString& in_path, bool ascii, const QString& out_path, const GpgOperationCallback& cb) { - auto ex = std::make_shared<GFDataExchanger>(kDataExchangerSize); + auto ex = CreateStandardGFDataExchanger(); RunGpgOperaAsync( - [=](const DataObjectPtr& data_object) -> GpgError { + [=](const DataObjectPtr& data_object) { GpgData data_in(ex); GpgData data_out(out_path, false); - auto* ctx = ascii ? ctx_.DefaultContext() : ctx_.BinaryContext(); - auto err = CheckGpgError(gpgme_op_encrypt( - ctx, nullptr, GPGME_ENCRYPT_SYMMETRIC, data_in, data_out)); - data_object->Swap({ - GpgEncryptResult(gpgme_op_encrypt_result(ctx)), - }); - - return err; + return EncryptFileGpgDataImpl(ctx_, {}, data_in, ascii, data_out, + data_object); }, cb, "gpgme_op_encrypt_symmetric", "2.1.0"); - ArchiveFileOperator::NewArchive2DataExchanger( - in_path, ex, [=](GFError err, const DataObjectPtr&) { - FLOG_D("new archive 2 fd operation, err: %d", err); - }); + CreateArchiveHelper(in_path, ex); } -auto GpgFileOpera::EncryptDerectorySymmetricSync( +auto GpgFileOpera::EncryptDirectorySymmetricSync( const QString& in_path, bool ascii, const QString& out_path) -> std::tuple<GpgError, DataObjectPtr> { - auto ex = std::make_shared<GFDataExchanger>(kDataExchangerSize); - - ArchiveFileOperator::NewArchive2DataExchanger( - in_path, ex, [=](GFError err, const DataObjectPtr&) { - FLOG_D("new archive 2 fd operation, err: %d", err); - }); + auto ex = CreateStandardGFDataExchanger(); return RunGpgOperaSync( [=](const DataObjectPtr& data_object) -> GpgError { GpgData data_in(ex); GpgData data_out(out_path, false); - auto* ctx = ascii ? ctx_.DefaultContext() : ctx_.BinaryContext(); - auto err = CheckGpgError(gpgme_op_encrypt( - ctx, nullptr, GPGME_ENCRYPT_SYMMETRIC, data_in, data_out)); - data_object->Swap({ - GpgEncryptResult(gpgme_op_encrypt_result(ctx)), - }); - - return err; + return EncryptFileGpgDataImpl(ctx_, {}, data_in, ascii, data_out, + data_object); }, "gpgme_op_encrypt_symmetric", "2.1.0"); + + CreateArchiveHelper(in_path, ex); } } // namespace GpgFrontend
\ No newline at end of file diff --git a/src/core/function/gpg/GpgFileOpera.h b/src/core/function/gpg/GpgFileOpera.h index 939ddc2d..5119bb36 100644 --- a/src/core/function/gpg/GpgFileOpera.h +++ b/src/core/function/gpg/GpgFileOpera.h @@ -29,8 +29,8 @@ #pragma once #include "core/function/basic/GpgFunctionObject.h" +#include "core/function/gpg/GpgBasicOperator.h" #include "core/function/gpg/GpgContext.h" -#include "core/function/result_analyse/GpgResultAnalyse.h" #include "core/typedef/GpgTypedef.h" namespace GpgFrontend { @@ -123,7 +123,7 @@ class GPGFRONTEND_CORE_EXPORT GpgFileOpera * @param out_path * @param cb */ - void EncryptDerectorySymmetric(const QString& in_path, bool ascii, + void EncryptDirectorySymmetric(const QString& in_path, bool ascii, const QString& out_path, const GpgOperationCallback& cb); @@ -134,7 +134,7 @@ class GPGFRONTEND_CORE_EXPORT GpgFileOpera * @param ascii * @param out_path */ - auto EncryptDerectorySymmetricSync(const QString& in_path, bool ascii, + auto EncryptDirectorySymmetricSync(const QString& in_path, bool ascii, const QString& out_path) -> std::tuple<GpgError, DataObjectPtr>; @@ -296,6 +296,9 @@ class GPGFRONTEND_CORE_EXPORT GpgFileOpera private: GpgContext& ctx_ = GpgContext::GetInstance( SingletonFunctionObject::GetChannel()); ///< Corresponding context + + GpgBasicOperator& basic_opera_ = + GpgBasicOperator::GetInstance(SingletonFunctionObject::GetChannel()); }; } // namespace GpgFrontend diff --git a/src/core/function/gpg/GpgKeyGetter.cpp b/src/core/function/gpg/GpgKeyGetter.cpp index c4526e49..e5b234f8 100644 --- a/src/core/function/gpg/GpgKeyGetter.cpp +++ b/src/core/function/gpg/GpgKeyGetter.cpp @@ -73,17 +73,17 @@ class GpgKeyGetter::Impl : public SingletonFunctionObject<GpgKeyGetter::Impl> { return GpgKey(std::move(p_key)); } - auto FetchKey() -> KeyLinkListPtr { + auto FetchKey() -> GpgKeyList { if (keys_search_cache_.empty()) { FlushKeyCache(); } - auto keys_list = std::make_unique<GpgKeyLinkList>(); + auto keys_list = GpgKeyList{}; { // get the lock std::lock_guard<std::mutex> lock(keys_cache_mutex_); for (const auto& key : keys_cache_) { - keys_list->push_back(key); + keys_list.push_back(key); } } return keys_list; @@ -149,25 +149,17 @@ class GpgKeyGetter::Impl : public SingletonFunctionObject<GpgKeyGetter::Impl> { return true; } - auto GetKeys(const KeyIdArgsListPtr& ids) -> KeyListPtr { - auto keys = std::make_unique<KeyArgsList>(); - for (const auto& key_id : *ids) keys->emplace_back(GetKey(key_id, true)); + auto GetKeys(const KeyIdArgsList& ids) -> GpgKeyList { + auto keys = GpgKeyList{}; + for (const auto& key_id : ids) keys.emplace_back(GetKey(key_id, true)); return keys; } - auto GetKeysCopy(const KeyLinkListPtr& keys) -> KeyLinkListPtr { - // get the lock - std::lock_guard<std::mutex> lock(ctx_mutex_); - auto keys_copy = std::make_unique<GpgKeyLinkList>(); - for (const auto& key : *keys) keys_copy->emplace_back(key); - return keys_copy; - } - - auto GetKeysCopy(const KeyListPtr& keys) -> KeyListPtr { + auto GetKeysCopy(const GpgKeyList& keys) -> GpgKeyList { // get the lock std::lock_guard<std::mutex> lock(ctx_mutex_); - auto keys_copy = std::make_unique<KeyArgsList>(); - for (const auto& key : *keys) keys_copy->emplace_back(key); + auto keys_copy = GpgKeyList{}; + for (const auto& key : keys) keys_copy.emplace_back(key); return keys_copy; } @@ -243,19 +235,15 @@ auto GpgKeyGetter::GetPubkey(const QString& key_id, bool use_cache) -> GpgKey { auto GpgKeyGetter::FlushKeyCache() -> bool { return p_->FlushKeyCache(); } -auto GpgKeyGetter::GetKeys(const KeyIdArgsListPtr& ids) -> KeyListPtr { +auto GpgKeyGetter::GetKeys(const KeyIdArgsList& ids) -> GpgKeyList { return p_->GetKeys(ids); } -auto GpgKeyGetter::GetKeysCopy(const KeyLinkListPtr& keys) -> KeyLinkListPtr { - return p_->GetKeysCopy(keys); -} - -auto GpgKeyGetter::GetKeysCopy(const KeyListPtr& keys) -> KeyListPtr { +auto GpgKeyGetter::GetKeysCopy(const GpgKeyList& keys) -> GpgKeyList { return p_->GetKeysCopy(keys); } -auto GpgKeyGetter::FetchKey() -> KeyLinkListPtr { return p_->FetchKey(); } +auto GpgKeyGetter::FetchKey() -> GpgKeyList { return p_->FetchKey(); } auto GpgKeyGetter::GetGpgKeyTableModel() -> QSharedPointer<GpgKeyTableModel> { return p_->GetGpgKeyTableModel(); diff --git a/src/core/function/gpg/GpgKeyGetter.h b/src/core/function/gpg/GpgKeyGetter.h index f354ff49..2ed34531 100644 --- a/src/core/function/gpg/GpgKeyGetter.h +++ b/src/core/function/gpg/GpgKeyGetter.h @@ -68,7 +68,7 @@ class GPGFRONTEND_CORE_EXPORT GpgKeyGetter * @param ids * @return KeyListPtr */ - auto GetKeys(const KeyIdArgsListPtr& key_ids) -> KeyListPtr; + auto GetKeys(const KeyIdArgsList& key_ids) -> GpgKeyList; /** * @brief Get the Pubkey object @@ -83,7 +83,7 @@ class GPGFRONTEND_CORE_EXPORT GpgKeyGetter * * @return KeyLinkListPtr */ - auto FetchKey() -> KeyLinkListPtr; + auto FetchKey() -> GpgKeyList; /** * @brief flush the keys in the cache @@ -97,15 +97,7 @@ class GPGFRONTEND_CORE_EXPORT GpgKeyGetter * @param keys * @return KeyListPtr */ - auto GetKeysCopy(const KeyListPtr& keys) -> KeyListPtr; - - /** - * @brief Get the Keys Copy object - * - * @param keys - * @return KeyLinkListPtr - */ - auto GetKeysCopy(const KeyLinkListPtr& keys) -> KeyLinkListPtr; + auto GetKeysCopy(const GpgKeyList& keys) -> GpgKeyList; /** * @brief diff --git a/src/core/function/gpg/GpgKeyImportExporter.cpp b/src/core/function/gpg/GpgKeyImportExporter.cpp index fa1f908f..6c78f760 100644 --- a/src/core/function/gpg/GpgKeyImportExporter.cpp +++ b/src/core/function/gpg/GpgKeyImportExporter.cpp @@ -82,7 +82,7 @@ auto GpgKeyImportExporter::ExportKey(const GpgKey& key, bool secret, bool ascii, if (shortest) mode |= GPGME_EXPORT_MODE_MINIMAL; if (ssh_mode) mode |= GPGME_EXPORT_MODE_SSH; - std::vector<gpgme_key_t> keys_array; + QContainer<gpgme_key_t> keys_array; // Last entry data_in array has to be nullptr keys_array.emplace_back(key); @@ -114,7 +114,7 @@ void GpgKeyImportExporter::ExportKeys(const KeyArgsList& keys, bool secret, if (shortest) mode |= GPGME_EXPORT_MODE_MINIMAL; if (ssh_mode) mode |= GPGME_EXPORT_MODE_SSH; - std::vector<gpgme_key_t> keys_array(keys.begin(), keys.end()); + QContainer<gpgme_key_t> keys_array(keys.begin(), keys.end()); // Last entry data_in array has to be nullptr keys_array.emplace_back(nullptr); @@ -144,7 +144,7 @@ void GpgKeyImportExporter::ExportAllKeys(const KeyArgsList& keys, bool secret, if (keys.empty()) return GPG_ERR_CANCELED; int mode = 0; - std::vector<gpgme_key_t> keys_array(keys.begin(), keys.end()); + QContainer<gpgme_key_t> keys_array(keys.begin(), keys.end()); // Last entry data_in array has to be nullptr keys_array.emplace_back(nullptr); diff --git a/src/core/function/gpg/GpgKeyManager.cpp b/src/core/function/gpg/GpgKeyManager.cpp index d0576e59..afa775eb 100644 --- a/src/core/function/gpg/GpgKeyManager.cpp +++ b/src/core/function/gpg/GpgKeyManager.cpp @@ -61,10 +61,10 @@ auto GpgKeyManager::SignKey(const GpgKey& target, KeyArgsList& keys, } auto GpgKeyManager::RevSign(const GpgKey& key, - const SignIdArgsListPtr& signature_id) -> bool { + const SignIdArgsList& signature_id) -> bool { auto& key_getter = GpgKeyGetter::GetInstance(GetChannel()); - for (const auto& sign_id : *signature_id) { + for (const auto& sign_id : signature_id) { auto signing_key = key_getter.GetKey(sign_id.first); assert(signing_key.IsGood()); @@ -271,13 +271,8 @@ auto GpgKeyManager::RevokeSubkey(const GpgKey& key, int subkey_index, } // dealing with reason text -#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 4) - auto reason_text_lines = SecureCreateSharedObject<QList<QString>>( + auto reason_text_lines = SecureCreateSharedObject<QStringList>( reason_text.split('\n', Qt::SkipEmptyParts).toVector()); -#else - auto reason_text_lines = SecureCreateSharedObject<QVector<QString>>( - reason_text.split('\n', Qt::SkipEmptyParts).toVector()); -#endif AutomatonNextStateHandler next_state_handler = [](AutomatonState state, QString status, QString args) { diff --git a/src/core/function/gpg/GpgKeyManager.h b/src/core/function/gpg/GpgKeyManager.h index 7bd45a1c..817179e1 100644 --- a/src/core/function/gpg/GpgKeyManager.h +++ b/src/core/function/gpg/GpgKeyManager.h @@ -68,7 +68,7 @@ class GPGFRONTEND_CORE_EXPORT GpgKeyManager * @return false */ auto RevSign(const GpgFrontend::GpgKey& key, - const GpgFrontend::SignIdArgsListPtr& signature_id) -> bool; + const GpgFrontend::SignIdArgsList& signature_id) -> bool; /** * @brief Set the Expire object diff --git a/src/core/function/gpg/GpgKeyOpera.cpp b/src/core/function/gpg/GpgKeyOpera.cpp index a5346655..23a848ee 100644 --- a/src/core/function/gpg/GpgKeyOpera.cpp +++ b/src/core/function/gpg/GpgKeyOpera.cpp @@ -28,14 +28,12 @@ #include "GpgKeyOpera.h" -#include <gpg-error.h> - #include "core/GpgModel.h" #include "core/function/gpg/GpgCommandExecutor.h" #include "core/function/gpg/GpgKeyGetter.h" #include "core/model/DataObject.h" -#include "core/model/GpgGenKeyInfo.h" #include "core/model/GpgGenerateKeyResult.h" +#include "core/model/GpgKeyGenerateInfo.h" #include "core/module/ModuleManager.h" #include "core/typedef/GpgTypedef.h" #include "core/utils/AsyncUtils.h" @@ -51,9 +49,9 @@ GpgKeyOpera::GpgKeyOpera(int channel) * Delete keys * @param uidList key ids */ -void GpgKeyOpera::DeleteKeys(KeyIdArgsListPtr key_ids) { +void GpgKeyOpera::DeleteKeys(KeyIdArgsList key_ids) { GpgError err; - for (const auto& tmp : *key_ids) { + for (const auto& tmp : key_ids) { auto key = GpgKeyGetter::GetInstance(GetChannel()).GetKey(tmp); if (key.IsGood()) { err = CheckGpgError(gpgme_op_delete_ext( @@ -112,15 +110,8 @@ void GpgKeyOpera::GenerateRevokeCert(const GpgKey& key, << "text:" << revocation_reason_text; // dealing with reason text -#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 4) - auto reason_text_lines = - GpgFrontend::SecureCreateSharedObject<QList<QString>>( - revocation_reason_text.split('\n', Qt::SkipEmptyParts).toVector()); -#else - auto reason_text_lines = - GpgFrontend::SecureCreateSharedObject<QVector<QString>>( - revocation_reason_text.split('\n', Qt::SkipEmptyParts).toVector()); -#endif + auto reason_text_lines = GpgFrontend::SecureCreateSharedObject<QStringList>( + revocation_reason_text.split('\n', Qt::SkipEmptyParts).toVector()); const auto app_path = Module::RetrieveRTValueTypedOrDefault<>( "core", "gpgme.ctx.app_path", QString{}); @@ -170,337 +161,174 @@ void GpgKeyOpera::GenerateRevokeCert(const GpgKey& key, }}); } +auto GenerateKeyImpl(GpgContext& ctx, + const QSharedPointer<KeyGenerateInfo>& params, + const DataObjectPtr& data_object) -> GpgError { + if (params == nullptr || params->GetAlgo() == KeyGenerateInfo::kNoneAlgo || + params->IsSubKey()) { + return GPG_ERR_CANCELED; + } + + const auto userid = params->GetUserid(); + const auto algo = params->GetAlgo().Id(); + + unsigned long expires = + QDateTime::currentDateTime().secsTo(params->GetExpireTime()); + + GpgError err; + unsigned int flags = 0; + + if (!params->IsSubKey()) flags |= GPGME_CREATE_CERT; + if (params->IsAllowEncr()) flags |= GPGME_CREATE_ENCR; + if (params->IsAllowSign()) flags |= GPGME_CREATE_SIGN; + if (params->IsAllowAuth()) flags |= GPGME_CREATE_AUTH; + if (params->IsNonExpired()) flags |= GPGME_CREATE_NOEXPIRE; + if (params->IsNoPassPhrase()) flags |= GPGME_CREATE_NOPASSWD; + + LOG_D() << "key generation args: " << userid << algo << expires << flags; + LOG_D() << "key generation flags" << params->IsAllowEncr() + << params->IsAllowSign() << params->IsAllowAuth() + << !params->IsSubKey(); + + err = gpgme_op_createkey(ctx.DefaultContext(), userid.toUtf8(), algo.toUtf8(), + 0, expires, nullptr, flags); + + if (CheckGpgError(err) == GPG_ERR_NO_ERROR) { + data_object->Swap( + {GpgGenerateKeyResult{gpgme_op_genkey_result(ctx.DefaultContext())}}); + } else { + data_object->Swap({GpgGenerateKeyResult{}}); + } + + return CheckGpgError(err); +} + /** * Generate a new key pair * @param params key generation args * @return error information */ -void GpgKeyOpera::GenerateKey(const std::shared_ptr<GenKeyInfo>& params, +void GpgKeyOpera::GenerateKey(const QSharedPointer<KeyGenerateInfo>& params, const GpgOperationCallback& callback) { RunGpgOperaAsync( - [&ctx = ctx_, params](const DataObjectPtr& data_object) -> GpgError { - auto userid = params->GetUserid(); - auto algo = params->GetAlgo() + params->GetKeySizeStr(); - - LOG_D() << "params: " << params->GetAlgo() << params->GetKeySizeStr(); - - unsigned long expires = - QDateTime::currentDateTime().secsTo(params->GetExpireTime()); - - GpgError err; - unsigned int flags = 0; - - if (!params->IsSubKey()) flags |= GPGME_CREATE_CERT; - if (params->IsAllowEncryption()) flags |= GPGME_CREATE_ENCR; - if (params->IsAllowSigning()) flags |= GPGME_CREATE_SIGN; - if (params->IsAllowAuthentication()) flags |= GPGME_CREATE_AUTH; - if (params->IsNonExpired()) flags |= GPGME_CREATE_NOEXPIRE; - if (params->IsNoPassPhrase()) flags |= GPGME_CREATE_NOPASSWD; - - LOG_D() << "key generation args: " << userid << algo << expires - << flags; - - err = gpgme_op_createkey(ctx.DefaultContext(), userid.toUtf8(), - algo.toUtf8(), 0, expires, nullptr, flags); - assert(gpg_err_code(err) == GPG_ERR_NO_ERROR); - - if (CheckGpgError(err) == GPG_ERR_NO_ERROR) { - data_object->Swap({GpgGenerateKeyResult{ - gpgme_op_genkey_result(ctx.DefaultContext())}}); - } else { - data_object->Swap({GpgGenerateKeyResult{}}); - } - - return CheckGpgError(err); + [=](const DataObjectPtr& data_object) -> GpgError { + return GenerateKeyImpl(ctx_, params, data_object); }, callback, "gpgme_op_createkey", "2.1.0"); } -auto GpgKeyOpera::GenerateKeySync(const std::shared_ptr<GenKeyInfo>& params) +auto GpgKeyOpera::GenerateKeySync(const QSharedPointer<KeyGenerateInfo>& params) -> std::tuple<GpgError, DataObjectPtr> { return RunGpgOperaSync( - [=, &ctx = ctx_](const DataObjectPtr& data_object) -> GpgError { - auto userid = params->GetUserid(); - auto algo = params->GetAlgo() + params->GetKeySizeStr(); - - LOG_D() << "params: " << params->GetAlgo() << params->GetKeySizeStr(); - - unsigned long expires = - QDateTime::currentDateTime().secsTo(params->GetExpireTime()); - - GpgError err; - unsigned int flags = 0; - - if (!params->IsSubKey()) flags |= GPGME_CREATE_CERT; - if (params->IsAllowEncryption()) flags |= GPGME_CREATE_ENCR; - if (params->IsAllowSigning()) flags |= GPGME_CREATE_SIGN; - if (params->IsAllowAuthentication()) flags |= GPGME_CREATE_AUTH; - if (params->IsNonExpired()) flags |= GPGME_CREATE_NOEXPIRE; - if (params->IsNoPassPhrase()) flags |= GPGME_CREATE_NOPASSWD; - - LOG_D() << "key generation args: " << userid << algo << expires - << flags; + [=](const DataObjectPtr& data_object) -> GpgError { + return GenerateKeyImpl(ctx_, params, data_object); + }, + "gpgme_op_createkey", "2.1.0"); +} - err = gpgme_op_createkey(ctx.DefaultContext(), userid.toUtf8(), - algo.toUtf8(), 0, expires, nullptr, flags); - assert(gpg_err_code(err) == GPG_ERR_NO_ERROR); +auto GenerateSubKeyImpl(GpgContext& ctx, const GpgKey& key, + const QSharedPointer<KeyGenerateInfo>& params, + const DataObjectPtr& data_object) -> GpgError { + if (params == nullptr || params->GetAlgo() == KeyGenerateInfo::kNoneAlgo || + !params->IsSubKey()) { + return GPG_ERR_CANCELED; + } - if (CheckGpgError(err) == GPG_ERR_NO_ERROR) { - data_object->Swap({GpgGenerateKeyResult{ - gpgme_op_genkey_result(ctx.DefaultContext())}}); - } else { - data_object->Swap({GpgGenerateKeyResult{}}); - } + auto algo = params->GetAlgo().Id(); + unsigned long expires = + QDateTime::currentDateTime().secsTo(params->GetExpireTime()); + unsigned int flags = 0; + + if (!params->IsSubKey()) flags |= GPGME_CREATE_CERT; + if (params->IsAllowEncr()) flags |= GPGME_CREATE_ENCR; + if (params->IsAllowSign()) flags |= GPGME_CREATE_SIGN; + if (params->IsAllowAuth()) flags |= GPGME_CREATE_AUTH; + if (params->IsNonExpired()) flags |= GPGME_CREATE_NOEXPIRE; + if (params->IsNoPassPhrase()) flags |= GPGME_CREATE_NOPASSWD; + + LOG_D() << "subkey generation args: " << key.GetId() << algo << expires + << flags; + + auto err = + gpgme_op_createsubkey(ctx.DefaultContext(), static_cast<gpgme_key_t>(key), + algo.toLatin1(), 0, expires, flags); + if (CheckGpgError(err) != GPG_ERR_NO_ERROR) { + data_object->Swap({GpgGenerateKeyResult{}}); + return err; + } - return CheckGpgError(err); - }, - "gpgme_op_createkey", "2.1.0"); + data_object->Swap( + {GpgGenerateKeyResult{gpgme_op_genkey_result(ctx.DefaultContext())}}); + return CheckGpgError(err); } void GpgKeyOpera::GenerateSubkey(const GpgKey& key, - const std::shared_ptr<GenKeyInfo>& params, + const QSharedPointer<KeyGenerateInfo>& params, const GpgOperationCallback& callback) { RunGpgOperaAsync( - [key, &ctx = ctx_, params](const DataObjectPtr& data_object) -> GpgError { - if (!params->IsSubKey()) return GPG_ERR_CANCELED; - - LOG_D() << "generate subkey algo: " << params->GetAlgo() - << "key size: " << params->GetKeySizeStr(); - - auto algo = params->GetAlgo() + params->GetKeySizeStr(); - unsigned long expires = - QDateTime::currentDateTime().secsTo(params->GetExpireTime()); - unsigned int flags = 0; - - if (!params->IsSubKey()) flags |= GPGME_CREATE_CERT; - if (params->IsAllowEncryption()) flags |= GPGME_CREATE_ENCR; - if (params->IsAllowSigning()) flags |= GPGME_CREATE_SIGN; - if (params->IsAllowAuthentication()) flags |= GPGME_CREATE_AUTH; - if (params->IsNonExpired()) flags |= GPGME_CREATE_NOEXPIRE; - if (params->IsNoPassPhrase()) flags |= GPGME_CREATE_NOPASSWD; - - LOG_D() << "subkey generation args: " << key.GetId() << algo << expires - << flags; - - auto err = gpgme_op_createsubkey(ctx.DefaultContext(), - static_cast<gpgme_key_t>(key), - algo.toLatin1(), 0, expires, flags); - if (CheckGpgError(err) != GPG_ERR_NO_ERROR) { - data_object->Swap({GpgGenerateKeyResult{}}); - return err; - } - - data_object->Swap({GpgGenerateKeyResult{ - gpgme_op_genkey_result(ctx.DefaultContext())}}); - return CheckGpgError(err); + [=](const DataObjectPtr& data_object) -> GpgError { + return GenerateSubKeyImpl(ctx_, key, params, data_object); }, callback, "gpgme_op_createsubkey", "2.1.13"); } -auto GpgKeyOpera::GenerateSubkeySync(const GpgKey& key, - const std::shared_ptr<GenKeyInfo>& params) +auto GpgKeyOpera::GenerateSubkeySync( + const GpgKey& key, const QSharedPointer<KeyGenerateInfo>& params) -> std::tuple<GpgError, DataObjectPtr> { return RunGpgOperaSync( - [key, &ctx = ctx_, params](const DataObjectPtr& data_object) -> GpgError { - if (!params->IsSubKey()) return GPG_ERR_CANCELED; - - LOG_D() << "generate subkey algo: " << params->GetAlgo() - << " key size: " << params->GetKeySizeStr(); - - auto algo = params->GetAlgo() + params->GetKeySizeStr(); - unsigned long expires = - QDateTime::currentDateTime().secsTo(params->GetExpireTime()); - unsigned int flags = 0; - - if (!params->IsSubKey()) flags |= GPGME_CREATE_CERT; - if (params->IsAllowEncryption()) flags |= GPGME_CREATE_ENCR; - if (params->IsAllowSigning()) flags |= GPGME_CREATE_SIGN; - if (params->IsAllowAuthentication()) flags |= GPGME_CREATE_AUTH; - if (params->IsNonExpired()) flags |= GPGME_CREATE_NOEXPIRE; - if (params->IsNoPassPhrase()) flags |= GPGME_CREATE_NOPASSWD; - - LOG_D() << " args: " << key.GetId() << algo << expires << flags; - - auto err = gpgme_op_createsubkey(ctx.DefaultContext(), - static_cast<gpgme_key_t>(key), - algo.toLatin1(), 0, expires, flags); - - if (CheckGpgError(err) != GPG_ERR_NO_ERROR) { - data_object->Swap({GpgGenerateKeyResult{}}); - return err; - } - - data_object->Swap({GpgGenerateKeyResult{ - gpgme_op_genkey_result(ctx.DefaultContext())}}); - return CheckGpgError(err); + [=](const DataObjectPtr& data_object) -> GpgError { + return GenerateSubKeyImpl(ctx_, key, params, data_object); }, "gpgme_op_createsubkey", "2.1.13"); } +auto GenerateKeyWithSubkeyImpl(GpgContext& ctx, GpgKeyGetter& key_getter, + const QSharedPointer<KeyGenerateInfo>& p_params, + const QSharedPointer<KeyGenerateInfo>& s_params, + const DataObjectPtr& data_object) -> GpgError { + auto err = GenerateKeyImpl(ctx, p_params, data_object); + + if (err != GPG_ERR_NO_ERROR) return err; + if (!data_object->Check<GpgGenerateKeyResult>()) return GPG_ERR_CANCELED; + + auto result = ExtractParams<GpgGenerateKeyResult>(data_object, 0); + auto key = key_getter.GetKey(result.GetFingerprint()); + if (!key.IsGood()) { + LOG_W() << "cannot get key which has been generated, fpr: " + << result.GetFingerprint(); + return GPG_ERR_CANCELED; + } + + if (s_params == nullptr) return err; + + data_object->Swap({}); + err = GenerateSubKeyImpl(ctx, key, s_params, data_object); + auto s_result = ExtractParams<GpgGenerateKeyResult>(data_object, 0); + + data_object->Swap({result, s_result}); + return err; +} + void GpgKeyOpera::GenerateKeyWithSubkey( - const std::shared_ptr<GenKeyInfo>& params, - const std::shared_ptr<GenKeyInfo>& subkey_params, + const QSharedPointer<KeyGenerateInfo>& p_params, + const QSharedPointer<KeyGenerateInfo>& s_params, const GpgOperationCallback& callback) { RunGpgOperaAsync( - [&ctx = ctx_, params, subkey_params, - channel = GetChannel()](const DataObjectPtr& data_object) -> GpgError { - auto userid = params->GetUserid().toUtf8(); - auto algo = (params->GetAlgo() + params->GetKeySizeStr()).toUtf8(); - unsigned long expires = - QDateTime::currentDateTime().secsTo(params->GetExpireTime()); - - GpgError err; - unsigned int flags = 0; - - if (!params->IsSubKey()) flags |= GPGME_CREATE_CERT; - if (params->IsAllowEncryption()) flags |= GPGME_CREATE_ENCR; - if (params->IsAllowSigning()) flags |= GPGME_CREATE_SIGN; - if (params->IsAllowAuthentication()) flags |= GPGME_CREATE_AUTH; - if (params->IsNonExpired()) flags |= GPGME_CREATE_NOEXPIRE; - if (params->IsNoPassPhrase()) flags |= GPGME_CREATE_NOPASSWD; - - LOG_D() << "key generation args: " << userid << algo << expires - << flags; - - err = gpgme_op_createkey(ctx.DefaultContext(), userid, algo, 0, expires, - nullptr, flags); - assert(gpg_err_code(err) == GPG_ERR_NO_ERROR); - - if (CheckGpgError(err) != GPG_ERR_NO_ERROR) { - data_object->Swap({GpgGenerateKeyResult{}}); - return err; - } - - auto genkey_result = - GpgGenerateKeyResult{gpgme_op_genkey_result(ctx.DefaultContext())}; - - if (subkey_params == nullptr || !subkey_params->IsSubKey()) { - data_object->Swap({genkey_result}); - return err; - } - - auto key = GpgKeyGetter::GetInstance(channel).GetKey( - genkey_result.GetFingerprint()); - if (!key.IsGood()) { - LOG_W() << "cannot get key which has been generate, fpr: " - << genkey_result.GetFingerprint(); - return err; - } - - algo = (subkey_params->GetAlgo() + subkey_params->GetKeySizeStr()) - .toUtf8(); - expires = - QDateTime::currentDateTime().secsTo(subkey_params->GetExpireTime()); - - flags = 0; - if (subkey_params->IsAllowEncryption()) flags |= GPGME_CREATE_ENCR; - if (subkey_params->IsAllowSigning()) flags |= GPGME_CREATE_SIGN; - if (subkey_params->IsAllowAuthentication()) flags |= GPGME_CREATE_AUTH; - if (subkey_params->IsNonExpired()) flags |= GPGME_CREATE_NOEXPIRE; - if (subkey_params->IsNoPassPhrase()) flags |= GPGME_CREATE_NOPASSWD; - - LOG_D() << "subkey generation args: " << key.GetId() << algo << expires - << flags; - - err = gpgme_op_createsubkey(ctx.DefaultContext(), - static_cast<gpgme_key_t>(key), algo, 0, - expires, flags); - - if (CheckGpgError(err) == GPG_ERR_NO_ERROR) { - data_object->Swap( - {genkey_result, GpgGenerateKeyResult{gpgme_op_genkey_result( - ctx.DefaultContext())}}); - } else { - data_object->Swap({genkey_result, GpgGenerateKeyResult{}}); - } - - return CheckGpgError(err); + [=](const DataObjectPtr& data_object) -> GpgError { + return GenerateKeyWithSubkeyImpl(ctx_, key_getter_, p_params, s_params, + data_object); }, callback, "gpgme_op_createkey&gpgme_op_createsubkey", "2.1.0"); } auto GpgKeyOpera::GenerateKeyWithSubkeySync( - const std::shared_ptr<GenKeyInfo>& params, - const std::shared_ptr<GenKeyInfo>& subkey_params) + const QSharedPointer<KeyGenerateInfo>& p_params, + const QSharedPointer<KeyGenerateInfo>& s_params) -> std::tuple<GpgError, DataObjectPtr> { return RunGpgOperaSync( - [&ctx = ctx_, params, subkey_params, - channel = GetChannel()](const DataObjectPtr& data_object) -> GpgError { - auto userid = params->GetUserid().toUtf8(); - auto algo = (params->GetAlgo() + params->GetKeySizeStr()).toUtf8(); - unsigned long expires = - QDateTime::currentDateTime().secsTo(params->GetExpireTime()); - - GpgError err; - unsigned int flags = 0; - - if (!params->IsSubKey()) flags |= GPGME_CREATE_CERT; - if (params->IsAllowEncryption()) flags |= GPGME_CREATE_ENCR; - if (params->IsAllowSigning()) flags |= GPGME_CREATE_SIGN; - if (params->IsAllowAuthentication()) flags |= GPGME_CREATE_AUTH; - if (params->IsNonExpired()) flags |= GPGME_CREATE_NOEXPIRE; - if (params->IsNoPassPhrase()) flags |= GPGME_CREATE_NOPASSWD; - - LOG_D() << "key generation args: " << userid << algo << expires - << flags; - - err = gpgme_op_createkey(ctx.DefaultContext(), userid, algo, 0, expires, - nullptr, flags); - assert(gpg_err_code(err) == GPG_ERR_NO_ERROR); - - if (CheckGpgError(err) != GPG_ERR_NO_ERROR) { - data_object->Swap({GpgGenerateKeyResult{}}); - return err; - } - - auto genkey_result = - GpgGenerateKeyResult{gpgme_op_genkey_result(ctx.DefaultContext())}; - - if (subkey_params == nullptr || !subkey_params->IsSubKey()) { - data_object->Swap({genkey_result}); - return err; - } - - auto key = GpgKeyGetter::GetInstance(channel).GetKey( - genkey_result.GetFingerprint()); - if (!key.IsGood()) { - LOG_W() << "cannot get key which has been generate, fpr: " - << genkey_result.GetFingerprint(); - return err; - } - - LOG_D() << "try to generate subkey of key: " << key.GetId() - << ", algo :" << subkey_params->GetAlgo() - << ", key size: " << subkey_params->GetKeySizeStr(); - - algo = (subkey_params->GetAlgo() + subkey_params->GetKeySizeStr()) - .toUtf8(); - expires = - QDateTime::currentDateTime().secsTo(subkey_params->GetExpireTime()); - - flags = 0; - if (subkey_params->IsAllowEncryption()) flags |= GPGME_CREATE_ENCR; - if (subkey_params->IsAllowSigning()) flags |= GPGME_CREATE_SIGN; - if (subkey_params->IsAllowAuthentication()) flags |= GPGME_CREATE_AUTH; - if (subkey_params->IsNonExpired()) flags |= GPGME_CREATE_NOEXPIRE; - if (subkey_params->IsNoPassPhrase()) flags |= GPGME_CREATE_NOPASSWD; - - LOG_D() << "subkey generation args: " << key.GetId() << algo << expires - << flags; - - err = gpgme_op_createsubkey(ctx.DefaultContext(), - static_cast<gpgme_key_t>(key), algo, 0, - expires, flags); - - if (CheckGpgError(err) == GPG_ERR_NO_ERROR) { - data_object->Swap( - {genkey_result, GpgGenerateKeyResult{gpgme_op_genkey_result( - ctx.DefaultContext())}}); - } else { - data_object->Swap({genkey_result, GpgGenerateKeyResult{}}); - } - - return CheckGpgError(err); + [=](const DataObjectPtr& data_object) -> GpgError { + return GenerateKeyWithSubkeyImpl(ctx_, key_getter_, p_params, s_params, + data_object); }, "gpgme_op_createkey&gpgme_op_createsubkey", "2.1.0"); } @@ -532,8 +360,8 @@ auto GpgKeyOpera::ModifyTOFUPolicy( } void GpgKeyOpera::DeleteKey(const KeyId& key_id) { - auto keys = std::make_unique<KeyIdArgsList>(); - keys->push_back(key_id); - DeleteKeys(std::move(keys)); + auto keys = KeyIdArgsList{}; + keys.push_back(key_id); + DeleteKeys(keys); } } // namespace GpgFrontend diff --git a/src/core/function/gpg/GpgKeyOpera.h b/src/core/function/gpg/GpgKeyOpera.h index 7b8a01a1..f6b7143e 100644 --- a/src/core/function/gpg/GpgKeyOpera.h +++ b/src/core/function/gpg/GpgKeyOpera.h @@ -31,6 +31,7 @@ #include <functional> #include "core/function/gpg/GpgContext.h" +#include "core/function/gpg/GpgKeyGetter.h" #include "core/typedef/GpgTypedef.h" namespace GpgFrontend { @@ -38,7 +39,7 @@ namespace GpgFrontend { * @brief * */ -class GenKeyInfo; +class KeyGenerateInfo; /** * @brief @@ -60,7 +61,7 @@ class GPGFRONTEND_CORE_EXPORT GpgKeyOpera * * @param key_ids */ - void DeleteKeys(KeyIdArgsListPtr key_ids); + void DeleteKeys(KeyIdArgsList key_ids); /** * @brief @@ -114,7 +115,7 @@ class GPGFRONTEND_CORE_EXPORT GpgKeyOpera * @param result * @return GpgFrontend::GpgError */ - void GenerateKey(const std::shared_ptr<GenKeyInfo>&, + void GenerateKey(const QSharedPointer<KeyGenerateInfo>&, const GpgOperationCallback&); /** @@ -122,7 +123,7 @@ class GPGFRONTEND_CORE_EXPORT GpgKeyOpera * * @param params */ - auto GenerateKeySync(const std::shared_ptr<GenKeyInfo>& params) + auto GenerateKeySync(const QSharedPointer<KeyGenerateInfo>& params) -> std::tuple<GpgError, DataObjectPtr>; /** @@ -133,7 +134,7 @@ class GPGFRONTEND_CORE_EXPORT GpgKeyOpera * @return GpgFrontend::GpgError */ void GenerateSubkey(const GpgKey& key, - const std::shared_ptr<GenKeyInfo>& params, + const QSharedPointer<KeyGenerateInfo>& params, const GpgOperationCallback&); /** @@ -143,7 +144,7 @@ class GPGFRONTEND_CORE_EXPORT GpgKeyOpera * @param params */ auto GenerateSubkeySync(const GpgKey& key, - const std::shared_ptr<GenKeyInfo>& params) + const QSharedPointer<KeyGenerateInfo>& params) -> std::tuple<GpgError, DataObjectPtr>; /** @@ -153,8 +154,8 @@ class GPGFRONTEND_CORE_EXPORT GpgKeyOpera * @param subkey_params * @param callback */ - void GenerateKeyWithSubkey(const std::shared_ptr<GenKeyInfo>& params, - const std::shared_ptr<GenKeyInfo>& subkey_params, + void GenerateKeyWithSubkey(const QSharedPointer<KeyGenerateInfo>& p_params, + const QSharedPointer<KeyGenerateInfo>& s_params, const GpgOperationCallback& callback); /** @@ -165,12 +166,15 @@ class GPGFRONTEND_CORE_EXPORT GpgKeyOpera * @param callback */ auto GenerateKeyWithSubkeySync( - const std::shared_ptr<GenKeyInfo>& params, - const std::shared_ptr<GenKeyInfo>& subkey_params) + const QSharedPointer<KeyGenerateInfo>& p_params, + const QSharedPointer<KeyGenerateInfo>& s_params) -> std::tuple<GpgError, DataObjectPtr>; private: GpgContext& ctx_ = GpgContext::GetInstance(SingletonFunctionObject::GetChannel()); ///< + + GpgKeyGetter& key_getter_ = + GpgKeyGetter::GetInstance(SingletonFunctionObject::GetChannel()); ///< }; } // namespace GpgFrontend diff --git a/src/core/function/gpg/GpgUIDOperator.cpp b/src/core/function/gpg/GpgUIDOperator.cpp index 3fc506f4..e87a710d 100644 --- a/src/core/function/gpg/GpgUIDOperator.cpp +++ b/src/core/function/gpg/GpgUIDOperator.cpp @@ -155,15 +155,8 @@ auto GpgUIDOperator::RevokeUID(const GpgKey& key, int uid_index, } // dealing with reason text -#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 4) - auto reason_text_lines = - GpgFrontend::SecureCreateSharedObject<QList<QString>>( - reason_text.split('\n', Qt::SkipEmptyParts).toVector()); -#else - auto reason_text_lines = - GpgFrontend::SecureCreateSharedObject<QVector<QString>>( - reason_text.split('\n', Qt::SkipEmptyParts).toVector()); -#endif + auto reason_text_lines = GpgFrontend::SecureCreateSharedObject<QStringList>( + reason_text.split('\n', Qt::SkipEmptyParts).toVector()); AutomatonNextStateHandler next_state_handler = [](AutomatonState state, QString status, diff --git a/src/core/function/result_analyse/GpgResultAnalyse.h b/src/core/function/result_analyse/GpgResultAnalyse.h index ce47764c..fa84ddb4 100644 --- a/src/core/function/result_analyse/GpgResultAnalyse.h +++ b/src/core/function/result_analyse/GpgResultAnalyse.h @@ -27,10 +27,6 @@ */ #pragma once -#include <sstream> - -#include "core/typedef/GpgTypedef.h" - namespace GpgFrontend { class GPGFRONTEND_CORE_EXPORT GpgResultAnalyse : public QObject { diff --git a/src/core/function/result_analyse/GpgVerifyResultAnalyse.cpp b/src/core/function/result_analyse/GpgVerifyResultAnalyse.cpp index 9512189d..e2fc21f0 100644 --- a/src/core/function/result_analyse/GpgVerifyResultAnalyse.cpp +++ b/src/core/function/result_analyse/GpgVerifyResultAnalyse.cpp @@ -256,6 +256,6 @@ auto GpgFrontend::GpgVerifyResultAnalyse::TakeChargeOfResult() } auto GpgFrontend::GpgVerifyResultAnalyse::GetUnknownSignatures() const - -> QList<QString> { + -> QStringList { return unknown_signer_fpr_list_; } diff --git a/src/core/function/result_analyse/GpgVerifyResultAnalyse.h b/src/core/function/result_analyse/GpgVerifyResultAnalyse.h index b3e318b8..719bb107 100644 --- a/src/core/function/result_analyse/GpgVerifyResultAnalyse.h +++ b/src/core/function/result_analyse/GpgVerifyResultAnalyse.h @@ -65,9 +65,9 @@ class GPGFRONTEND_CORE_EXPORT GpgVerifyResultAnalyse : public GpgResultAnalyse { /** * @brief Get the Unknown Signatures object * - * @return QList<QString> + * @return QStringList */ - [[nodiscard]] auto GetUnknownSignatures() const -> QList<QString>; + [[nodiscard]] auto GetUnknownSignatures() const -> QStringList; protected: /** @@ -99,7 +99,7 @@ class GPGFRONTEND_CORE_EXPORT GpgVerifyResultAnalyse : public GpgResultAnalyse { GpgError error_; ///< GpgVerifyResult result_; ///< - QList<QString> unknown_signer_fpr_list_; + QStringList unknown_signer_fpr_list_; }; } // namespace GpgFrontend diff --git a/src/core/model/DataObject.cpp b/src/core/model/DataObject.cpp index 2819065d..13838941 100644 --- a/src/core/model/DataObject.cpp +++ b/src/core/model/DataObject.cpp @@ -28,7 +28,7 @@ #include "DataObject.h" -#include <stack> +#include "core/typedef/CoreTypedef.h" namespace GpgFrontend { @@ -50,7 +50,7 @@ class DataObject::Impl { auto GetObjectSize() -> size_t { return params_.size(); } private: - std::vector<std::any> params_; + QContainer<std::any> params_; }; DataObject::DataObject() : p_(SecureCreateUniqueObject<Impl>()) {} diff --git a/src/core/model/DataObject.h b/src/core/model/DataObject.h index f67cff99..1713e8dd 100644 --- a/src/core/model/DataObject.h +++ b/src/core/model/DataObject.h @@ -33,13 +33,11 @@ #include <typeinfo> #include "core/GpgFrontendCoreExport.h" +#include "core/typedef/CoreTypedef.h" #include "core/utils/MemoryUtils.h" namespace GpgFrontend { -class DataObject; -using DataObjectPtr = std::shared_ptr<DataObject>; ///< - class GPGFRONTEND_CORE_EXPORT DataObject { public: DataObject(); @@ -66,7 +64,7 @@ class GPGFRONTEND_CORE_EXPORT DataObject { auto Check() -> bool { if (sizeof...(Args) != GetObjectSize()) return false; - std::vector<std::type_info const*> type_list = {&typeid(Args)...}; + QContainer<std::type_info const*> type_list = {&typeid(Args)...}; for (size_t i = 0; i < type_list.size(); ++i) { if (std::type_index(*type_list[i]) != std::type_index((*this)[i].type())) { diff --git a/src/core/model/GFDataExchanger.h b/src/core/model/GFDataExchanger.h index dca27b0e..1082b011 100644 --- a/src/core/model/GFDataExchanger.h +++ b/src/core/model/GFDataExchanger.h @@ -28,10 +28,14 @@ #pragma once +#include <cstddef> #include <queue> namespace GpgFrontend { +constexpr ssize_t kDataExchangerSize = + static_cast<const ssize_t>(1024 * 1024 * 8); // 8 MB + class GFDataExchanger { public: explicit GFDataExchanger(ssize_t size); @@ -50,4 +54,8 @@ class GFDataExchanger { std::atomic_bool close_ = false; }; +inline auto CreateStandardGFDataExchanger() -> QSharedPointer<GFDataExchanger> { + return QSharedPointer<GFDataExchanger>::create(kDataExchangerSize); +} + } // namespace GpgFrontend
\ No newline at end of file diff --git a/src/core/model/GpgData.cpp b/src/core/model/GpgData.cpp index 34992b9b..7453ae48 100644 --- a/src/core/model/GpgData.cpp +++ b/src/core/model/GpgData.cpp @@ -104,7 +104,7 @@ GpgData::GpgData(const QString& path, bool read) { data_ref_ = std::unique_ptr<struct gpgme_data, DataRefDeleter>(data); } -GpgData::GpgData(std::shared_ptr<GFDataExchanger> ex) +GpgData::GpgData(QSharedPointer<GFDataExchanger> ex) : data_cbs_(), data_ex_(std::move(ex)) { gpgme_data_t data; diff --git a/src/core/model/GpgData.h b/src/core/model/GpgData.h index ed56d0da..7f1d74c4 100644 --- a/src/core/model/GpgData.h +++ b/src/core/model/GpgData.h @@ -71,7 +71,7 @@ class GPGFRONTEND_CORE_EXPORT GpgData { * * @param fd */ - explicit GpgData(std::shared_ptr<GFDataExchanger>); + explicit GpgData(QSharedPointer<GFDataExchanger>); /** * @brief Construct a new Gpg Data object @@ -124,7 +124,7 @@ class GPGFRONTEND_CORE_EXPORT GpgData { int fd_ = -1; struct gpgme_data_cbs data_cbs_; - std::shared_ptr<GFDataExchanger> data_ex_; + QSharedPointer<GFDataExchanger> data_ex_; }; } // namespace GpgFrontend diff --git a/src/core/model/GpgDecryptResult.cpp b/src/core/model/GpgDecryptResult.cpp index 3b6ebd67..82398d96 100644 --- a/src/core/model/GpgDecryptResult.cpp +++ b/src/core/model/GpgDecryptResult.cpp @@ -48,8 +48,8 @@ auto GpgDecryptResult::GetRaw() -> gpgme_decrypt_result_t { return result_ref_.get(); } -auto GpgDecryptResult::Recipients() -> std::vector<GpgRecipient> { - std::vector<GpgRecipient> result; +auto GpgDecryptResult::Recipients() -> QContainer<GpgRecipient> { + QContainer<GpgRecipient> result; for (auto* reci = result_ref_->recipients; reci != nullptr; reci = reci->next) { try { diff --git a/src/core/model/GpgDecryptResult.h b/src/core/model/GpgDecryptResult.h index 8528adc8..1b755868 100644 --- a/src/core/model/GpgDecryptResult.h +++ b/src/core/model/GpgDecryptResult.h @@ -39,7 +39,7 @@ class GPGFRONTEND_CORE_EXPORT GpgDecryptResult { auto GetRaw() -> gpgme_decrypt_result_t; - auto Recipients() -> std::vector<GpgRecipient>; + auto Recipients() -> QContainer<GpgRecipient>; explicit GpgDecryptResult(gpgme_decrypt_result_t); diff --git a/src/core/model/GpgEncryptResult.cpp b/src/core/model/GpgEncryptResult.cpp index b452b6f3..b5af09b1 100644 --- a/src/core/model/GpgEncryptResult.cpp +++ b/src/core/model/GpgEncryptResult.cpp @@ -48,8 +48,8 @@ auto GpgEncryptResult::GetRaw() -> gpgme_encrypt_result_t { } auto GpgEncryptResult::InvalidRecipients() - -> std::vector<std::tuple<QString, GpgError>> { - std::vector<std::tuple<QString, GpgError>> result; + -> QContainer<std::tuple<QString, GpgError>> { + QContainer<std::tuple<QString, GpgError>> result; for (auto* invalid_key = result_ref_->invalid_recipients; invalid_key != nullptr; invalid_key = invalid_key->next) { try { diff --git a/src/core/model/GpgEncryptResult.h b/src/core/model/GpgEncryptResult.h index a534d156..97a52a03 100644 --- a/src/core/model/GpgEncryptResult.h +++ b/src/core/model/GpgEncryptResult.h @@ -38,7 +38,7 @@ class GPGFRONTEND_CORE_EXPORT GpgEncryptResult { auto GetRaw() -> gpgme_encrypt_result_t; - auto InvalidRecipients() -> std::vector<std::tuple<QString, GpgError>>; + auto InvalidRecipients() -> QContainer<std::tuple<QString, GpgError>>; explicit GpgEncryptResult(gpgme_encrypt_result_t); diff --git a/src/core/model/GpgGenKeyInfo.cpp b/src/core/model/GpgGenKeyInfo.cpp deleted file mode 100644 index 1aaa4cea..00000000 --- a/src/core/model/GpgGenKeyInfo.cpp +++ /dev/null @@ -1,593 +0,0 @@ -/** - * Copyright (C) 2021-2024 Saturneric <[email protected]> - * - * This file is part of GpgFrontend. - * - * GpgFrontend is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * GpgFrontend is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GpgFrontend. If not, see <https://www.gnu.org/licenses/>. - * - * The initial version of the source code is inherited from - * the gpg4usb project, which is under GPL-3.0-or-later. - * - * All the source code of GpgFrontend was modified and released by - * Saturneric <[email protected]> starting on May 12, 2021. - * - * SPDX-License-Identifier: GPL-3.0-or-later - * - */ - -#include "GpgGenKeyInfo.h" - -#include <cassert> - -#include "module/ModuleManager.h" -#include "utils/CommonUtils.h" - -namespace GpgFrontend { - -void GenKeyInfo::SetAlgo(const QString &t_algo_args) { - auto algo_args = t_algo_args.toLower(); - - // reset all options - reset_options(); - - if (!this->subkey_) { - this->SetAllowCertification(true); - - } else { - this->SetAllowCertification(false); - } - - this->allow_change_certification_ = false; - - if (algo_args == "rsa") { - /** - * RSA is the world’s premier asymmetric cryptographic algorithm, - * and is built on the difficulty of factoring extremely large composites. - * GnuPG supports RSA with key sizes of between 1024 and 4096 bits. - */ - suggest_min_key_size_ = 1024; - suggest_max_key_size_ = 4096; - suggest_size_addition_step_ = 1024; - SetKeyLength(2048); - - } else if (algo_args == "dsa") { - /** - * Algorithm (DSA) as a government standard for digital signatures. - * Originally, it supported key lengths between 512 and 1024 bits. - * Recently, NIST has declared 512-bit keys obsolete: - * now, DSA is available in 1024, 2048 and 3072-bit lengths. - */ - - SetAllowEncryption(false); - allow_change_encryption_ = false; - - suggest_min_key_size_ = 1024; - suggest_max_key_size_ = 3072; - suggest_size_addition_step_ = 1024; - SetKeyLength(2048); - } else if (algo_args == "elg") { - /** - * GnuPG supports the Elgamal asymmetric encryption algorithm in key lengths - * ranging from 1024 to 4096 bits. - */ - - SetAllowEncryption(true); - - SetAllowAuthentication(false); - allow_change_authentication_ = false; - - SetAllowSigning(false); - allow_change_signing_ = false; - - suggest_min_key_size_ = 1024; - suggest_max_key_size_ = 4096; - suggest_size_addition_step_ = 1024; - SetKeyLength(3072); - - } else if (algo_args == "ed25519") { - SetAllowEncryption(false); - allow_change_encryption_ = false; - - suggest_min_key_size_ = -1; - suggest_max_key_size_ = -1; - suggest_size_addition_step_ = -1; - SetKeyLength(-1); - } else if (algo_args == "cv25519" || algo_args == "x448") { - SetAllowAuthentication(false); - allow_change_authentication_ = false; - - SetAllowSigning(false); - allow_change_signing_ = false; - - suggest_min_key_size_ = -1; - suggest_max_key_size_ = -1; - suggest_size_addition_step_ = -1; - SetKeyLength(-1); - } else if (algo_args == "ed448") { - SetAllowEncryption(false); - allow_change_encryption_ = false; - - // it should allow signing or it's bug - SetAllowSigning(true); - allow_change_signing_ = true; - - suggest_min_key_size_ = -1; - suggest_max_key_size_ = -1; - suggest_size_addition_step_ = -1; - SetKeyLength(-1); - } else if (algo_args == "nistp256" || algo_args == "nistp384" || - algo_args == "nistp521" || algo_args == "brainpoolp256r1" || - algo_args == "brainpoolp384r1" || algo_args == "brainpoolp512r1" || - algo_args == "secp256k1") { - if (!subkey_) { // for primary key is always ecdsa - - SetAllowEncryption(false); - allow_change_encryption_ = false; - - } else { // for subkey key is always ecdh - - SetAllowAuthentication(false); - allow_change_authentication_ = false; - - SetAllowSigning(false); - allow_change_signing_ = false; - } - - suggest_min_key_size_ = -1; - suggest_max_key_size_ = -1; - suggest_size_addition_step_ = -1; - SetKeyLength(-1); - } else { - LOG_W() << "unsupported genkey algo arguments: " << algo_args; - return; - } - - this->algo_ = algo_args; -} - -void GenKeyInfo::reset_options() { - allow_change_encryption_ = true; - SetAllowEncryption(true); - - allow_change_certification_ = true; - SetAllowCertification(true); - - allow_change_signing_ = true; - SetAllowSigning(true); - - allow_change_authentication_ = true; - SetAllowAuthentication(true); - - passphrase_.clear(); -} - -auto GenKeyInfo::GetKeySizeStr() const -> QString { - if (key_size_ > 0) { - return QString::number(key_size_); - } - return {}; -} - -void GenKeyInfo::SetKeyLength(int m_key_size) { - if (m_key_size < suggest_min_key_size_ || - m_key_size > suggest_max_key_size_) { - return; - } - GenKeyInfo::key_size_ = m_key_size; -} - -void GenKeyInfo::SetExpireTime(const QDateTime &m_expired) { - if (!IsNonExpired()) { - GenKeyInfo::expired_ = m_expired; - } -} - -void GenKeyInfo::SetNonExpired(bool m_non_expired) { - if (!m_non_expired) this->expired_ = QDateTime::fromSecsSinceEpoch(0); - GenKeyInfo::non_expired_ = m_non_expired; -} - -void GenKeyInfo::SetAllowEncryption(bool m_allow_encryption) { - if (allow_change_encryption_) { - GenKeyInfo::allow_encryption_ = m_allow_encryption; - } -} - -void GenKeyInfo::SetAllowCertification(bool m_allow_certification) { - if (allow_change_certification_) { - GenKeyInfo::allow_certification_ = m_allow_certification; - } -} - -GenKeyInfo::GenKeyInfo(bool m_is_sub_key) : subkey_(m_is_sub_key) { - assert(!GetSupportedKeyAlgo().empty()); - SetAlgo(std::get<0>(GetSupportedKeyAlgo()[0])); -} - -auto GenKeyInfo::GetSupportedKeyAlgo() - -> const std::vector<GenKeyInfo::KeyGenAlgo> & { - static std::vector<GenKeyInfo::KeyGenAlgo> k_support_key_algo = { - {"RSA", "RSA", ""}, - {"DSA", "DSA", ""}, - }; - static bool initialized = false; - - if (!initialized) { - const auto gnupg_version = Module::RetrieveRTValueTypedOrDefault<>( - "core", "gpgme.ctx.gnupg_version", QString{"2.0.0"}); - if (GFCompareSoftwareVersion(gnupg_version, "2.0.0") < 0) { - // do nothing - } else if (GFCompareSoftwareVersion(gnupg_version, "2.3.0") < 0) { - k_support_key_algo = { - {"RSA", "RSA", ""}, - {"DSA", "DSA", ""}, - {"EdDSA (ED25519)", "ED25519", ""}, - {"ECDSA (NIST P-256)", "NISTP256", ""}, - {"ECDSA (NIST P-384)", "NISTP384", ""}, - {"ECDSA (NIST P-521)", "NISTP521", ""}, - }; - } else { - k_support_key_algo = { - {"RSA", "RSA", ""}, - {"DSA", "DSA", ""}, - {"EdDSA (ED448)", "ED448", ""}, - {"EdDSA (ED25519)", "ED25519", ""}, - {"ECDSA (SECP256K1)", "SECP256K1", ""}, - {"ECDSA (NIST P-256)", "NISTP256", ""}, - {"ECDSA (NIST P-384)", "NISTP384", ""}, - {"ECDSA (NIST P-521)", "NISTP521", ""}, - {"ECDSA (BrainPooL P-256)", "BRAINPOOLP256R1", ""}, - {"ECDSA (BrainPooL P-384)", "BRAINPOOLP384R1", ""}, - {"ECDSA (BrainPooL P-512)", "BRAINPOOLP512R1", ""}, - }; - } - - initialized = true; - } - - return k_support_key_algo; -} - -auto GenKeyInfo::GetSupportedSubkeyAlgo() - -> const std::vector<GenKeyInfo::KeyGenAlgo> & { - static std::vector<GenKeyInfo::KeyGenAlgo> k_support_subkey_algo = { - {"RSA", "", "RSA"}, - {"DSA", "", "DSA"}, - {"ELG-E", "", "ELG"}, - }; - static bool initialized = false; - - if (!initialized) { - const auto gnupg_version = Module::RetrieveRTValueTypedOrDefault<>( - "core", "gpgme.ctx.gnupg_version", QString{"2.0.0"}); - if (GFCompareSoftwareVersion(gnupg_version, "2.0.0") < 0) { - // do nothing - } else if (GFCompareSoftwareVersion(gnupg_version, "2.3.0") < 0) { - k_support_subkey_algo = { - {"RSA", "", "RSA"}, - {"DSA", "", "DSA"}, - {"ELG-E", "", "ELG"}, - {"EdDSA (ED25519)", "", "ED25519"}, - {"ECDH (CV25519)", "", "CV25519"}, - {"ECDH (NIST P-256)", "", "NISTP256"}, - {"ECDH (NIST P-384)", "", "NISTP384"}, - {"ECDH (NIST P-521)", "", "NISTP521"}, - }; - } else { - k_support_subkey_algo = { - {"RSA", "", "RSA"}, - {"DSA", "", "DSA"}, - {"ELG-E", "", "ELG"}, - {"EdDSA (ED25519)", "", "ED25519"}, - {"ECDH (CV25519)", "", "CV25519"}, - {"ECDH (SECP256K1)", "", "SECP256K1"}, - {"EdDSA (ED448)", "", "ED448"}, - {"ECDH (X448)", "", "X448"}, - {"ECDH (NIST P-256)", "", "NISTP256"}, - {"ECDH (NIST P-384)", "", "NISTP384"}, - {"ECDH (NIST P-521)", "", "NISTP521"}, - {"ECDH (BrainPooL P-256)", "", "BRAINPOOLP256R1"}, - {"ECDH (BrainPooL P-384)", "", "BRAINPOOLP384R1"}, - {"ECDH (BrainPooL P-512)", "", "BRAINPOOLP512R1"}, - }; - } - - initialized = true; - } - - return k_support_subkey_algo; -} - -/** - * @brief - * - * @return true - * @return false - */ -[[nodiscard]] auto GenKeyInfo::IsSubKey() const -> bool { return subkey_; } - -/** - * @brief Set the Is Sub Key object - * - * @param m_sub_key - */ -void GenKeyInfo::SetIsSubKey(bool m_sub_key) { - GenKeyInfo::subkey_ = m_sub_key; -} - -/** - * @brief Get the Userid object - * - * @return QString - */ -[[nodiscard]] auto GenKeyInfo::GetUserid() const -> QString { - return QString("%1(%2)<%3>").arg(name_).arg(comment_).arg(email_); -} - -/** - * @brief Set the Name object - * - * @param m_name - */ -void GenKeyInfo::SetName(const QString &m_name) { this->name_ = m_name; } - -/** - * @brief Set the Email object - * - * @param m_email - */ -void GenKeyInfo::SetEmail(const QString &m_email) { this->email_ = m_email; } - -/** - * @brief Set the Comment object - * - * @param m_comment - */ -void GenKeyInfo::SetComment(const QString &m_comment) { - this->comment_ = m_comment; -} - -/** - * @brief Get the Name object - * - * @return QString - */ -[[nodiscard]] auto GenKeyInfo::GetName() const -> QString { return name_; } - -/** - * @brief Get the Email object - * - * @return QString - */ -[[nodiscard]] auto GenKeyInfo::GetEmail() const -> QString { return email_; } - -/** - * @brief Get the Comment object - * - * @return QString - */ -[[nodiscard]] auto GenKeyInfo::GetComment() const -> QString { - return comment_; -} - -/** - * @brief Get the Algo object - * - * @return const QString& - */ -[[nodiscard]] auto GenKeyInfo::GetAlgo() const -> const QString & { - return algo_; -} - -/** - * @brief Get the Key Size object - * - * @return int - */ -[[nodiscard]] auto GenKeyInfo::GetKeyLength() const -> int { return key_size_; } - -/** - * @brief Get the Expired object - * - * @return const QDateTime& - */ -[[nodiscard]] auto GenKeyInfo::GetExpireTime() const -> const QDateTime & { - return expired_; -} - -/** - * @brief - * - * @return true - * @return false - */ -[[nodiscard]] auto GenKeyInfo::IsNonExpired() const -> bool { - return non_expired_; -} - -/** - * @brief - * - * @return true - * @return false - */ -[[nodiscard]] auto GenKeyInfo::IsNoPassPhrase() const -> bool { - return this->no_passphrase_; -} - -/** - * @brief Set the Non Pass Phrase object - * - * @param m_non_pass_phrase - */ -void GenKeyInfo::SetNonPassPhrase(bool m_non_pass_phrase) { - GenKeyInfo::no_passphrase_ = m_non_pass_phrase; -} - -/** - * @brief - * - * @return true - * @return false - */ -[[nodiscard]] auto GenKeyInfo::IsAllowSigning() const -> bool { - return allow_signing_; -} - -/** - * @brief - * - * @return true - * @return false - */ -[[nodiscard]] auto GenKeyInfo::IsAllowNoPassPhrase() const -> bool { - return allow_no_pass_phrase_; -} - -/** - * @brief Set the Allow Signing object - * - * @param m_allow_signing - */ -void GenKeyInfo::SetAllowSigning(bool m_allow_signing) { - if (allow_change_signing_) GenKeyInfo::allow_signing_ = m_allow_signing; -} - -/** - * @brief - * - * @return true - * @return false - */ -[[nodiscard]] auto GenKeyInfo::IsAllowEncryption() const -> bool { - return allow_encryption_; -} - -/** - * @brief - * - * @return true - * @return false - */ -[[nodiscard]] auto GenKeyInfo::IsAllowCertification() const -> bool { - return allow_certification_; -} - -/** - * @brief - * - * @return true - * @return false - */ -[[nodiscard]] auto GenKeyInfo::IsAllowAuthentication() const -> bool { - return allow_authentication_; -} - -/** - * @brief Set the Allow Authentication object - * - * @param m_allow_authentication - */ -void GenKeyInfo::SetAllowAuthentication(bool m_allow_authentication) { - if (allow_change_authentication_) { - GenKeyInfo::allow_authentication_ = m_allow_authentication; - } -} - -/** - * @brief Get the Pass Phrase object - * - * @return const QString& - */ -[[nodiscard]] auto GenKeyInfo::GetPassPhrase() const -> const QString & { - return passphrase_; -} - -/** - * @brief Set the Pass Phrase object - * - * @param m_pass_phrase - */ -void GenKeyInfo::SetPassPhrase(const QString &m_pass_phrase) { - GenKeyInfo::passphrase_ = m_pass_phrase; -} - -/** - * @brief - * - * @return true - * @return false - */ -[[nodiscard]] auto GenKeyInfo::IsAllowChangeSigning() const -> bool { - return allow_change_signing_; -} - -/** - * @brief - * - * @return true - * @return false - */ -[[nodiscard]] auto GenKeyInfo::IsAllowChangeEncryption() const -> bool { - return allow_change_encryption_; -} - -/** - * @brief - * - * @return true - * @return false - */ -[[nodiscard]] auto GenKeyInfo::IsAllowChangeCertification() const -> bool { - return allow_change_certification_; -} - -/** - * @brief - * - * @return true - * @return false - */ -[[nodiscard]] auto GenKeyInfo::IsAllowChangeAuthentication() const -> bool { - return allow_change_authentication_; -} - -/** - * @brief Get the Suggest Max Key Size object - * - * @return int - */ -[[nodiscard]] auto GenKeyInfo::GetSuggestMaxKeySize() const -> int { - return suggest_max_key_size_; -} - -/** - * @brief Get the Suggest Min Key Size object - * - * @return int - */ -[[nodiscard]] auto GenKeyInfo::GetSuggestMinKeySize() const -> int { - return suggest_min_key_size_; -} - -/** - * @brief Get the Size Change Step object - * - * @return int - */ -[[nodiscard]] auto GenKeyInfo::GetSizeChangeStep() const -> int { - return suggest_size_addition_step_; -} - -} // namespace GpgFrontend diff --git a/src/core/model/GpgKey.cpp b/src/core/model/GpgKey.cpp index e820d6b9..2bf15f3a 100644 --- a/src/core/model/GpgKey.cpp +++ b/src/core/model/GpgKey.cpp @@ -28,8 +28,6 @@ #include "core/model/GpgKey.h" -#include <mutex> - namespace GpgFrontend { GpgKey::GpgKey(gpgme_key_t &&key) : key_ref_(key) {} @@ -149,21 +147,13 @@ auto GpgKey::GetPrimaryKeyLength() const -> unsigned int { return key_ref_->subkeys->length; } -auto GpgKey::IsHasEncryptionCapability() const -> bool { - return key_ref_->can_encrypt; -} +auto GpgKey::IsHasEncrCap() const -> bool { return key_ref_->can_encrypt; } -auto GpgKey::IsHasSigningCapability() const -> bool { - return key_ref_->can_sign; -} +auto GpgKey::IsHasSignCap() const -> bool { return key_ref_->can_sign; } -auto GpgKey::IsHasCertificationCapability() const -> bool { - return key_ref_->can_certify; -} +auto GpgKey::IsHasCertCap() const -> bool { return key_ref_->can_certify; } -auto GpgKey::IsHasAuthenticationCapability() const -> bool { - return key_ref_->can_authenticate; -} +auto GpgKey::IsHasAuthCap() const -> bool { return key_ref_->can_authenticate; } auto GpgKey::IsHasCardKey() const -> bool { auto subkeys = GetSubKeys(); @@ -184,8 +174,8 @@ auto GpgKey::IsHasMasterKey() const -> bool { return key_ref_->subkeys->secret; } -auto GpgKey::GetSubKeys() const -> std::unique_ptr<std::vector<GpgSubKey>> { - auto p_keys = std::make_unique<std::vector<GpgSubKey>>(); +auto GpgKey::GetSubKeys() const -> std::unique_ptr<QContainer<GpgSubKey>> { + auto p_keys = std::make_unique<QContainer<GpgSubKey>>(); auto *next = key_ref_->subkeys; while (next != nullptr) { p_keys->push_back(GpgSubKey(next)); @@ -194,8 +184,8 @@ auto GpgKey::GetSubKeys() const -> std::unique_ptr<std::vector<GpgSubKey>> { return p_keys; } -auto GpgKey::GetUIDs() const -> std::unique_ptr<std::vector<GpgUID>> { - auto p_uids = std::make_unique<std::vector<GpgUID>>(); +auto GpgKey::GetUIDs() const -> std::unique_ptr<QContainer<GpgUID>> { + auto p_uids = std::make_unique<QContainer<GpgUID>>(); auto *uid_next = key_ref_->uids; while (uid_next != nullptr) { p_uids->push_back(GpgUID(uid_next)); @@ -204,24 +194,24 @@ auto GpgKey::GetUIDs() const -> std::unique_ptr<std::vector<GpgUID>> { return p_uids; } -auto GpgKey::IsHasActualSigningCapability() const -> bool { +auto GpgKey::IsHasActualSignCap() const -> bool { auto subkeys = GetSubKeys(); - return std::any_of( - subkeys->begin(), subkeys->end(), [](const GpgSubKey &subkey) -> bool { - return subkey.IsSecretKey() && subkey.IsHasSigningCapability() && - !subkey.IsDisabled() && !subkey.IsRevoked() && - !subkey.IsExpired(); - }); + return std::any_of(subkeys->begin(), subkeys->end(), + [](const GpgSubKey &subkey) -> bool { + return subkey.IsSecretKey() && subkey.IsHasSignCap() && + !subkey.IsDisabled() && !subkey.IsRevoked() && + !subkey.IsExpired(); + }); } -auto GpgKey::IsHasActualAuthenticationCapability() const -> bool { +auto GpgKey::IsHasActualAuthCap() const -> bool { auto subkeys = GetSubKeys(); - return std::any_of( - subkeys->begin(), subkeys->end(), [](const GpgSubKey &subkey) -> bool { - return subkey.IsSecretKey() && subkey.IsHasAuthenticationCapability() && - !subkey.IsDisabled() && !subkey.IsRevoked() && - !subkey.IsExpired(); - }); + return std::any_of(subkeys->begin(), subkeys->end(), + [](const GpgSubKey &subkey) -> bool { + return subkey.IsSecretKey() && subkey.IsHasAuthCap() && + !subkey.IsDisabled() && !subkey.IsRevoked() && + !subkey.IsExpired(); + }); } /** @@ -229,7 +219,7 @@ auto GpgKey::IsHasActualAuthenticationCapability() const -> bool { * @param key target key * @return if key certify */ -auto GpgKey::IsHasActualCertificationCapability() const -> bool { +auto GpgKey::IsHasActualCertCap() const -> bool { return IsHasMasterKey() && !IsExpired() && !IsRevoked() && !IsDisabled(); } @@ -238,13 +228,13 @@ auto GpgKey::IsHasActualCertificationCapability() const -> bool { * @param key target key * @return if key encrypt */ -auto GpgKey::IsHasActualEncryptionCapability() const -> bool { +auto GpgKey::IsHasActualEncrCap() const -> bool { auto subkeys = GetSubKeys(); - return std::any_of( - subkeys->begin(), subkeys->end(), [](const GpgSubKey &subkey) -> bool { - return subkey.IsHasEncryptionCapability() && !subkey.IsDisabled() && - !subkey.IsRevoked() && !subkey.IsExpired(); - }); + return std::any_of(subkeys->begin(), subkeys->end(), + [](const GpgSubKey &subkey) -> bool { + return subkey.IsHasEncrCap() && !subkey.IsDisabled() && + !subkey.IsRevoked() && !subkey.IsExpired(); + }); } void GpgKey::KeyRefDeleter::operator()(gpgme_key_t _key) { diff --git a/src/core/model/GpgKey.h b/src/core/model/GpgKey.h index 8afa3c7f..1f902ca5 100644 --- a/src/core/model/GpgKey.h +++ b/src/core/model/GpgKey.h @@ -152,7 +152,7 @@ class GPGFRONTEND_CORE_EXPORT GpgKey { * @return true * @return false */ - [[nodiscard]] auto IsHasEncryptionCapability() const -> bool; + [[nodiscard]] auto IsHasEncrCap() const -> bool; /** * @brief @@ -161,7 +161,7 @@ class GPGFRONTEND_CORE_EXPORT GpgKey { * @return true * @return false */ - [[nodiscard]] auto IsHasActualEncryptionCapability() const -> bool; + [[nodiscard]] auto IsHasActualEncrCap() const -> bool; /** * @brief @@ -169,7 +169,7 @@ class GPGFRONTEND_CORE_EXPORT GpgKey { * @return true * @return false */ - [[nodiscard]] auto IsHasSigningCapability() const -> bool; + [[nodiscard]] auto IsHasSignCap() const -> bool; /** * @brief @@ -177,7 +177,7 @@ class GPGFRONTEND_CORE_EXPORT GpgKey { * @return true * @return false */ - [[nodiscard]] auto IsHasActualSigningCapability() const -> bool; + [[nodiscard]] auto IsHasActualSignCap() const -> bool; /** * @brief @@ -185,7 +185,7 @@ class GPGFRONTEND_CORE_EXPORT GpgKey { * @return true * @return false */ - [[nodiscard]] auto IsHasCertificationCapability() const -> bool; + [[nodiscard]] auto IsHasCertCap() const -> bool; /** * @brief @@ -193,7 +193,7 @@ class GPGFRONTEND_CORE_EXPORT GpgKey { * @return true * @return false */ - [[nodiscard]] auto IsHasActualCertificationCapability() const -> bool; + [[nodiscard]] auto IsHasActualCertCap() const -> bool; /** * @brief @@ -201,7 +201,7 @@ class GPGFRONTEND_CORE_EXPORT GpgKey { * @return true * @return false */ - [[nodiscard]] auto IsHasAuthenticationCapability() const -> bool; + [[nodiscard]] auto IsHasAuthCap() const -> bool; /** * @brief @@ -209,7 +209,7 @@ class GPGFRONTEND_CORE_EXPORT GpgKey { * @return true * @return false */ - [[nodiscard]] auto IsHasActualAuthenticationCapability() const -> bool; + [[nodiscard]] auto IsHasActualAuthCap() const -> bool; /** * @brief @@ -262,17 +262,17 @@ class GPGFRONTEND_CORE_EXPORT GpgKey { /** * @brief * - * @return std::unique_ptr<std::vector<GpgSubKey>> + * @return std::unique_ptr<QContainer<GpgSubKey>> */ [[nodiscard]] auto GetSubKeys() const - -> std::unique_ptr<std::vector<GpgSubKey>>; + -> std::unique_ptr<QContainer<GpgSubKey>>; /** * @brief * - * @return std::unique_ptr<std::vector<GpgUID>> + * @return std::unique_ptr<QContainer<GpgUID>> */ - [[nodiscard]] auto GetUIDs() const -> std::unique_ptr<std::vector<GpgUID>>; + [[nodiscard]] auto GetUIDs() const -> std::unique_ptr<QContainer<GpgUID>>; /** * @brief Construct a new Gpg Key object diff --git a/src/core/model/GpgKeyGenerateInfo.cpp b/src/core/model/GpgKeyGenerateInfo.cpp new file mode 100644 index 00000000..b1dcaa7a --- /dev/null +++ b/src/core/model/GpgKeyGenerateInfo.cpp @@ -0,0 +1,500 @@ +/** + * Copyright (C) 2021-2024 Saturneric <[email protected]> + * + * This file is part of GpgFrontend. + * + * GpgFrontend is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GpgFrontend is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GpgFrontend. If not, see <https://www.gnu.org/licenses/>. + * + * The initial version of the source code is inherited from + * the gpg4usb project, which is under GPL-3.0-or-later. + * + * All the source code of GpgFrontend was modified and released by + * Saturneric <[email protected]> starting on May 12, 2021. + * + * SPDX-License-Identifier: GPL-3.0-or-later + * + */ + +#include "GpgKeyGenerateInfo.h" + +#include <cassert> + +#include "module/ModuleManager.h" +#include "utils/CommonUtils.h" + +namespace GpgFrontend { + +const KeyAlgo KeyGenerateInfo::kNoneAlgo = { + "none", KeyGenerateInfo::tr("None"), "None", 0, 0, "0.0.0"}; + +const QContainer<KeyAlgo> KeyGenerateInfo::kPrimaryKeyAlgos = { + kNoneAlgo, + + /** + * Algorithm (DSA) as a government standard for digital signatures. + * Originally, it supported key lengths between 512 and 1024 bits. + * Recently, NIST has declared 512-bit keys obsolete: + * now, DSA is available in 1024, 2048 and 3072-bit lengths. + */ + {"rsa1024", "RSA", "RSA", 1024, kENCRYPT | kSIGN | kAUTH | kCERT, "2.2.0"}, + {"rsa2048", "RSA", "RSA", 2048, kENCRYPT | kSIGN | kAUTH | kCERT, "2.2.0"}, + {"rsa3072", "RSA", "RSA", 3072, kENCRYPT | kSIGN | kAUTH | kCERT, "2.2.0"}, + {"rsa4096", "RSA", "RSA", 4096, kENCRYPT | kSIGN | kAUTH | kCERT, "2.2.0"}, + {"dsa1024", "DSA", "DSA", 1024, kSIGN | kAUTH | kCERT, "2.2.0"}, + {"dsa2048", "DSA", "DSA", 2048, kSIGN | kAUTH | kCERT, "2.2.0"}, + {"dsa3072", "DSA", "DSA", 3072, kSIGN | kAUTH | kCERT, "2.2.0"}, + {"ed25519", "ED25519", "EdDSA", 256, kSIGN | kAUTH | kCERT, "2.2.0"}, + {"nistp256", "NIST", "ECDSA", 256, kSIGN | kAUTH | kCERT, "2.2.0"}, + {"nistp384", "NIST", "ECDSA", 384, kSIGN | kAUTH | kCERT, "2.2.0"}, + {"nistp521", "NIST", "ECDSA", 521, kSIGN | kAUTH | kCERT, "2.2.0"}, + {"brainpoolp256r1", "BrainPooL", "ECDSA", 256, kSIGN | kAUTH | kCERT, + "2.3.0"}, + {"brainpoolp384r1", "BrainPooL", "ECDSA", 384, kSIGN | kAUTH | kCERT, + "2.3.0"}, + {"brainpoolp512r1", "BrainPooL", "ECDSA", 512, kSIGN | kAUTH | kCERT, + "2.3.0"}, + {"ed448", "ED448", "EdDSA", 448, kSIGN | kAUTH | kCERT, "2.3.0"}, + {"secp256k1", "ED448", "EdDSA", 256, kSIGN | kAUTH | kCERT, "2.3.0"}, +}; + +const QContainer<KeyAlgo> KeyGenerateInfo::kSubKeyAlgos = { + kNoneAlgo, + + {"rsa1024", "RSA", "RSA", 1024, kENCRYPT | kSIGN | kAUTH, "2.2.0"}, + {"rsa2048", "RSA", "RSA", 2048, kENCRYPT | kSIGN | kAUTH, "2.2.0"}, + {"rsa3072", "RSA", "RSA", 3072, kENCRYPT | kSIGN | kAUTH, "2.2.0"}, + {"rsa4096", "RSA", "RSA", 4096, kENCRYPT | kSIGN | kAUTH, "2.2.0"}, + {"dsa1024", "DSA", "DSA", 1024, kSIGN | kAUTH, "2.2.0"}, + {"dsa2048", "DSA", "DSA", 2048, kSIGN | kAUTH, "2.2.0"}, + {"dsa3072", "DSA", "DSA", 3072, kSIGN | kAUTH, "2.2.0"}, + {"ed25519", "ED25519", "EdDSA", 256, kSIGN | kAUTH, "2.2.0"}, + {"cv25519", "CV25519", "ECDH", 256, kENCRYPT, "2.2.0"}, + {"nistp256", "NIST", "ECDH", 256, kENCRYPT, "2.2.0"}, + {"nistp384", "NIST", "ECDH", 384, kENCRYPT, "2.2.0"}, + {"nistp521", "NIST", "ECDH", 521, kENCRYPT, "2.2.0"}, + {"brainpoolp256r1", "BrainPooL", "ECDH", 256, kENCRYPT, "2.3.0"}, + {"brainpoolp384r1", "BrainPooL", "ECDH", 384, kENCRYPT, "2.3.0"}, + {"brainpoolp512r1", "BrainPooL", "ECDH", 512, kENCRYPT, "2.3.0"}, + {"x448", "X448", "ECDH", 448, kENCRYPT, "2.3.0"}, + {"secp256k1", "SECP256K1", "ECDH", 256, kENCRYPT, "2.3.0"}, + /** + * GnuPG supports the Elgamal asymmetric encryption algorithm in key lengths + * ranging from 1024 to 4096 bits. + */ + {"elg1024", "ELG-E", "ELG-E", 1024, kENCRYPT, "2.2.0"}, + {"elg2048", "ELG-E", "ELG-E", 2048, kENCRYPT, "2.2.0"}, + {"elg3072", "ELG-E", "ELG-E", 3072, kENCRYPT, "2.2.0"}, + {"elg4096", "ELG-E", "ELG-E", 4096, kENCRYPT, "2.2.0"}, +}; + +auto KeyGenerateInfo::GetSupportedKeyAlgo() -> QContainer<KeyAlgo> { + const auto gnupg_version = Module::RetrieveRTValueTypedOrDefault<>( + "core", "gpgme.ctx.gnupg_version", QString{"2.0.0"}); + + QContainer<KeyAlgo> algos; + + for (const auto &algo : kPrimaryKeyAlgos) { + if (!algo.IsSupported(gnupg_version)) continue; + algos.append(algo); + } + + std::sort(algos.begin(), algos.end(), [](const KeyAlgo &a, const KeyAlgo &b) { + return a.Name() < b.Name() && a.KeyLength() < b.KeyLength(); + }); + + return algos; +} + +auto KeyGenerateInfo::GetSupportedSubkeyAlgo() -> QContainer<KeyAlgo> { + const auto gnupg_version = Module::RetrieveRTValueTypedOrDefault<>( + "core", "gpgme.ctx.gnupg_version", QString{"2.0.0"}); + + QContainer<KeyAlgo> algos; + + for (const auto &algo : kSubKeyAlgos) { + if (!algo.IsSupported(gnupg_version)) continue; + algos.append(algo); + } + + std::sort(algos.begin(), algos.end(), [](const KeyAlgo &a, const KeyAlgo &b) { + return a.Name() < b.Name() && a.KeyLength() < b.KeyLength(); + }); + + return algos; +} + +KeyGenerateInfo::KeyGenerateInfo(bool is_subkey) + : subkey_(is_subkey), + algo_(kNoneAlgo), + expired_(QDateTime::currentDateTime().toLocalTime().addYears(2)) {} + +auto KeyGenerateInfo::SearchPrimaryKeyAlgo(const QString &algo_id) + -> std::tuple<bool, KeyAlgo> { + auto it = + std::find_if(kPrimaryKeyAlgos.cbegin(), kPrimaryKeyAlgos.cend(), + [=](const KeyAlgo &algo) { return algo.Id() == algo_id; }); + + if (it != kPrimaryKeyAlgos.cend()) { + return {true, *it}; + } + + return {false, KeyAlgo{}}; +} + +auto KeyGenerateInfo::SearchSubKeyAlgo(const QString &algo_id) + -> std::tuple<bool, KeyAlgo> { + auto it = + std::find_if(kSubKeyAlgos.cbegin(), kSubKeyAlgos.cend(), + [=](const KeyAlgo &algo) { return algo.Id() == algo_id; }); + + if (it != kSubKeyAlgos.cend()) { + return {true, *it}; + } + + return {false, KeyAlgo{}}; +} + +void KeyGenerateInfo::SetAlgo(const KeyAlgo &algo) { + // reset all options + reset_options(); + + this->SetAllowCert(algo.CanCert()); + this->allow_change_certification_ = false; + + SetAllowEncr(algo.CanEncrypt()); + allow_change_encryption_ = algo.CanEncrypt(); + + SetAllowSign(algo.CanSign()); + allow_change_signing_ = algo.CanSign(); + + SetAllowAuth(algo.CanAuth()); + allow_change_authentication_ = algo.CanAuth(); + + this->algo_ = algo; +} + +void KeyGenerateInfo::reset_options() { + allow_change_encryption_ = true; + SetAllowEncr(true); + + allow_change_certification_ = true; + SetAllowCert(true); + + allow_change_signing_ = true; + SetAllowSign(true); + + allow_change_authentication_ = true; + SetAllowAuth(true); +} + +void KeyGenerateInfo::SetExpireTime(const QDateTime &m_expired) { + KeyGenerateInfo::expired_ = m_expired; +} + +void KeyGenerateInfo::SetNonExpired(bool m_non_expired) { + if (!m_non_expired) this->expired_ = QDateTime::fromSecsSinceEpoch(0); + KeyGenerateInfo::non_expired_ = m_non_expired; +} + +void KeyGenerateInfo::SetAllowEncr(bool m_allow_encryption) { + if (allow_change_encryption_) { + KeyGenerateInfo::allow_encryption_ = m_allow_encryption; + } +} + +void KeyGenerateInfo::SetAllowCert(bool m_allow_certification) { + if (allow_change_certification_) { + KeyGenerateInfo::allow_certification_ = m_allow_certification; + } +} + +/** + * @brief + * + * @return true + * @return false + */ +[[nodiscard]] auto KeyGenerateInfo::IsSubKey() const -> bool { return subkey_; } + +/** + * @brief Set the Is Sub Key object + * + * @param m_sub_key + */ +void KeyGenerateInfo::SetIsSubKey(bool m_sub_key) { + KeyGenerateInfo::subkey_ = m_sub_key; +} + +/** + * @brief Get the Userid object + * + * @return QString + */ +[[nodiscard]] auto KeyGenerateInfo::GetUserid() const -> QString { + return QString("%1(%2)<%3>").arg(name_).arg(comment_).arg(email_); +} + +/** + * @brief Set the Name object + * + * @param m_name + */ +void KeyGenerateInfo::SetName(const QString &m_name) { this->name_ = m_name; } + +/** + * @brief Set the Email object + * + * @param m_email + */ +void KeyGenerateInfo::SetEmail(const QString &m_email) { + this->email_ = m_email; +} + +/** + * @brief Set the Comment object + * + * @param m_comment + */ +void KeyGenerateInfo::SetComment(const QString &m_comment) { + this->comment_ = m_comment; +} + +/** + * @brief Get the Name object + * + * @return QString + */ +[[nodiscard]] auto KeyGenerateInfo::GetName() const -> QString { return name_; } + +/** + * @brief Get the Email object + * + * @return QString + */ +[[nodiscard]] auto KeyGenerateInfo::GetEmail() const -> QString { + return email_; +} + +/** + * @brief Get the Comment object + * + * @return QString + */ +[[nodiscard]] auto KeyGenerateInfo::GetComment() const -> QString { + return comment_; +} + +/** + * @brief Get the Algo object + * + * @return const QString& + */ +[[nodiscard]] auto KeyGenerateInfo::GetAlgo() const -> const KeyAlgo & { + return algo_; +} + +/** + * @brief Get the Key Size object + * + * @return int + */ +[[nodiscard]] auto KeyGenerateInfo::GetKeyLength() const -> int { + return algo_.KeyLength(); +} + +/** + * @brief Get the Expired object + * + * @return const QDateTime& + */ +[[nodiscard]] auto KeyGenerateInfo::GetExpireTime() const -> const QDateTime & { + return expired_; +} + +/** + * @brief + * + * @return true + * @return false + */ +[[nodiscard]] auto KeyGenerateInfo::IsNonExpired() const -> bool { + return non_expired_; +} + +/** + * @brief + * + * @return true + * @return false + */ +[[nodiscard]] auto KeyGenerateInfo::IsNoPassPhrase() const -> bool { + return this->no_passphrase_; +} + +/** + * @brief Set the Non Pass Phrase object + * + * @param m_non_pass_phrase + */ +void KeyGenerateInfo::SetNonPassPhrase(bool m_non_pass_phrase) { + KeyGenerateInfo::no_passphrase_ = m_non_pass_phrase; +} + +/** + * @brief + * + * @return true + * @return false + */ +[[nodiscard]] auto KeyGenerateInfo::IsAllowSign() const -> bool { + return allow_signing_; +} + +/** + * @brief + * + * @return true + * @return false + */ +[[nodiscard]] auto KeyGenerateInfo::IsAllowNoPassPhrase() const -> bool { + return allow_no_pass_phrase_; +} + +/** + * @brief Set the Allow Signing object + * + * @param m_allow_signing + */ +void KeyGenerateInfo::SetAllowSign(bool m_allow_signing) { + if (allow_change_signing_) KeyGenerateInfo::allow_signing_ = m_allow_signing; +} + +/** + * @brief + * + * @return true + * @return false + */ +[[nodiscard]] auto KeyGenerateInfo::IsAllowEncr() const -> bool { + return allow_encryption_; +} + +/** + * @brief + * + * @return true + * @return false + */ +[[nodiscard]] auto KeyGenerateInfo::IsAllowCert() const -> bool { + return allow_certification_; +} + +/** + * @brief + * + * @return true + * @return false + */ +[[nodiscard]] auto KeyGenerateInfo::IsAllowAuth() const -> bool { + return allow_authentication_; +} + +/** + * @brief Set the Allow Authentication object + * + * @param m_allow_authentication + */ +void KeyGenerateInfo::SetAllowAuth(bool m_allow_authentication) { + if (allow_change_authentication_) { + KeyGenerateInfo::allow_authentication_ = m_allow_authentication; + } +} + +/** + * @brief + * + * @return true + * @return false + */ +[[nodiscard]] auto KeyGenerateInfo::IsAllowModifySign() const -> bool { + return allow_change_signing_; +} + +/** + * @brief + * + * @return true + * @return false + */ +[[nodiscard]] auto KeyGenerateInfo::IsAllowModifyEncr() const -> bool { + return allow_change_encryption_; +} + +/** + * @brief + * + * @return true + * @return false + */ +[[nodiscard]] auto KeyGenerateInfo::IsAllowModifyCert() const -> bool { + return allow_change_certification_; +} + +/** + * @brief + * + * @return true + * @return false + */ +[[nodiscard]] auto KeyGenerateInfo::IsAllowModifyAuth() const -> bool { + return allow_change_authentication_; +} + +KeyAlgo::KeyAlgo(QString id, QString name, QString type, int length, int opera, + QString supported_version) + : id_(std::move(id)), + name_(std::move(name)), + type_(std::move(type)), + length_(length), + supported_version_(std::move(supported_version)) { + encrypt_ = ((opera & kENCRYPT) != 0); + sign_ = ((opera & kSIGN) != 0); + auth_ = ((opera & kAUTH) != 0); + cert_ = ((opera & kCERT) != 0); +}; + +auto KeyAlgo::Id() const -> QString { return id_; } + +auto KeyAlgo::Name() const -> QString { return name_; } + +auto KeyAlgo::KeyLength() const -> int { return length_; } + +auto KeyAlgo::Type() const -> QString { return type_; } + +auto KeyAlgo::CanEncrypt() const -> bool { return encrypt_; } + +auto KeyAlgo::CanSign() const -> bool { return sign_; } + +auto KeyAlgo::CanAuth() const -> bool { return auth_; } + +auto KeyAlgo::CanCert() const -> bool { return cert_; } + +auto KeyAlgo::IsSupported(const QString &version) const -> bool { + return GFCompareSoftwareVersion(version, supported_version_) >= 0; +} + +auto KeyAlgo::operator==(const KeyAlgo &o) const -> bool { + return this->id_ == o.id_; +} +} // namespace GpgFrontend diff --git a/src/core/model/GpgGenKeyInfo.h b/src/core/model/GpgKeyGenerateInfo.h index 5f6c39a6..2956a00d 100644 --- a/src/core/model/GpgGenKeyInfo.h +++ b/src/core/model/GpgKeyGenerateInfo.h @@ -29,12 +29,59 @@ #pragma once #include "core/GpgFrontendCoreExport.h" +#include "core/typedef/CoreTypedef.h" namespace GpgFrontend { -class GPGFRONTEND_CORE_EXPORT GenKeyInfo { +class GPGFRONTEND_CORE_EXPORT KeyAlgo { public: - using KeyGenAlgo = std::tuple<QString, QString, QString>; + KeyAlgo() = default; + + KeyAlgo(QString id, QString name, QString type, int length, int opera, + QString supported_version); + + KeyAlgo(const KeyAlgo &) = default; + + auto operator=(const KeyAlgo &) -> KeyAlgo & = default; + + auto operator==(const KeyAlgo &o) const -> bool; + + [[nodiscard]] auto Id() const -> QString; + + [[nodiscard]] auto Name() const -> QString; + + [[nodiscard]] auto KeyLength() const -> int; + + [[nodiscard]] auto Type() const -> QString; + + [[nodiscard]] auto CanEncrypt() const -> bool; + + [[nodiscard]] auto CanSign() const -> bool; + + [[nodiscard]] auto CanAuth() const -> bool; + + [[nodiscard]] auto CanCert() const -> bool; + + [[nodiscard]] auto IsSupported(const QString &version) const -> bool; + + private: + QString id_; + QString name_; + QString type_; + int length_; + bool encrypt_; + bool sign_; + bool auth_; + bool cert_; + QString supported_version_; +}; + +class GPGFRONTEND_CORE_EXPORT KeyGenerateInfo : public QObject { + Q_OBJECT + public: + static const KeyAlgo kNoneAlgo; + static const QContainer<KeyAlgo> kPrimaryKeyAlgos; + static const QContainer<KeyAlgo> kSubKeyAlgos; /** * @brief Construct a new Gen Key Info object @@ -42,21 +89,39 @@ class GPGFRONTEND_CORE_EXPORT GenKeyInfo { * @param m_is_sub_key * @param m_standalone */ - explicit GenKeyInfo(bool m_is_sub_key = false); + explicit KeyGenerateInfo(bool is_subkey = false); /** * @brief Get the Supported Key Algo object * - * @return const std::vector<QString>& + * @return const QContainer<KeyGenAlgo>& */ - static auto GetSupportedKeyAlgo() -> const std::vector<KeyGenAlgo> &; + static auto GetSupportedKeyAlgo() -> QContainer<KeyAlgo>; /** * @brief Get the Supported Subkey Algo object * - * @return const std::vector<QString>& + * @return const QContainer<KeyGenAlgo>& + */ + static auto GetSupportedSubkeyAlgo() -> QContainer<KeyAlgo>; + + /** + * @brief + * + * @param algo_id + * @return std::tuple<bool, KeyAlgo> + */ + static auto SearchPrimaryKeyAlgo(const QString &algo_id) + -> std::tuple<bool, KeyAlgo>; + + /** + * @brief + * + * @param algo_id + * @return std::tuple<bool, KeyAlgo> */ - static auto GetSupportedSubkeyAlgo() -> const std::vector<KeyGenAlgo> &; + static auto SearchSubKeyAlgo(const QString &algo_id) + -> std::tuple<bool, KeyAlgo>; /** * @brief @@ -71,7 +136,7 @@ class GPGFRONTEND_CORE_EXPORT GenKeyInfo { * * @param m_sub_key */ - void SetIsSubKey(bool m_sub_key); + void SetIsSubKey(bool); /** * @brief Get the Userid object @@ -85,21 +150,21 @@ class GPGFRONTEND_CORE_EXPORT GenKeyInfo { * * @param m_name */ - void SetName(const QString &m_name); + void SetName(const QString &name); /** * @brief Set the Email object * * @param m_email */ - void SetEmail(const QString &m_email); + void SetEmail(const QString &email); /** * @brief Set the Comment object * * @param m_comment */ - void SetComment(const QString &m_comment); + void SetComment(const QString &comment); /** * @brief Get the Name object @@ -127,21 +192,14 @@ class GPGFRONTEND_CORE_EXPORT GenKeyInfo { * * @return const QString& */ - [[nodiscard]] auto GetAlgo() const -> const QString &; + [[nodiscard]] auto GetAlgo() const -> const KeyAlgo &; /** * @brief Set the Algo object * * @param m_algo */ - void SetAlgo(const QString &); - - /** - * @brief Get the Key Size Str object - * - * @return QString - */ - [[nodiscard]] auto GetKeySizeStr() const -> QString; + void SetAlgo(const KeyAlgo &); /** * @brief Get the Key Size object @@ -151,13 +209,6 @@ class GPGFRONTEND_CORE_EXPORT GenKeyInfo { [[nodiscard]] auto GetKeyLength() const -> int; /** - * @brief Set the Key Size object - * - * @param m_key_size - */ - void SetKeyLength(int m_key_size); - - /** * @brief Get the Expired object * * @return const QDateTime& @@ -207,7 +258,7 @@ class GPGFRONTEND_CORE_EXPORT GenKeyInfo { * @return true * @return false */ - [[nodiscard]] auto IsAllowSigning() const -> bool; + [[nodiscard]] auto IsAllowSign() const -> bool; /** * @brief @@ -222,7 +273,7 @@ class GPGFRONTEND_CORE_EXPORT GenKeyInfo { * * @param m_allow_signing */ - void SetAllowSigning(bool m_allow_signing); + void SetAllowSign(bool m_allow_signing); /** * @brief @@ -230,14 +281,14 @@ class GPGFRONTEND_CORE_EXPORT GenKeyInfo { * @return true * @return false */ - [[nodiscard]] auto IsAllowEncryption() const -> bool; + [[nodiscard]] auto IsAllowEncr() const -> bool; /** * @brief Set the Allow Encryption object * * @param m_allow_encryption */ - void SetAllowEncryption(bool m_allow_encryption); + void SetAllowEncr(bool m_allow_encryption); /** * @brief @@ -245,14 +296,14 @@ class GPGFRONTEND_CORE_EXPORT GenKeyInfo { * @return true * @return false */ - [[nodiscard]] auto IsAllowCertification() const -> bool; + [[nodiscard]] auto IsAllowCert() const -> bool; /** * @brief Set the Allow Certification object * * @param m_allow_certification */ - void SetAllowCertification(bool m_allow_certification); + void SetAllowCert(bool m_allow_certification); /** * @brief @@ -260,28 +311,14 @@ class GPGFRONTEND_CORE_EXPORT GenKeyInfo { * @return true * @return false */ - [[nodiscard]] auto IsAllowAuthentication() const -> bool; + [[nodiscard]] auto IsAllowAuth() const -> bool; /** * @brief Set the Allow Authentication object * * @param m_allow_authentication */ - void SetAllowAuthentication(bool m_allow_authentication); - - /** - * @brief Get the Pass Phrase object - * - * @return const QString& - */ - [[nodiscard]] auto GetPassPhrase() const -> const QString &; - - /** - * @brief Set the Pass Phrase object - * - * @param m_pass_phrase - */ - void SetPassPhrase(const QString &m_pass_phrase); + void SetAllowAuth(bool m_allow_authentication); /** * @brief @@ -289,7 +326,7 @@ class GPGFRONTEND_CORE_EXPORT GenKeyInfo { * @return true * @return false */ - [[nodiscard]] auto IsAllowChangeSigning() const -> bool; + [[nodiscard]] auto IsAllowModifySign() const -> bool; /** * @brief @@ -297,7 +334,7 @@ class GPGFRONTEND_CORE_EXPORT GenKeyInfo { * @return true * @return false */ - [[nodiscard]] auto IsAllowChangeEncryption() const -> bool; + [[nodiscard]] auto IsAllowModifyEncr() const -> bool; /** * @brief @@ -305,7 +342,7 @@ class GPGFRONTEND_CORE_EXPORT GenKeyInfo { * @return true * @return false */ - [[nodiscard]] auto IsAllowChangeCertification() const -> bool; + [[nodiscard]] auto IsAllowModifyCert() const -> bool; /** * @brief @@ -313,28 +350,7 @@ class GPGFRONTEND_CORE_EXPORT GenKeyInfo { * @return true * @return false */ - [[nodiscard]] auto IsAllowChangeAuthentication() const -> bool; - - /** - * @brief Get the Suggest Max Key Size object - * - * @return int - */ - [[nodiscard]] auto GetSuggestMaxKeySize() const -> int; - - /** - * @brief Get the Suggest Min Key Size object - * - * @return int - */ - [[nodiscard]] auto GetSuggestMinKeySize() const -> int; - - /** - * @brief Get the Size Change Step object - * - * @return int - */ - [[nodiscard]] auto GetSizeChangeStep() const -> int; + [[nodiscard]] auto IsAllowModifyAuth() const -> bool; private: bool subkey_ = false; ///< @@ -342,20 +358,13 @@ class GPGFRONTEND_CORE_EXPORT GenKeyInfo { QString email_; ///< QString comment_; ///< - QString algo_; ///< - int key_size_ = 2048; - QDateTime expired_ = QDateTime::currentDateTime().addYears(2); + KeyAlgo algo_; ///< + QDateTime expired_; bool non_expired_ = false; ///< bool no_passphrase_ = false; ///< bool allow_no_pass_phrase_ = true; ///< - int suggest_max_key_size_ = 4096; ///< - int suggest_size_addition_step_ = 1024; ///< - int suggest_min_key_size_ = 1024; ///< - - QString passphrase_; ///< - bool allow_encryption_ = true; ///< bool allow_change_encryption_ = true; ///< bool allow_certification_ = true; ///< diff --git a/src/core/model/GpgKeySignature.cpp b/src/core/model/GpgKeySignature.cpp index 836e7c7c..b3d9712e 100644 --- a/src/core/model/GpgKeySignature.cpp +++ b/src/core/model/GpgKeySignature.cpp @@ -34,47 +34,60 @@ GpgKeySignature::GpgKeySignature() = default; GpgKeySignature::~GpgKeySignature() = default; -GpgKeySignature::GpgKeySignature(gpgme_key_sig_t sig) - : signature_ref_(sig, [&](gpgme_key_sig_t signature) {}) {} +GpgKeySignature::GpgKeySignature(gpgme_key_sig_t sig) : signature_ref_(sig) {} -GpgKeySignature::GpgKeySignature(GpgKeySignature &&) noexcept = default; +GpgKeySignature::GpgKeySignature(const GpgKeySignature &) = default; +auto GpgKeySignature::operator=(const GpgKeySignature &) -> GpgKeySignature & = + default; -GpgKeySignature &GpgKeySignature::operator=(GpgKeySignature &&) noexcept = - default; - -bool GpgKeySignature::IsRevoked() const { return signature_ref_->revoked; } +auto GpgKeySignature::IsRevoked() const -> bool { + return signature_ref_->revoked; +} -bool GpgKeySignature::IsExpired() const { return signature_ref_->expired; } +auto GpgKeySignature::IsExpired() const -> bool { + return signature_ref_->expired; +} -bool GpgKeySignature::IsInvalid() const { return signature_ref_->invalid; } +auto GpgKeySignature::IsInvalid() const -> bool { + return signature_ref_->invalid; +} -bool GpgKeySignature::IsExportable() const { +auto GpgKeySignature::IsExportable() const -> bool { return signature_ref_->exportable; } -gpgme_error_t GpgKeySignature::GetStatus() const { +auto GpgKeySignature::GetStatus() const -> gpgme_error_t { return signature_ref_->status; } -QString GpgKeySignature::GetKeyID() const { return signature_ref_->keyid; } +auto GpgKeySignature::GetKeyID() const -> QString { + return signature_ref_->keyid; +} -QString GpgKeySignature::GetPubkeyAlgo() const { +auto GpgKeySignature::GetPubkeyAlgo() const -> QString { return gpgme_pubkey_algo_name(signature_ref_->pubkey_algo); } -QDateTime GpgKeySignature::GetCreateTime() const { +auto GpgKeySignature::GetCreateTime() const -> QDateTime { return QDateTime::fromSecsSinceEpoch(signature_ref_->timestamp); } -QDateTime GpgKeySignature::GetExpireTime() const { +auto GpgKeySignature::GetExpireTime() const -> QDateTime { return QDateTime::fromSecsSinceEpoch(signature_ref_->expires); } -QString GpgKeySignature::GetUID() const { return signature_ref_->uid; } +auto GpgKeySignature::GetUID() const -> QString { return signature_ref_->uid; } -QString GpgKeySignature::GetName() const { return signature_ref_->name; } +auto GpgKeySignature::GetName() const -> QString { + return signature_ref_->name; +} + +auto GpgKeySignature::GetEmail() const -> QString { + return signature_ref_->email; +} -QString GpgKeySignature::GetEmail() const { return signature_ref_->email; } +auto GpgKeySignature::GetComment() const -> QString { + return signature_ref_->comment; +} -QString GpgKeySignature::GetComment() const { return signature_ref_->comment; } } // namespace GpgFrontend
\ No newline at end of file diff --git a/src/core/model/GpgKeySignature.h b/src/core/model/GpgKeySignature.h index ccff0c9c..5f190fa2 100644 --- a/src/core/model/GpgKeySignature.h +++ b/src/core/model/GpgKeySignature.h @@ -160,34 +160,17 @@ class GPGFRONTEND_CORE_EXPORT GpgKeySignature { * @brief Construct a new Gpg Key Signature object * */ - GpgKeySignature(GpgKeySignature &&) noexcept; - - /** - * @brief Construct a new Gpg Key Signature object - * - */ - GpgKeySignature(const GpgKeySignature &) = delete; - - /** - * @brief - * - * @return GpgKeySignature& - */ - auto operator=(GpgKeySignature &&) noexcept -> GpgKeySignature &; + GpgKeySignature(const GpgKeySignature &); /** * @brief * * @return GpgKeySignature& */ - auto operator=(const GpgKeySignature &) -> GpgKeySignature & = delete; + auto operator=(const GpgKeySignature &) -> GpgKeySignature &; private: - using KeySignatrueRefHandler = - std::unique_ptr<struct _gpgme_key_sig, - std::function<void(gpgme_key_sig_t)>>; ///< - - KeySignatrueRefHandler signature_ref_ = nullptr; ///< + gpgme_key_sig_t signature_ref_ = nullptr; ///< }; } // namespace GpgFrontend diff --git a/src/core/model/GpgKeyTableModel.cpp b/src/core/model/GpgKeyTableModel.cpp index 8de07b23..b9d03bb6 100644 --- a/src/core/model/GpgKeyTableModel.cpp +++ b/src/core/model/GpgKeyTableModel.cpp @@ -28,8 +28,6 @@ #include "GpgKeyTableModel.h" -#include <utility> - #include "core/function/gpg/GpgKeyGetter.h" #include "core/model/GpgKey.h" @@ -62,75 +60,88 @@ auto GpgKeyTableModel::data(const QModelIndex &index, int role) const -> QVariant { if (!index.isValid() || buffered_keys_.empty()) return {}; - if (role == Qt::TextAlignmentRole) { - return Qt::AlignCenter; - } - if (role == Qt::CheckStateRole) { if (index.column() == 0) { return key_check_state_[index.row()] ? Qt::Checked : Qt::Unchecked; } - return {}; } - const auto &key = buffered_keys_.at(index.row()); - - switch (index.column()) { - case 0: { - return index.row(); - } - case 1: { - QString type_sym; - type_sym += key.IsPrivateKey() ? "pub/sec" : "pub"; - if (key.IsPrivateKey() && !key.IsHasMasterKey()) type_sym += "#"; - if (key.IsHasCardKey()) type_sym += "^"; - return type_sym; - } - case 2: { - return key.GetName(); - } - case 3: { - return key.GetEmail(); - } - case 4: { - QString usage_sym; - if (key.IsHasActualCertificationCapability()) usage_sym += "C"; - if (key.IsHasActualEncryptionCapability()) usage_sym += "E"; - if (key.IsHasActualSigningCapability()) usage_sym += "S"; - if (key.IsHasActualAuthenticationCapability()) usage_sym += "A"; - return usage_sym; - } - case 5: { - return key.GetOwnerTrust(); - } - case 6: { - return key.GetId(); + if (role == Qt::DisplayRole) { + const auto &key = buffered_keys_.at(index.row()); + + switch (index.column()) { + case 0: { + return index.row(); + } + case 1: { + QString type_sym; + type_sym += key.IsPrivateKey() ? "pub/sec" : "pub"; + if (key.IsPrivateKey() && !key.IsHasMasterKey()) type_sym += "#"; + if (key.IsHasCardKey()) type_sym += "^"; + return type_sym; + } + case 2: { + return key.GetName(); + } + case 3: { + return key.GetEmail(); + } + case 4: { + QString usage_sym; + if (key.IsHasActualCertCap()) usage_sym += "C"; + if (key.IsHasActualEncrCap()) usage_sym += "E"; + if (key.IsHasActualSignCap()) usage_sym += "S"; + if (key.IsHasActualAuthCap()) usage_sym += "A"; + return usage_sym; + } + case 5: { + return key.GetOwnerTrust(); + } + case 6: { + return key.GetId(); + } + case 7: { + return QLocale().toString(key.GetCreateTime(), "yyyy-MM-dd"); + } + case 8: { + return key.GetKeyAlgo(); + } + case 9: { + return static_cast<int>(key.GetSubKeys()->size()); + } + case 10: { + return key.GetComment(); + } + default: + return {}; } - case 7: { - return key.GetCreateTime(); - } - case 8: { - return key.GetKeyAlgo(); - } - case 9: { - return static_cast<int>(key.GetSubKeys()->size()); - } - case 10: { - return key.GetComment(); + } + + if (role == Qt::TextAlignmentRole) { + switch (index.column()) { + case 0: + case 1: + case 4: + case 5: + case 6: + case 7: + case 9: + return Qt::AlignCenter; + default: + return {}; } - default: - return {}; } + + return {}; } auto GpgKeyTableModel::headerData(int section, Qt::Orientation orientation, int role) const -> QVariant { - if (role != Qt::DisplayRole) return {}; - - if (orientation == Qt::Horizontal) { - return column_headers_[section]; + if (role == Qt::DisplayRole) { + if (orientation == Qt::Horizontal) { + return column_headers_[section]; + } } - return {}; } @@ -138,7 +149,7 @@ auto GpgKeyTableModel::flags(const QModelIndex &index) const -> Qt::ItemFlags { if (!index.isValid()) return Qt::NoItemFlags; if (index.column() == 0) { - return Qt::ItemIsUserCheckable | Qt::ItemIsEnabled; + return Qt::ItemIsUserCheckable | Qt::ItemIsSelectable | Qt::ItemIsEnabled; } return Qt::ItemIsSelectable | Qt::ItemIsEnabled; @@ -157,8 +168,8 @@ auto GpgKeyTableModel::setData(const QModelIndex &index, const QVariant &value, return false; } -auto GpgKeyTableModel::GetAllKeyIds() -> GpgKeyIDList { - GpgKeyIDList keys; +auto GpgKeyTableModel::GetAllKeyIds() -> KeyIdArgsList { + KeyIdArgsList keys; for (auto &key : buffered_keys_) { keys.push_back(key.GetId()); } diff --git a/src/core/model/GpgKeyTableModel.h b/src/core/model/GpgKeyTableModel.h index a2c64fd0..0529bf7b 100644 --- a/src/core/model/GpgKeyTableModel.h +++ b/src/core/model/GpgKeyTableModel.h @@ -186,7 +186,7 @@ class GPGFRONTEND_CORE_EXPORT GpgKeyTableModel : public QAbstractTableModel { * * @return auto */ - auto GetAllKeyIds() -> GpgKeyIDList; + auto GetAllKeyIds() -> KeyIdArgsList; /** * @brief Get the Key ID By Row object @@ -216,11 +216,7 @@ class GPGFRONTEND_CORE_EXPORT GpgKeyTableModel : public QAbstractTableModel { QStringList column_headers_; int gpg_context_channel_; -#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 4) - QList<bool> key_check_state_; -#else - QVector<bool> key_check_state_; -#endif + QContainer<bool> key_check_state_; }; } // namespace GpgFrontend
\ No newline at end of file diff --git a/src/core/model/GpgSignResult.cpp b/src/core/model/GpgSignResult.cpp index 59c402dd..4eb28523 100644 --- a/src/core/model/GpgSignResult.cpp +++ b/src/core/model/GpgSignResult.cpp @@ -47,8 +47,8 @@ auto GpgSignResult::GetRaw() -> gpgme_sign_result_t { } auto GpgSignResult::InvalidSigners() - -> std::vector<std::tuple<QString, GpgError>> { - std::vector<std::tuple<QString, GpgError>> result; + -> QContainer<std::tuple<QString, GpgError>> { + QContainer<std::tuple<QString, GpgError>> result; for (auto* invalid_key = result_ref_->invalid_signers; invalid_key != nullptr; invalid_key = invalid_key->next) { try { diff --git a/src/core/model/GpgSignResult.h b/src/core/model/GpgSignResult.h index 3881c86f..75f106f6 100644 --- a/src/core/model/GpgSignResult.h +++ b/src/core/model/GpgSignResult.h @@ -41,7 +41,7 @@ class GPGFRONTEND_CORE_EXPORT GpgSignResult { auto HashAlgo() -> QString; - auto InvalidSigners() -> std::vector<std::tuple<QString, GpgError>>; + auto InvalidSigners() -> QContainer<std::tuple<QString, GpgError>>; explicit GpgSignResult(gpgme_sign_result_t); diff --git a/src/core/model/GpgSignature.cpp b/src/core/model/GpgSignature.cpp index 139e367c..a4314cdb 100644 --- a/src/core/model/GpgSignature.cpp +++ b/src/core/model/GpgSignature.cpp @@ -30,27 +30,15 @@ namespace GpgFrontend { -/** - * @brief Construct a new Gpg Signature object - * - */ -GpgSignature::GpgSignature(GpgSignature &&) noexcept = default; +GpgSignature::GpgSignature() = default; -/** - * @brief - * - * @return GpgSignature& - */ -auto GpgSignature::operator=(GpgSignature &&) noexcept -> GpgSignature & = - default; +GpgSignature::GpgSignature(gpgme_signature_t sig) : signature_ref_(sig) {} -/** - * @brief Construct a new Gpg Signature:: Gpg Signature object - * - * @param sig - */ -GpgSignature::GpgSignature(gpgme_signature_t sig) - : signature_ref_(sig, [&](gpgme_signature_t signature) {}) {} +GpgSignature::~GpgSignature() = default; + +GpgSignature::GpgSignature(const GpgSignature &) = default; + +auto GpgSignature::operator=(const GpgSignature &) -> GpgSignature & = default; /** * @brief @@ -124,16 +112,4 @@ auto GpgSignature::GetFingerprint() const -> QString { return signature_ref_->fpr != nullptr ? signature_ref_->fpr : ""; } -/** - * @brief Construct a new Gpg Signature object - * - */ -GpgSignature::GpgSignature() = default; - -/** - * @brief Destroy the Gpg Signature object - * - */ -GpgSignature::~GpgSignature() = default; - } // namespace GpgFrontend diff --git a/src/core/model/GpgSignature.h b/src/core/model/GpgSignature.h index ddcc943f..aa977d55 100644 --- a/src/core/model/GpgSignature.h +++ b/src/core/model/GpgSignature.h @@ -117,33 +117,16 @@ class GPGFRONTEND_CORE_EXPORT GpgSignature { * @brief Construct a new Gpg Signature object * */ - GpgSignature(GpgSignature &&) noexcept; - - /** - * @brief Construct a new Gpg Signature object - * - */ - GpgSignature(const GpgSignature &) = delete; - - /** - * @brief - * - * @return GpgSignature& - */ - auto operator=(GpgSignature &&) noexcept -> GpgSignature &; + GpgSignature(const GpgSignature &); /** * @brief * * @return GpgSignature& */ - auto operator=(const GpgSignature &) -> GpgSignature & = delete; + auto operator=(const GpgSignature &) -> GpgSignature &; private: - using KeySignatrueRefHandler = - std::unique_ptr<struct _gpgme_signature, - std::function<void(gpgme_signature_t)>>; ///< - - KeySignatrueRefHandler signature_ref_ = nullptr; ///< + gpgme_signature_t signature_ref_ = nullptr; ///< }; } // namespace GpgFrontend diff --git a/src/core/model/GpgSubKey.cpp b/src/core/model/GpgSubKey.cpp index ba2f749c..98b87706 100644 --- a/src/core/model/GpgSubKey.cpp +++ b/src/core/model/GpgSubKey.cpp @@ -31,17 +31,11 @@ namespace GpgFrontend { GpgSubKey::GpgSubKey() = default; -GpgSubKey::GpgSubKey(gpgme_subkey_t subkey) - : subkey_ref_(subkey, [&](gpgme_subkey_t subkey) {}) {} +GpgSubKey::GpgSubKey(gpgme_subkey_t subkey) : subkey_ref_(subkey) {} -GpgSubKey::GpgSubKey(GpgSubKey&& o) noexcept { - swap(subkey_ref_, o.subkey_ref_); -} +GpgSubKey::GpgSubKey(const GpgSubKey&) = default; -auto GpgSubKey::operator=(GpgSubKey&& o) noexcept -> GpgSubKey& { - swap(subkey_ref_, o.subkey_ref_); - return *this; -}; +auto GpgSubKey::operator=(const GpgSubKey&) -> GpgSubKey& = default; auto GpgSubKey::operator==(const GpgSubKey& o) const -> bool { return GetFingerprint() == o.GetFingerprint(); @@ -56,7 +50,7 @@ auto GpgSubKey::GetPubkeyAlgo() const -> QString { } auto GpgSubKey::GetKeyAlgo() const -> QString { - auto* buffer = gpgme_pubkey_algo_string(subkey_ref_.get()); + auto* buffer = gpgme_pubkey_algo_string(subkey_ref_); auto algo = QString(buffer); gpgme_free(buffer); return algo.toUpper(); @@ -66,19 +60,17 @@ auto GpgSubKey::GetKeyLength() const -> unsigned int { return subkey_ref_->length; } -auto GpgSubKey::IsHasEncryptionCapability() const -> bool { +auto GpgSubKey::IsHasEncrCap() const -> bool { return subkey_ref_->can_encrypt; } -auto GpgSubKey::IsHasSigningCapability() const -> bool { - return subkey_ref_->can_sign; -} +auto GpgSubKey::IsHasSignCap() const -> bool { return subkey_ref_->can_sign; } -auto GpgSubKey::IsHasCertificationCapability() const -> bool { +auto GpgSubKey::IsHasCertCap() const -> bool { return subkey_ref_->can_certify; } -auto GpgSubKey::IsHasAuthenticationCapability() const -> bool { +auto GpgSubKey::IsHasAuthCap() const -> bool { return subkey_ref_->can_authenticate; } diff --git a/src/core/model/GpgSubKey.h b/src/core/model/GpgSubKey.h index e9eea6ea..f7d6afd9 100644 --- a/src/core/model/GpgSubKey.h +++ b/src/core/model/GpgSubKey.h @@ -81,7 +81,7 @@ class GPGFRONTEND_CORE_EXPORT GpgSubKey { * @return true * @return false */ - [[nodiscard]] auto IsHasEncryptionCapability() const -> bool; + [[nodiscard]] auto IsHasEncrCap() const -> bool; /** * @brief @@ -89,7 +89,7 @@ class GPGFRONTEND_CORE_EXPORT GpgSubKey { * @return true * @return false */ - [[nodiscard]] auto IsHasSigningCapability() const -> bool; + [[nodiscard]] auto IsHasSignCap() const -> bool; /** * @brief @@ -97,7 +97,7 @@ class GPGFRONTEND_CORE_EXPORT GpgSubKey { * @return true * @return false */ - [[nodiscard]] auto IsHasCertificationCapability() const -> bool; + [[nodiscard]] auto IsHasCertCap() const -> bool; /** * @brief @@ -105,7 +105,7 @@ class GPGFRONTEND_CORE_EXPORT GpgSubKey { * @return true * @return false */ - [[nodiscard]] auto IsHasAuthenticationCapability() const -> bool; + [[nodiscard]] auto IsHasAuthCap() const -> bool; /** * @brief @@ -185,30 +185,15 @@ class GPGFRONTEND_CORE_EXPORT GpgSubKey { /** * @brief Construct a new Gpg Sub Key object * - * @param o - */ - GpgSubKey(GpgSubKey&& o) noexcept; - - /** - * @brief Construct a new Gpg Sub Key object - * - */ - GpgSubKey(const GpgSubKey&) = delete; - - /** - * @brief - * - * @param o - * @return GpgSubKey& */ - auto operator=(GpgSubKey&& o) noexcept -> GpgSubKey&; + GpgSubKey(const GpgSubKey&); /** * @brief * * @return GpgSubKey& */ - auto operator=(const GpgSubKey&) -> GpgSubKey& = delete; + auto operator=(const GpgSubKey&) -> GpgSubKey&; /** * @brief @@ -220,11 +205,7 @@ class GPGFRONTEND_CORE_EXPORT GpgSubKey { auto operator==(const GpgSubKey& o) const -> bool; private: - using SubkeyRefHandler = - std::unique_ptr<struct _gpgme_subkey, - std::function<void(gpgme_subkey_t)>>; ///< - - SubkeyRefHandler subkey_ref_ = nullptr; ///< + gpgme_subkey_t subkey_ref_ = nullptr; ///< }; } // namespace GpgFrontend diff --git a/src/core/model/GpgTOFUInfo.cpp b/src/core/model/GpgTOFUInfo.cpp index be9320d2..3296f05b 100644 --- a/src/core/model/GpgTOFUInfo.cpp +++ b/src/core/model/GpgTOFUInfo.cpp @@ -33,16 +33,11 @@ namespace GpgFrontend { GpgTOFUInfo::GpgTOFUInfo() = default; GpgTOFUInfo::GpgTOFUInfo(gpgme_tofu_info_t tofu_info) - : tofu_info_ref_(tofu_info, [&](gpgme_tofu_info_t tofu_info) {}) {} + : tofu_info_ref_(tofu_info) {} -GpgTOFUInfo::GpgTOFUInfo(GpgTOFUInfo&& o) noexcept { - swap(tofu_info_ref_, o.tofu_info_ref_); -} +GpgTOFUInfo::GpgTOFUInfo(const GpgTOFUInfo&) = default; -auto GpgTOFUInfo::operator=(GpgTOFUInfo&& o) noexcept -> GpgTOFUInfo& { - swap(tofu_info_ref_, o.tofu_info_ref_); - return *this; -}; +auto GpgTOFUInfo::operator=(const GpgTOFUInfo&) -> GpgTOFUInfo& = default; auto GpgTOFUInfo::GetValidity() const -> unsigned { return tofu_info_ref_->validity; @@ -64,29 +59,14 @@ auto GpgTOFUInfo::GetSignFirst() const -> unsigned long { return tofu_info_ref_->signfirst; } -/** - * @brief - * - * @return unsigned long - */ auto GpgTOFUInfo::GetSignLast() const -> unsigned long { return tofu_info_ref_->signlast; } -/** - * @brief - * - * @return unsigned long - */ auto GpgTOFUInfo::GetEncrLast() const -> unsigned long { return tofu_info_ref_->encrlast; } -/** - * @brief - * - * @return QString - */ auto GpgTOFUInfo::GetDescription() const -> QString { return tofu_info_ref_->description; } diff --git a/src/core/model/GpgTOFUInfo.h b/src/core/model/GpgTOFUInfo.h index efdf62b2..816680ce 100644 --- a/src/core/model/GpgTOFUInfo.h +++ b/src/core/model/GpgTOFUInfo.h @@ -110,37 +110,18 @@ class GPGFRONTEND_CORE_EXPORT GpgTOFUInfo { /** * @brief Construct a new Gpg T O F U Info object * - * @param o */ - GpgTOFUInfo(GpgTOFUInfo&& o) noexcept; - - /** - * @brief Construct a new Gpg T O F U Info object - * - */ - GpgTOFUInfo(const GpgTOFUInfo&) = delete; - - /** - * @brief - * - * @param o - * @return GpgTOFUInfo& - */ - auto operator=(GpgTOFUInfo&& o) noexcept -> GpgTOFUInfo&; + GpgTOFUInfo(const GpgTOFUInfo&); /** * @brief * * @return GpgTOFUInfo& */ - auto operator=(const GpgTOFUInfo&) -> GpgTOFUInfo& = delete; + auto operator=(const GpgTOFUInfo&) -> GpgTOFUInfo&; private: - using SubkeyRefHandler = - std::unique_ptr<struct _gpgme_tofu_info, - std::function<void(gpgme_tofu_info_t)>>; ///< - - SubkeyRefHandler tofu_info_ref_ = nullptr; ///< + gpgme_tofu_info_t tofu_info_ref_ = nullptr; ///< }; } // namespace GpgFrontend diff --git a/src/core/model/GpgUID.cpp b/src/core/model/GpgUID.cpp index c84f2a7f..cd4be820 100644 --- a/src/core/model/GpgUID.cpp +++ b/src/core/model/GpgUID.cpp @@ -32,10 +32,11 @@ namespace GpgFrontend { GpgUID::GpgUID() = default; -GpgUID::GpgUID(gpgme_user_id_t uid) - : uid_ref_(uid, [&](gpgme_user_id_t uid) {}) {} +GpgUID::GpgUID(gpgme_user_id_t uid) : uid_ref_(uid) {} -GpgUID::GpgUID(GpgUID &&o) noexcept { swap(uid_ref_, o.uid_ref_); } +GpgUID::GpgUID(const GpgUID &) = default; + +auto GpgUID::operator=(const GpgUID &) -> GpgUID & = default; auto GpgUID::GetName() const -> QString { return uid_ref_->name; } @@ -49,8 +50,8 @@ auto GpgUID::GetRevoked() const -> bool { return uid_ref_->revoked; } auto GpgUID::GetInvalid() const -> bool { return uid_ref_->invalid; } -auto GpgUID::GetTofuInfos() const -> std::unique_ptr<std::vector<GpgTOFUInfo>> { - auto infos = std::make_unique<std::vector<GpgTOFUInfo>>(); +auto GpgUID::GetTofuInfos() const -> std::unique_ptr<QContainer<GpgTOFUInfo>> { + auto infos = std::make_unique<QContainer<GpgTOFUInfo>>(); auto *info_next = uid_ref_->tofu; while (info_next != nullptr) { infos->push_back(GpgTOFUInfo(info_next)); @@ -60,8 +61,8 @@ auto GpgUID::GetTofuInfos() const -> std::unique_ptr<std::vector<GpgTOFUInfo>> { } auto GpgUID::GetSignatures() const - -> std::unique_ptr<std::vector<GpgKeySignature>> { - auto sigs = std::make_unique<std::vector<GpgKeySignature>>(); + -> std::unique_ptr<QContainer<GpgKeySignature>> { + auto sigs = std::make_unique<QContainer<GpgKeySignature>>(); auto *sig_next = uid_ref_->signatures; while (sig_next != nullptr) { sigs->push_back(GpgKeySignature(sig_next)); diff --git a/src/core/model/GpgUID.h b/src/core/model/GpgUID.h index 316b5c68..d8ac47f2 100644 --- a/src/core/model/GpgUID.h +++ b/src/core/model/GpgUID.h @@ -85,18 +85,18 @@ class GPGFRONTEND_CORE_EXPORT GpgUID { /** * @brief * - * @return std::unique_ptr<std::vector<GpgTOFUInfo>> + * @return std::unique_ptr<QContainer<GpgTOFUInfo>> */ [[nodiscard]] auto GetTofuInfos() const - -> std::unique_ptr<std::vector<GpgTOFUInfo>>; + -> std::unique_ptr<QContainer<GpgTOFUInfo>>; /** * @brief * - * @return std::unique_ptr<std::vector<GpgKeySignature>> + * @return std::unique_ptr<QContainer<GpgKeySignature>> */ [[nodiscard]] auto GetSignatures() const - -> std::unique_ptr<std::vector<GpgKeySignature>>; + -> std::unique_ptr<QContainer<GpgKeySignature>>; /** * @brief Construct a new Gpg U I D object @@ -112,39 +112,20 @@ class GPGFRONTEND_CORE_EXPORT GpgUID { explicit GpgUID(gpgme_user_id_t uid); /** - * @brief Construct a new Gpg U I D object - * - * @param o - */ - GpgUID(GpgUID &&o) noexcept; - - /** - * @brief Construct a new Gpg U I D object - * - */ - GpgUID(const GpgUID &) = delete; - - /** * @brief * - * @param o - * @return GpgUID& */ - auto operator=(GpgUID &&o) noexcept -> GpgUID &; + GpgUID(const GpgUID &); /** * @brief * * @return GpgUID& */ - auto operator=(const GpgUID &) -> GpgUID & = delete; + auto operator=(const GpgUID &) -> GpgUID &; private: - using UidRefHandler = - std::unique_ptr<struct _gpgme_user_id, - std::function<void(gpgme_user_id_t)>>; ///< - - UidRefHandler uid_ref_ = nullptr; ///< + gpgme_user_id_t uid_ref_ = nullptr; ///< }; } // namespace GpgFrontend diff --git a/src/core/model/GpgVerifyResult.cpp b/src/core/model/GpgVerifyResult.cpp index f57900fc..cd232c02 100644 --- a/src/core/model/GpgVerifyResult.cpp +++ b/src/core/model/GpgVerifyResult.cpp @@ -49,8 +49,8 @@ auto GpgVerifyResult::GetRaw() const -> gpgme_verify_result_t { return result_ref_.get(); } -auto GpgVerifyResult::GetSignature() const -> std::vector<GpgSignature> { - std::vector<GpgSignature> sigatures; +auto GpgVerifyResult::GetSignature() const -> QContainer<GpgSignature> { + QContainer<GpgSignature> sigatures; auto* signature = result_ref_->signatures; while (signature != nullptr) { diff --git a/src/core/model/GpgVerifyResult.h b/src/core/model/GpgVerifyResult.h index 95ff10cb..c150d633 100644 --- a/src/core/model/GpgVerifyResult.h +++ b/src/core/model/GpgVerifyResult.h @@ -39,7 +39,7 @@ class GPGFRONTEND_CORE_EXPORT GpgVerifyResult { [[nodiscard]] auto GetRaw() const -> gpgme_verify_result_t; - [[nodiscard]] auto GetSignature() const -> std::vector<GpgSignature>; + [[nodiscard]] auto GetSignature() const -> QContainer<GpgSignature>; explicit GpgVerifyResult(gpgme_verify_result_t); diff --git a/src/core/model/KeyDatabaseInfo.h b/src/core/model/KeyDatabaseInfo.h index b5bfc1ea..693a4a65 100644 --- a/src/core/model/KeyDatabaseInfo.h +++ b/src/core/model/KeyDatabaseInfo.h @@ -34,6 +34,7 @@ struct KeyDatabaseInfo { int channel; QString name; QString path; + QString origin_path; KeyDatabaseInfo() = default; }; diff --git a/src/core/module/Event.h b/src/core/module/Event.h index 6d3c0106..d37992b7 100644 --- a/src/core/module/Event.h +++ b/src/core/module/Event.h @@ -43,7 +43,7 @@ class Event; using EventReference = std::shared_ptr<Event>; using EventIdentifier = QString; using EventTriggerIdentifier = QString; -using Evnets = std::vector<Event>; +using Evnets = QContainer<Event>; class GPGFRONTEND_CORE_EXPORT Event { public: diff --git a/src/core/module/GlobalModuleContext.cpp b/src/core/module/GlobalModuleContext.cpp index 71ea85d2..932fcac1 100644 --- a/src/core/module/GlobalModuleContext.cpp +++ b/src/core/module/GlobalModuleContext.cpp @@ -352,7 +352,7 @@ class GlobalModuleContext::Impl { bool registered; bool activate; bool integrated; - QList<QString> listening_event_ids; + QStringList listening_event_ids; }; using ModuleRegisterInfoPtr = std::shared_ptr<ModuleRegisterInfo>; diff --git a/src/core/module/GlobalRegisterTable.cpp b/src/core/module/GlobalRegisterTable.cpp index 0f29a58a..ae0d3ee9 100644 --- a/src/core/module/GlobalRegisterTable.cpp +++ b/src/core/module/GlobalRegisterTable.cpp @@ -107,10 +107,10 @@ class GlobalRegisterTable::Impl { return rtn; } - auto ListChildKeys(const Namespace& n, const Key& k) -> std::vector<Key> { + auto ListChildKeys(const Namespace& n, const Key& k) -> QContainer<Key> { QStringList const segments = (n + "." + k).split('.'); - std::vector<Key> rtn; + QContainer<Key> rtn; { std::shared_lock lock(lock_); @@ -302,8 +302,7 @@ auto GlobalRegisterTable::ListenPublish(QObject* o, Namespace n, Key k, return p_->ListenPublish(o, n, k, c); } -auto GlobalRegisterTable::ListChildKeys(Namespace n, - Key k) -> std::vector<Key> { +auto GlobalRegisterTable::ListChildKeys(Namespace n, Key k) -> QContainer<Key> { return p_->ListChildKeys(n, k); } diff --git a/src/core/module/GlobalRegisterTable.h b/src/core/module/GlobalRegisterTable.h index 15fab0ce..491f0a87 100644 --- a/src/core/module/GlobalRegisterTable.h +++ b/src/core/module/GlobalRegisterTable.h @@ -33,6 +33,7 @@ #include <optional> #include "core/function/SecureMemoryAllocator.h" +#include "core/typedef/CoreTypedef.h" namespace GpgFrontend::Module { @@ -55,7 +56,7 @@ class GlobalRegisterTable : public QObject { auto ListenPublish(QObject *, Namespace, Key, LPCallback) -> bool; - auto ListChildKeys(Namespace n, Key k) -> std::vector<Key>; + auto ListChildKeys(Namespace n, Key k) -> QContainer<Key>; signals: void SignalPublish(Namespace, Key, int, std::any); diff --git a/src/core/module/ModuleInit.cpp b/src/core/module/ModuleInit.cpp index 9f282a5f..ed9068c7 100644 --- a/src/core/module/ModuleInit.cpp +++ b/src/core/module/ModuleInit.cpp @@ -78,10 +78,7 @@ auto LoadExternalMods() -> QMap<QString, bool> { void LoadGpgFrontendModules(ModuleInitArgs) { // give user ability to give up all modules auto disable_loading_all_modules = - GlobalSettingStation::GetInstance() - .GetSettings() - .value("basic/disable_loading_all_modules", false) - .toBool(); + GetSettings().value("basic/disable_loading_all_modules", false).toBool(); if (disable_loading_all_modules) return; // must init at default thread before core diff --git a/src/core/module/ModuleManager.cpp b/src/core/module/ModuleManager.cpp index 8f97adc3..d340a561 100644 --- a/src/core/module/ModuleManager.cpp +++ b/src/core/module/ModuleManager.cpp @@ -220,7 +220,7 @@ class ModuleManager::Impl { return grt_->ListenPublish(o, n, k, c); } - auto ListRTChildKeys(const QString& n, const QString& k) -> std::vector<Key> { + auto ListRTChildKeys(const QString& n, const QString& k) -> QContainer<Key> { return grt_->ListChildKeys(n, k); } @@ -271,7 +271,7 @@ auto ListenRTPublishEvent(QObject* o, Namespace n, Key k, } auto ListRTChildKeys(const QString& namespace_, - const QString& key) -> std::vector<Key> { + const QString& key) -> QContainer<Key> { return ModuleManager::GetInstance().ListRTChildKeys(namespace_, key); } @@ -341,7 +341,7 @@ auto ModuleManager::ListenRTPublish(QObject* o, Namespace n, Key k, } auto ModuleManager::ListRTChildKeys(const QString& n, - const QString& k) -> std::vector<Key> { + const QString& k) -> QContainer<Key> { return p_->ListRTChildKeys(n, k); } diff --git a/src/core/module/ModuleManager.h b/src/core/module/ModuleManager.h index 5c703bf3..3ac35b98 100644 --- a/src/core/module/ModuleManager.h +++ b/src/core/module/ModuleManager.h @@ -101,7 +101,7 @@ class GPGFRONTEND_CORE_EXPORT ModuleManager auto ListenRTPublish(QObject*, Namespace, Key, LPCallback) -> bool; - auto ListRTChildKeys(const QString&, const QString&) -> std::vector<Key>; + auto ListRTChildKeys(const QString&, const QString&) -> QContainer<Key>; auto GRT() -> GlobalRegisterTable*; @@ -175,10 +175,10 @@ auto GPGFRONTEND_CORE_EXPORT ListenRTPublishEvent(QObject*, Namespace, Key, * * @param namespace_ * @param key - * @return std::vector<Key> + * @return QContainer<Key> */ auto GPGFRONTEND_CORE_EXPORT ListRTChildKeys( - const QString& namespace_, const QString& key) -> std::vector<Key>; + const QString& namespace_, const QString& key) -> QContainer<Key>; template <typename T> auto RetrieveRTValueTyped(const QString& namespace_, diff --git a/src/core/struct/cache_object/FavoriteKeyPairsByKeyDatabaseCO.h b/src/core/struct/cache_object/FavoriteKeyPairsByKeyDatabaseCO.h index 4722dd56..25618b45 100644 --- a/src/core/struct/cache_object/FavoriteKeyPairsByKeyDatabaseCO.h +++ b/src/core/struct/cache_object/FavoriteKeyPairsByKeyDatabaseCO.h @@ -31,7 +31,7 @@ namespace GpgFrontend { struct FavoriteKeyPairsByKeyDatabaseCO { - QList<QString> key_ids; + QStringList key_ids; FavoriteKeyPairsByKeyDatabaseCO() = default; diff --git a/src/core/struct/settings_object/KeyDatabaseItemSO.h b/src/core/struct/settings_object/KeyDatabaseItemSO.h index 873246b2..f1cdfaf9 100644 --- a/src/core/struct/settings_object/KeyDatabaseItemSO.h +++ b/src/core/struct/settings_object/KeyDatabaseItemSO.h @@ -35,12 +35,14 @@ namespace GpgFrontend { struct KeyDatabaseItemSO { QString name; QString path; + int channel; KeyDatabaseItemSO() = default; explicit KeyDatabaseItemSO(KeyDatabaseInfo i) { name = i.name; - path = i.path; + path = i.origin_path.isEmpty() ? i.path : i.origin_path; + channel = i.channel; } explicit KeyDatabaseItemSO(const QJsonObject& j) { @@ -50,12 +52,16 @@ struct KeyDatabaseItemSO { if (const auto v = j["path"]; v.isString()) { path = v.toString(); } + if (const auto v = j["channel"]; v.isDouble()) { + channel = v.toInt(); + } } [[nodiscard]] auto ToJson() const -> QJsonObject { QJsonObject j; j["name"] = name; j["path"] = path; + j["channel"] = channel; return j; } }; diff --git a/src/core/typedef/CoreTypedef.h b/src/core/typedef/CoreTypedef.h index 7bc0bc25..7d62cf20 100644 --- a/src/core/typedef/CoreTypedef.h +++ b/src/core/typedef/CoreTypedef.h @@ -28,22 +28,25 @@ #pragma once -#include "core/model/DataObject.h" - namespace GpgFrontend { +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) +template <typename T> +using QContainer = QVector<T>; +#else +template <typename T> +using QContainer = QList<T>; +#endif + using GFError = uint32_t; -using ByteArray = QByteArray; ///< -using ByteArrayPtr = std::shared_ptr<ByteArray>; ///< -using StdBypeArrayPtr = std::shared_ptr<ByteArray>; ///< -using BypeArrayRef = ByteArray&; ///< -using ConstBypeArrayRef = const ByteArray&; ///< -using BypeArrayConstRef = const ByteArray&; ///< -using StringArgsPtr = std::unique_ptr<std::vector<QString>>; ///< -using StringArgsRef = std::vector<QString>&; ///< - /// - /// +using ByteArray = QByteArray; ///< +using BypeArrayRef = ByteArray&; ///< +using BypeArrayConstRef = const ByteArray&; ///< +using StringArgsPtr = QStringList; ///< +using StringArgsRef = QStringList&; ///< +class DataObject; +using DataObjectPtr = std::shared_ptr<DataObject>; ///< using OperaRunnable = std::function<GFError(DataObjectPtr)>; using OperationCallback = std::function<void(GFError, DataObjectPtr)>; } // namespace GpgFrontend
\ No newline at end of file diff --git a/src/core/typedef/GpgTypedef.h b/src/core/typedef/GpgTypedef.h index ecd5dc3f..8d9fbf5f 100644 --- a/src/core/typedef/GpgTypedef.h +++ b/src/core/typedef/GpgTypedef.h @@ -30,7 +30,10 @@ #include <gpgme.h> +#include <future> + #include "core/model/DataObject.h" +#include "core/typedef/CoreTypedef.h" namespace GpgFrontend { @@ -41,25 +44,16 @@ class GpgTOFUInfo; using GpgError = gpgme_error_t; ///< gpgme error using GpgErrorCode = gpg_err_code_t; -using GpgErrorDesc = std::pair<QString, QString>; +using GpgErrorDesc = QPair<QString, QString>; -using KeyId = QString; ///< -using SubkeyId = QString; ///< -using KeyIdArgsList = std::vector<KeyId>; ///< -using KeyIdArgsListPtr = std::unique_ptr<KeyIdArgsList>; ///< -using UIDArgsList = std::vector<QString>; ///< -using UIDArgsListPtr = std::unique_ptr<UIDArgsList>; ///< -using SignIdArgsList = std::vector<std::pair<QString, QString>>; ///< -using SignIdArgsListPtr = std::unique_ptr<SignIdArgsList>; ///< -using KeyFprArgsListPtr = std::unique_ptr<std::vector<QString>>; ///< -using KeyArgsList = std::vector<GpgKey>; ///< -using KeyListPtr = std::shared_ptr<KeyArgsList>; ///< -using GpgKeyLinkList = std::list<GpgKey>; ///< -using KeyLinkListPtr = std::unique_ptr<GpgKeyLinkList>; ///< -using KeyPtr = std::unique_ptr<GpgKey>; ///< -using KeyPtrArgsList = const std::initializer_list<KeyPtr>; ///< -using GpgKeyList = QList<GpgKey>; ///< -using GpgKeyIDList = QList<QString>; ///< +using KeyId = QString; +using SubkeyId = QString; +using KeyIdArgsList = QStringList; ///< +using UIDArgsList = QStringList; ///< +using SignIdArgsList = QContainer<QPair<QString, QString>>; ///< +using KeyArgsList = QContainer<GpgKey>; ///< +using GpgKeyLinkList = QContainer<GpgKey>; ///< +using GpgKeyList = QContainer<GpgKey>; ///< using GpgSignMode = gpgme_sig_mode_t; @@ -68,11 +62,14 @@ using GpgOperationCallback = std::function<void(GpgError, DataObjectPtr)>; using GpgOperationFuture = std::future<std::tuple<GpgError, DataObjectPtr>>; enum GpgOperation { - kENCRYPT, - kDECRYPT, - kSIGN, - kVERIFY, - kENCRYPT_SIGN, - kDECRYPT_VERIFY + kNONE = 0, + kENCRYPT = 1 << 0, + kDECRYPT = 1 << 1, + kSIGN = 1 << 2, + kVERIFY = 1 << 3, + kENCRYPT_SIGN = 1 << 4, + kDECRYPT_VERIFY = 1 << 5, + kAUTH = 1 << 6, + kCERT = 1 << 7, }; } // namespace GpgFrontend
\ No newline at end of file diff --git a/src/core/utils/CommonUtils.cpp b/src/core/utils/CommonUtils.cpp index 60ce4642..526f5856 100644 --- a/src/core/utils/CommonUtils.cpp +++ b/src/core/utils/CommonUtils.cpp @@ -28,6 +28,8 @@ #include "CommonUtils.h" +#include "core/utils/MemoryUtils.h" + namespace GpgFrontend { auto BeautifyFingerprint(QString fingerprint) -> QString { diff --git a/src/core/utils/GpgUtils.cpp b/src/core/utils/GpgUtils.cpp index 29b150bd..ec0f35e2 100644 --- a/src/core/utils/GpgUtils.cpp +++ b/src/core/utils/GpgUtils.cpp @@ -28,15 +28,19 @@ #include "GpgUtils.h" +#include "core/function/GlobalSettingStation.h" +#include "core/model/GpgKey.h" #include "core/model/KeyDatabaseInfo.h" +#include "core/model/SettingsObject.h" #include "core/module/ModuleManager.h" +#include "core/struct/settings_object/KeyDatabaseListSO.h" namespace GpgFrontend { inline auto Trim(QString& s) -> QString { return s.trimmed(); } auto GetGpgmeErrorString(size_t buffer_size, gpgme_error_t err) -> QString { - std::vector<char> buffer(buffer_size); + QContainer<char> buffer(buffer_size); gpgme_error_t const ret = gpgme_strerror_r(err, buffer.data(), buffer.size()); if (ret == ERANGE && buffer_size < 1024) { @@ -218,4 +222,115 @@ auto GPGFRONTEND_CORE_EXPORT GetGpgKeyDatabaseName(int channel) -> QString { if (channel >= info.size()) return {}; return info[channel].name; } + +auto GetKeyDatabasesBySettings() -> QContainer<KeyDatabaseItemSO> { + auto key_db_list_so = SettingsObject("key_database_list"); + auto key_db_list = KeyDatabaseListSO(key_db_list_so); + auto& key_dbs = key_db_list.key_databases; + + if (key_dbs.empty()) { + KeyDatabaseItemSO key_db; + + auto home_path = Module::RetrieveRTValueTypedOrDefault<>( + "core", "gpgme.ctx.default_database_path", QString{}); + + if (GlobalSettingStation::GetInstance().IsProtableMode()) { + home_path = QDir(GlobalSettingStation::GetInstance().GetAppDir()) + .relativeFilePath(home_path); + } + + key_db.channel = 0; + key_db.name = "DEFAULT"; + key_db.path = home_path; + + key_dbs.append(key_db); + } + + // Sort by channel + std::sort(key_dbs.begin(), key_dbs.end(), + [](const auto& a, const auto& b) { return a.channel < b.channel; }); + + // Resolve duplicate channels by incrementing + for (auto it = key_dbs.begin(); it != key_dbs.end(); ++it) { + auto next_it = std::next(it); + while (next_it != key_dbs.end() && next_it->channel == it->channel) { + next_it->channel = it->channel + 1; + ++next_it; + } + } + + key_db_list_so.Store(key_db_list.ToJson()); + + return key_db_list.key_databases; +} + +auto VerifyKeyDatabasePath(const QFileInfo& key_database_fs_path) -> bool { + return key_database_fs_path.isAbsolute() && key_database_fs_path.exists() && + key_database_fs_path.isDir(); +} + +auto SearchKeyDatabasePath(const QStringList& candidate_paths) -> QString { + for (const auto& path : candidate_paths) { + if (VerifyKeyDatabasePath(QFileInfo(path))) { + // return a unify path + return QFileInfo(path).absoluteFilePath(); + } + } + return {}; +} + +auto GetCanonicalKeyDatabasePath(const QDir& app_path, + const QString& path) -> QString { + auto target_path = path; + if (!QDir::isAbsolutePath(target_path)) { + target_path = app_path.absoluteFilePath(target_path); + LOG_D() << "convert relative path: " << path + << "to absolute path: " << target_path; + } + + auto info = QFileInfo(target_path); + if (VerifyKeyDatabasePath(info)) { + auto key_database_fs_path = info.canonicalFilePath(); + LOG_D() << "load gpg key database:" << key_database_fs_path; + + return key_database_fs_path; + } + + LOG_W() << "gpg key database path is invalid: " << path; + return {}; +} + +auto GetKeyDatabaseInfoBySettings() -> QList<KeyDatabaseInfo> { + auto key_dbs = GetKeyDatabasesBySettings(); + + QContainer<KeyDatabaseInfo> key_db_infos; + + const auto app_path = QDir(GlobalSettingStation::GetInstance().GetAppDir()); + + // try to use user defined key database + for (const auto& key_database : key_dbs) { + auto key_database_fs_path = + GetCanonicalKeyDatabasePath(app_path, key_database.path); + + if (key_database_fs_path.isEmpty()) continue; + + KeyDatabaseInfo key_db_info; + key_db_info.name = key_database.name; + key_db_info.path = key_database_fs_path; + key_db_info.origin_path = key_database.path; + key_db_infos.append(key_db_info); + + LOG_D() << "plan to load gpg key database:" << key_database_fs_path; + } + + return key_db_infos; +} + +auto GPGFRONTEND_CORE_EXPORT Convert2RawGpgMEKeyList( + const QContainer<GpgKey>& keys) -> QContainer<gpgme_key_t> { + QContainer<gpgme_key_t> recipients(keys.begin(), keys.end()); + recipients.emplace_back(nullptr); + + return recipients; +} } // namespace GpgFrontend diff --git a/src/core/utils/GpgUtils.h b/src/core/utils/GpgUtils.h index 3cdef574..89f3720a 100644 --- a/src/core/utils/GpgUtils.h +++ b/src/core/utils/GpgUtils.h @@ -30,6 +30,7 @@ #include "core/function/result_analyse/GpgResultAnalyse.h" #include "core/model/KeyDatabaseInfo.h" +#include "core/struct/settings_object/KeyDatabaseItemSO.h" #include "core/typedef/CoreTypedef.h" #include "core/typedef/GpgTypedef.h" @@ -109,6 +110,32 @@ auto GPGFRONTEND_CORE_EXPORT SetExtensionOfOutputFileForArchive( /** * @brief * + * @param app_path + * @param path + * @return QString + */ +auto GPGFRONTEND_CORE_EXPORT GetCanonicalKeyDatabasePath( + const QDir& app_path, const QString& path) -> QString; + +/** + * @brief Get the Key Databases By Settings object + * + * @return QContainer<KeyDatabaseItemSO> + */ +auto GPGFRONTEND_CORE_EXPORT GetKeyDatabasesBySettings() + -> QContainer<KeyDatabaseItemSO>; + +/** + * @brief + * + * @return QList<KeyDatabaseInfo> + */ +auto GPGFRONTEND_CORE_EXPORT GetKeyDatabaseInfoBySettings() + -> QList<KeyDatabaseInfo>; + +/** + * @brief + * * @return QList<KeyDatabaseItemSO> */ auto GPGFRONTEND_CORE_EXPORT GetGpgKeyDatabaseInfos() -> QList<KeyDatabaseInfo>; @@ -120,4 +147,13 @@ auto GPGFRONTEND_CORE_EXPORT GetGpgKeyDatabaseInfos() -> QList<KeyDatabaseInfo>; */ auto GPGFRONTEND_CORE_EXPORT GetGpgKeyDatabaseName(int channel) -> QString; +/** + * @brief + * + * @param keys + * @return QContainer<gpgme_key_t> + */ +auto GPGFRONTEND_CORE_EXPORT Convert2RawGpgMEKeyList( + const QContainer<GpgKey>& keys) -> QContainer<gpgme_key_t>; + } // namespace GpgFrontend
\ No newline at end of file diff --git a/src/init.cpp b/src/init.cpp index e1668ec5..71f24668 100644 --- a/src/init.cpp +++ b/src/init.cpp @@ -57,16 +57,12 @@ int setenv(const char *name, const char *value, int overwrite) { void InitGlobalPathEnv() { // read settings bool use_custom_gnupg_install_path = - GlobalSettingStation::GetInstance() - .GetSettings() + GetSettings() .value("gnupg/use_custom_gnupg_install_path", false) .toBool(); QString custom_gnupg_install_path = - GlobalSettingStation::GetInstance() - .GetSettings() - .value("gnupg/custom_gnupg_install_path") - .toString(); + GetSettings().value("gnupg/custom_gnupg_install_path").toString(); // add custom gnupg install path into env $PATH if (use_custom_gnupg_install_path && !custom_gnupg_install_path.isEmpty()) { @@ -79,10 +75,7 @@ void InitGlobalPathEnv() { QString modified_path_value = getenv("PATH"); } - if (GlobalSettingStation::GetInstance() - .GetSettings() - .value("gnupg/enable_gpgme_debug_log", false) - .toBool()) { + if (GetSettings().value("gnupg/enable_gpgme_debug_log", false).toBool()) { qputenv("GPGME_DEBUG", QString("9:%1").arg(QDir::currentPath() + "/gpgme.log").toUtf8()); } @@ -142,8 +135,7 @@ void InitGlobalBasicEnv(const GFCxtWPtr &p_ctx, bool gui_mode) { */ void InitLocale() { // get the instance of the GlobalSettingStation - auto settings = - GpgFrontend::GlobalSettingStation::GetInstance().GetSettings(); + auto settings = GpgFrontend::GetSettings(); // read from settings file auto lang = settings.value("basic/lang").toString(); @@ -184,18 +176,30 @@ void ShutdownGlobalBasicEnv(const GFCxtWPtr &p_ctx) { } auto clear_gpg_password_cache = - GlobalSettingStation::GetInstance() - .GetSettings() - .value("basic/clear_gpg_password_cache", false) + GetSettings().value("basic/clear_gpg_password_cache", false).toBool(); + + auto kill_all_gnupg_daemon_at_close = + GetSettings() + .value("gnupg/kill_all_gnupg_daemon_at_close", false) .toBool(); - // clear password cache - if (!ctx->unit_test_mode && clear_gpg_password_cache) { - GpgAdvancedOperator::ClearGpgPasswordCache([](int, DataObjectPtr) {}); + + if (ctx->unit_test_mode || kill_all_gnupg_daemon_at_close) { + GpgAdvancedOperator::KillAllGpgComponents(nullptr); + } else if (!ctx->unit_test_mode && clear_gpg_password_cache) { + GpgAdvancedOperator::ClearGpgPasswordCache(nullptr); } - Thread::TaskRunnerGetter::GetInstance().StopAllTeakRunner(); + // first should shutdown the module system + GpgFrontend::Module::ShutdownGpgFrontendModules(); + + // then shutdown the core + GpgFrontend::DestroyGpgFrontendCore(); - DestroyGpgFrontendCore(); + // deep restart mode + if (ctx->rtn == GpgFrontend::kDeepRestartCode || + ctx->rtn == GpgFrontend::kCrashCode) { + QProcess::startDetached(qApp->arguments()[0], qApp->arguments()); + }; } } // namespace GpgFrontend diff --git a/src/test/core/GpgCoreTestBasicOpera.cpp b/src/test/core/GpgCoreTestBasicOpera.cpp index 2e675766..a7bdfead 100644 --- a/src/test/core/GpgCoreTestBasicOpera.cpp +++ b/src/test/core/GpgCoreTestBasicOpera.cpp @@ -171,7 +171,7 @@ TEST_F(GpgCoreTest, CoreSignVerifyNormalTest) { GpgBasicOperator::GetInstance().VerifySync(sign_out_buffer, GFBuffer()); ASSERT_EQ(CheckGpgError(err_0), GPG_ERR_NO_ERROR); - ASSERT_TRUE((data_object_0->Check<GpgVerifyResult>())); + ASSERT_TRUE((data_object_0->Check<GpgVerifyResult, GFBuffer>())); auto verify_result = ExtractParams<GpgVerifyResult>(data_object_0, 0); ASSERT_FALSE(verify_result.GetSignature().empty()); ASSERT_EQ(verify_result.GetSignature().at(0).GetFingerprint(), @@ -198,7 +198,7 @@ TEST_F(GpgCoreTest, CoreSignVerifyDetachTest) { GpgBasicOperator::GetInstance().VerifySync(sign_text, sign_out_buffer); ASSERT_EQ(CheckGpgError(err_0), GPG_ERR_NO_ERROR); - ASSERT_TRUE((data_object_0->Check<GpgVerifyResult>())); + ASSERT_TRUE((data_object_0->Check<GpgVerifyResult, GFBuffer>())); auto verify_result = ExtractParams<GpgVerifyResult>(data_object_0, 0); ASSERT_FALSE(verify_result.GetSignature().empty()); ASSERT_EQ(verify_result.GetSignature().at(0).GetFingerprint(), @@ -241,7 +241,7 @@ TEST_F(GpgCoreTest, CoreEncryptSignDecrVerifyTest) { auto encrypt_text = GFBuffer(QString("Hello GpgFrontend!")); ASSERT_TRUE(sign_key.IsPrivateKey()); - ASSERT_TRUE(sign_key.IsHasActualSigningCapability()); + ASSERT_TRUE(sign_key.IsHasActualSignCap()); auto [err, data_object] = GpgBasicOperator::GetInstance().EncryptSignSync( {encrypt_key}, {sign_key}, encrypt_text, true); diff --git a/src/test/core/GpgCoreTestFileBasicOpera.cpp b/src/test/core/GpgCoreTestFileBasicOpera.cpp index 9a0c6a34..bb108499 100644 --- a/src/test/core/GpgCoreTestFileBasicOpera.cpp +++ b/src/test/core/GpgCoreTestFileBasicOpera.cpp @@ -232,7 +232,7 @@ TEST_F(GpgCoreTest, CoreFileEncryptSignDecrVerifyTest) { auto output_file = GetTempFilePath(); ASSERT_TRUE(sign_key.IsPrivateKey()); - ASSERT_TRUE(sign_key.IsHasActualSigningCapability()); + ASSERT_TRUE(sign_key.IsHasActualSignCap()); auto [err, data_object] = GpgFileOpera::GetInstance().EncryptSignFileSync( {encrypt_key}, {sign_key}, input_file, true, output_file); @@ -279,7 +279,7 @@ TEST_F(GpgCoreTest, CoreFileEncryptSignDecrVerifyBinaryTest) { auto output_file = GetTempFilePath(); ASSERT_TRUE(sign_key.IsPrivateKey()); - ASSERT_TRUE(sign_key.IsHasActualSigningCapability()); + ASSERT_TRUE(sign_key.IsHasActualSignCap()); auto [err, data_object] = GpgFileOpera::GetInstance().EncryptSignFileSync( {encrypt_key}, {sign_key}, input_file, false, output_file); diff --git a/src/test/core/GpgCoreTestKeyModel.cpp b/src/test/core/GpgCoreTestKeyModel.cpp index 5d72956f..622d7009 100644 --- a/src/test/core/GpgCoreTestKeyModel.cpp +++ b/src/test/core/GpgCoreTestKeyModel.cpp @@ -69,14 +69,14 @@ TEST_F(GpgCoreTest, GpgKeyTest) { ASSERT_EQ(key.GetSubKeys()->size(), 2); ASSERT_EQ(key.GetUIDs()->size(), 1); - ASSERT_TRUE(key.IsHasCertificationCapability()); - ASSERT_FALSE(key.IsHasEncryptionCapability()); - ASSERT_TRUE(key.IsHasSigningCapability()); - ASSERT_FALSE(key.IsHasAuthenticationCapability()); - ASSERT_FALSE(key.IsHasActualCertificationCapability()); - ASSERT_FALSE(key.IsHasActualEncryptionCapability()); - ASSERT_FALSE(key.IsHasActualSigningCapability()); - ASSERT_FALSE(key.IsHasActualAuthenticationCapability()); + ASSERT_TRUE(key.IsHasCertCap()); + ASSERT_FALSE(key.IsHasEncrCap()); + ASSERT_TRUE(key.IsHasSignCap()); + ASSERT_FALSE(key.IsHasAuthCap()); + ASSERT_FALSE(key.IsHasActualCertCap()); + ASSERT_FALSE(key.IsHasActualEncrCap()); + ASSERT_FALSE(key.IsHasActualSignCap()); + ASSERT_FALSE(key.IsHasActualAuthCap()); ASSERT_EQ(key.GetName(), "GpgFrontendTest"); ASSERT_TRUE(key.GetComment().isEmpty()); @@ -133,10 +133,10 @@ TEST_F(GpgCoreTest, GpgSubKeyTest) { ASSERT_EQ(sub_key.GetKeyLength(), 3072); ASSERT_EQ(sub_key.GetKeyAlgo(), "RSA3072"); ASSERT_EQ(sub_key.GetPubkeyAlgo(), "RSA"); - ASSERT_FALSE(sub_key.IsHasCertificationCapability()); - ASSERT_FALSE(sub_key.IsHasAuthenticationCapability()); - ASSERT_FALSE(sub_key.IsHasSigningCapability()); - ASSERT_TRUE(sub_key.IsHasEncryptionCapability()); + ASSERT_FALSE(sub_key.IsHasCertCap()); + ASSERT_FALSE(sub_key.IsHasAuthCap()); + ASSERT_FALSE(sub_key.IsHasSignCap()); + ASSERT_TRUE(sub_key.IsHasEncrCap()); ASSERT_EQ(sub_key.GetExpireTime(), QDateTime::fromString("2023-09-05T04:00:00Z", Qt::ISODate)); @@ -189,8 +189,8 @@ TEST_F(GpgCoreTest, GpgKeyGetterTest) { ASSERT_TRUE(key.IsGood()); auto keys = GpgKeyGetter::GetInstance(kGpgFrontendDefaultChannel).FetchKey(); - EXPECT_GT(keys->size(), 0); - ASSERT_TRUE(find(keys->begin(), keys->end(), key) != keys->end()); + EXPECT_GT(keys.size(), 0); + ASSERT_TRUE(std::find(keys.begin(), keys.end(), key) != keys.end()); } } // namespace GpgFrontend::Test
\ No newline at end of file diff --git a/src/test/core/GpgCoreTestKeygen.cpp b/src/test/core/GpgCoreTestKeygen.cpp index 9197e18e..a6c28219 100644 --- a/src/test/core/GpgCoreTestKeygen.cpp +++ b/src/test/core/GpgCoreTestKeygen.cpp @@ -29,26 +29,49 @@ #include "GpgCoreTest.h" #include "core/function/gpg/GpgKeyGetter.h" #include "core/function/gpg/GpgKeyOpera.h" -#include "core/model/GpgGenKeyInfo.h" #include "core/model/GpgGenerateKeyResult.h" #include "core/model/GpgKey.h" +#include "core/model/GpgKeyGenerateInfo.h" #include "core/utils/GpgUtils.h" #include "core/utils/MemoryUtils.h" namespace GpgFrontend::Test { +TEST_F(GpgCoreTest, SearchPrimaryKeyAlgoTest) { + auto [find, algo] = KeyGenerateInfo::SearchPrimaryKeyAlgo("rsa2048"); + ASSERT_TRUE(find); + ASSERT_EQ(algo.Id(), "rsa2048"); + ASSERT_EQ(algo.Id(), "rsa2048"); + ASSERT_EQ(algo.Name(), "RSA"); + ASSERT_EQ(algo.Type(), "RSA"); + ASSERT_EQ(algo.KeyLength(), 2048); +} + +TEST_F(GpgCoreTest, SearchSubKeyAlgoTest) { + auto [find, algo] = KeyGenerateInfo::SearchSubKeyAlgo("rsa2048"); + ASSERT_TRUE(find); + ASSERT_EQ(algo.Id(), "rsa2048"); + ASSERT_EQ(algo.Name(), "RSA"); + ASSERT_EQ(algo.Type(), "RSA"); + ASSERT_EQ(algo.KeyLength(), 2048); +} + TEST_F(GpgCoreTest, GenerateKeyRSA2048Test) { - auto keygen_info = SecureCreateSharedObject<GenKeyInfo>(); - keygen_info->SetName("foo_0"); - keygen_info->SetEmail("[email protected]"); - keygen_info->SetComment("foobar"); - keygen_info->SetAlgo("rsa"); - keygen_info->SetKeyLength(2048); - keygen_info->SetNonExpired(true); - keygen_info->SetNonPassPhrase(true); + auto p_info = QSharedPointer<KeyGenerateInfo>::create(); + p_info->SetName("foo_0"); + p_info->SetEmail("[email protected]"); + p_info->SetComment("foobar"); + + auto [found, algo] = KeyGenerateInfo::SearchPrimaryKeyAlgo("rsa2048"); + ASSERT_TRUE(found); + ASSERT_EQ(algo.Id(), "rsa2048"); + p_info->SetAlgo(algo); + + p_info->SetNonExpired(true); + p_info->SetNonPassPhrase(true); auto [err, data_object] = GpgKeyOpera::GetInstance(kGpgFrontendDefaultChannel) - .GenerateKeySync(keygen_info); + .GenerateKeySync(p_info); ASSERT_EQ(CheckGpgError(err), GPG_ERR_NO_ERROR); ASSERT_EQ(data_object->GetObjectSize(), 1); @@ -69,37 +92,41 @@ TEST_F(GpgCoreTest, GenerateKeyRSA2048Test) { ASSERT_EQ(key.GetPrimaryKeyLength(), 2048); ASSERT_EQ(key.GetExpireTime(), QDateTime::fromMSecsSinceEpoch(0)); - ASSERT_TRUE(key.IsHasCertificationCapability()); - ASSERT_TRUE(key.IsHasAuthenticationCapability()); - ASSERT_TRUE(key.IsHasEncryptionCapability()); - ASSERT_TRUE(key.IsHasSigningCapability()); + ASSERT_TRUE(key.IsHasCertCap()); + ASSERT_TRUE(key.IsHasAuthCap()); + ASSERT_TRUE(key.IsHasEncrCap()); + ASSERT_TRUE(key.IsHasSignCap()); - ASSERT_TRUE(key.IsHasActualCertificationCapability()); - ASSERT_TRUE(key.IsHasActualAuthenticationCapability()); - ASSERT_TRUE(key.IsHasActualEncryptionCapability()); - ASSERT_TRUE(key.IsHasActualSigningCapability()); + ASSERT_TRUE(key.IsHasActualCertCap()); + ASSERT_TRUE(key.IsHasActualAuthCap()); + ASSERT_TRUE(key.IsHasActualEncrCap()); + ASSERT_TRUE(key.IsHasActualSignCap()); GpgKeyOpera::GetInstance(kGpgFrontendDefaultChannel) .DeleteKey(result.GetFingerprint()); } TEST_F(GpgCoreTest, GenerateKeyRSA4096Test) { - auto keygen_info = SecureCreateSharedObject<GenKeyInfo>(); - keygen_info->SetName("foo_1"); - keygen_info->SetEmail("[email protected]"); - keygen_info->SetComment("hello gpgfrontend"); - keygen_info->SetAlgo("rsa"); - keygen_info->SetKeyLength(4096); - keygen_info->SetNonExpired(false); - keygen_info->SetNonPassPhrase(true); + auto p_info = QSharedPointer<KeyGenerateInfo>::create(); + p_info->SetName("foo_1"); + p_info->SetEmail("[email protected]"); + p_info->SetComment("hello gpgfrontend"); + + auto [found, algo] = KeyGenerateInfo::SearchPrimaryKeyAlgo("rsa4096"); + ASSERT_TRUE(found); + ASSERT_EQ(algo.Id(), "rsa4096"); + p_info->SetAlgo(algo); + + p_info->SetNonExpired(false); + p_info->SetNonPassPhrase(true); auto expire_time = QDateTime::currentDateTime().addSecs(static_cast<qint64>(24 * 3600)); - keygen_info->SetExpireTime(expire_time); - keygen_info->SetNonPassPhrase(false); + p_info->SetExpireTime(expire_time); + p_info->SetNonPassPhrase(false); auto [err, data_object] = GpgKeyOpera::GetInstance(kGpgFrontendDefaultChannel) - .GenerateKeySync(keygen_info); + .GenerateKeySync(p_info); ASSERT_EQ(CheckGpgError(err), GPG_ERR_NO_ERROR); ASSERT_EQ(data_object->GetObjectSize(), 1); @@ -119,22 +146,26 @@ TEST_F(GpgCoreTest, GenerateKeyRSA4096Test) { } TEST_F(GpgCoreTest, GenerateKeyDSA2048Test) { - auto keygen_info = SecureCreateSharedObject<GenKeyInfo>(); - keygen_info->SetName("foo_1"); - keygen_info->SetEmail("[email protected]"); - keygen_info->SetComment("hello gpgfrontend"); - keygen_info->SetAlgo("dsa"); - keygen_info->SetKeyLength(2048); - keygen_info->SetNonExpired(false); - keygen_info->SetNonPassPhrase(true); + auto p_info = QSharedPointer<KeyGenerateInfo>::create(); + p_info->SetName("foo_1"); + p_info->SetEmail("[email protected]"); + p_info->SetComment("hello gpgfrontend"); + + auto [found, algo] = KeyGenerateInfo::SearchPrimaryKeyAlgo("dsa2048"); + ASSERT_TRUE(found); + ASSERT_EQ(algo.Id(), "dsa2048"); + p_info->SetAlgo(algo); + + p_info->SetNonExpired(false); + p_info->SetNonPassPhrase(true); auto expire_time = QDateTime::currentDateTime().addSecs(static_cast<qint64>(24 * 3600)); - keygen_info->SetExpireTime(expire_time); - keygen_info->SetNonPassPhrase(false); + p_info->SetExpireTime(expire_time); + p_info->SetNonPassPhrase(false); auto [err, data_object] = GpgKeyOpera::GetInstance(kGpgFrontendDefaultChannel) - .GenerateKeySync(keygen_info); + .GenerateKeySync(p_info); ASSERT_EQ(CheckGpgError(err), GPG_ERR_NO_ERROR); ASSERT_EQ(data_object->GetObjectSize(), 1); ASSERT_TRUE(data_object->Check<GpgGenerateKeyResult>()); @@ -154,36 +185,41 @@ TEST_F(GpgCoreTest, GenerateKeyDSA2048Test) { ASSERT_EQ(key.GetPrimaryKeyLength(), 2048); ASSERT_GT(key.GetExpireTime(), QDateTime::currentDateTime()); - ASSERT_TRUE(key.IsHasCertificationCapability()); - ASSERT_TRUE(key.IsHasAuthenticationCapability()); - ASSERT_FALSE(key.IsHasEncryptionCapability()); - ASSERT_TRUE(key.IsHasSigningCapability()); + ASSERT_TRUE(key.IsHasCertCap()); + ASSERT_TRUE(key.IsHasAuthCap()); + ASSERT_FALSE(key.IsHasEncrCap()); + ASSERT_TRUE(key.IsHasSignCap()); - ASSERT_TRUE(key.IsHasActualCertificationCapability()); - ASSERT_TRUE(key.IsHasActualAuthenticationCapability()); - ASSERT_FALSE(key.IsHasActualEncryptionCapability()); - ASSERT_TRUE(key.IsHasActualSigningCapability()); + ASSERT_TRUE(key.IsHasActualCertCap()); + ASSERT_TRUE(key.IsHasActualAuthCap()); + ASSERT_FALSE(key.IsHasActualEncrCap()); + ASSERT_TRUE(key.IsHasActualSignCap()); GpgKeyOpera::GetInstance(kGpgFrontendDefaultChannel) .DeleteKey(result.GetFingerprint()); } TEST_F(GpgCoreTest, GenerateKeyED25519Test) { - auto keygen_info = SecureCreateSharedObject<GenKeyInfo>(); - keygen_info->SetName("foo_4"); - keygen_info->SetEmail("[email protected]"); - keygen_info->SetComment("hello gpgfrontend"); - keygen_info->SetAlgo("ed25519"); - keygen_info->SetNonExpired(false); - keygen_info->SetNonPassPhrase(true); + auto p_info = QSharedPointer<KeyGenerateInfo>::create(); + p_info->SetName("foo_4"); + p_info->SetEmail("[email protected]"); + p_info->SetComment("hello gpgfrontend"); + + auto [found, algo] = KeyGenerateInfo::SearchPrimaryKeyAlgo("ed25519"); + ASSERT_TRUE(found); + ASSERT_EQ(algo.Id(), "ed25519"); + p_info->SetAlgo(algo); + + p_info->SetNonExpired(false); + p_info->SetNonPassPhrase(true); auto expire_time = QDateTime::currentDateTime().addSecs(static_cast<qint64>(24 * 3600)); - keygen_info->SetExpireTime(expire_time); - keygen_info->SetNonPassPhrase(false); + p_info->SetExpireTime(expire_time); + p_info->SetNonPassPhrase(false); auto [err, data_object] = GpgKeyOpera::GetInstance(kGpgFrontendDefaultChannel) - .GenerateKeySync(keygen_info); + .GenerateKeySync(p_info); ASSERT_EQ(CheckGpgError(err), GPG_ERR_NO_ERROR); ASSERT_EQ(data_object->GetObjectSize(), 1); ASSERT_TRUE(data_object->Check<GpgGenerateKeyResult>()); @@ -203,37 +239,46 @@ TEST_F(GpgCoreTest, GenerateKeyED25519Test) { ASSERT_EQ(key.GetPrimaryKeyLength(), 255); ASSERT_GT(key.GetExpireTime(), QDateTime::currentDateTime()); - ASSERT_TRUE(key.IsHasCertificationCapability()); - ASSERT_TRUE(key.IsHasAuthenticationCapability()); - ASSERT_FALSE(key.IsHasEncryptionCapability()); - ASSERT_TRUE(key.IsHasSigningCapability()); + ASSERT_TRUE(key.IsHasCertCap()); + ASSERT_TRUE(key.IsHasAuthCap()); + ASSERT_FALSE(key.IsHasEncrCap()); + ASSERT_TRUE(key.IsHasSignCap()); - ASSERT_TRUE(key.IsHasActualCertificationCapability()); - ASSERT_TRUE(key.IsHasActualAuthenticationCapability()); - ASSERT_FALSE(key.IsHasActualEncryptionCapability()); - ASSERT_TRUE(key.IsHasActualSigningCapability()); + ASSERT_TRUE(key.IsHasActualCertCap()); + ASSERT_TRUE(key.IsHasActualAuthCap()); + ASSERT_FALSE(key.IsHasActualEncrCap()); + ASSERT_TRUE(key.IsHasActualSignCap()); GpgKeyOpera::GetInstance(kGpgFrontendDefaultChannel) .DeleteKey(result.GetFingerprint()); } TEST_F(GpgCoreTest, GenerateKeyED25519CV25519Test) { - auto keygen_info = SecureCreateSharedObject<GenKeyInfo>(); - keygen_info->SetName("foo_ec"); - keygen_info->SetEmail("[email protected]"); - keygen_info->SetComment("ecccc"); - keygen_info->SetAlgo("ed25519"); - keygen_info->SetNonExpired(true); - keygen_info->SetNonPassPhrase(true); - - auto subkeygen_info = SecureCreateSharedObject<GenKeyInfo>(true); - subkeygen_info->SetAlgo("cv25519"); - subkeygen_info->SetNonExpired(true); - subkeygen_info->SetNonPassPhrase(true); - - auto [err, data_object] = - GpgKeyOpera::GetInstance(kGpgFrontendDefaultChannel) - .GenerateKeyWithSubkeySync(keygen_info, subkeygen_info); + auto p_info = QSharedPointer<KeyGenerateInfo>::create(); + p_info->SetName("foo_ec"); + p_info->SetEmail("[email protected]"); + p_info->SetComment("ecccc"); + + auto [found, algo] = KeyGenerateInfo::SearchPrimaryKeyAlgo("ed25519"); + ASSERT_TRUE(found); + ASSERT_EQ(algo.Id(), "ed25519"); + p_info->SetAlgo(algo); + + p_info->SetNonExpired(true); + p_info->SetNonPassPhrase(true); + + auto s_info = QSharedPointer<KeyGenerateInfo>::create(true); + + std::tie(found, algo) = KeyGenerateInfo::SearchSubKeyAlgo("cv25519"); + ASSERT_TRUE(found); + ASSERT_EQ(algo.Id(), "cv25519"); + s_info->SetAlgo(algo); + + s_info->SetNonExpired(true); + s_info->SetNonPassPhrase(true); + + auto [err, data_object] = GpgKeyOpera::GetInstance(kGpgFrontendDefaultChannel) + .GenerateKeyWithSubkeySync(p_info, s_info); ASSERT_EQ(CheckGpgError(err), GPG_ERR_NO_ERROR); ASSERT_TRUE( @@ -255,10 +300,10 @@ TEST_F(GpgCoreTest, GenerateKeyED25519CV25519Test) { ASSERT_EQ(key.GetPrimaryKeyLength(), 255); ASSERT_EQ(key.GetExpireTime(), QDateTime::fromMSecsSinceEpoch(0)); - ASSERT_TRUE(key.IsHasCertificationCapability()); - ASSERT_TRUE(key.IsHasAuthenticationCapability()); - ASSERT_TRUE(key.IsHasEncryptionCapability()); - ASSERT_TRUE(key.IsHasSigningCapability()); + ASSERT_TRUE(key.IsHasCertCap()); + ASSERT_TRUE(key.IsHasAuthCap()); + ASSERT_TRUE(key.IsHasEncrCap()); + ASSERT_TRUE(key.IsHasSignCap()); ASSERT_FALSE(key.GetSubKeys()->empty()); ASSERT_EQ(key.GetSubKeys()->size(), 2); @@ -270,36 +315,45 @@ TEST_F(GpgCoreTest, GenerateKeyED25519CV25519Test) { ASSERT_EQ(subkey.GetKeyLength(), 255); ASSERT_EQ(subkey.GetExpireTime(), QDateTime::fromMSecsSinceEpoch(0)); - ASSERT_FALSE(subkey.IsHasCertificationCapability()); - ASSERT_FALSE(subkey.IsHasAuthenticationCapability()); - ASSERT_TRUE(subkey.IsHasEncryptionCapability()); - ASSERT_FALSE(subkey.IsHasSigningCapability()); + ASSERT_FALSE(subkey.IsHasCertCap()); + ASSERT_FALSE(subkey.IsHasAuthCap()); + ASSERT_TRUE(subkey.IsHasEncrCap()); + ASSERT_FALSE(subkey.IsHasSignCap()); - ASSERT_TRUE(key.IsHasActualCertificationCapability()); - ASSERT_TRUE(key.IsHasActualAuthenticationCapability()); - ASSERT_TRUE(key.IsHasActualEncryptionCapability()); - ASSERT_TRUE(key.IsHasActualSigningCapability()); + ASSERT_TRUE(key.IsHasActualCertCap()); + ASSERT_TRUE(key.IsHasActualAuthCap()); + ASSERT_TRUE(key.IsHasActualEncrCap()); + ASSERT_TRUE(key.IsHasActualSignCap()); GpgKeyOpera::GetInstance(kGpgFrontendDefaultChannel).DeleteKey(fpr); } TEST_F(GpgCoreTest, GenerateKeyED25519NISTP256Test) { - auto keygen_info = SecureCreateSharedObject<GenKeyInfo>(); - keygen_info->SetName("foo_ec2"); - keygen_info->SetEmail("[email protected]"); - keygen_info->SetComment("ecccc"); - keygen_info->SetAlgo("ed25519"); - keygen_info->SetNonExpired(true); - keygen_info->SetNonPassPhrase(true); - - auto subkeygen_info = SecureCreateSharedObject<GenKeyInfo>(true); - subkeygen_info->SetAlgo("nistp256"); - subkeygen_info->SetNonExpired(true); - subkeygen_info->SetNonPassPhrase(true); - - auto [err, data_object] = - GpgKeyOpera::GetInstance(kGpgFrontendDefaultChannel) - .GenerateKeyWithSubkeySync(keygen_info, subkeygen_info); + auto p_info = QSharedPointer<KeyGenerateInfo>::create(); + p_info->SetName("foo_ec2"); + p_info->SetEmail("[email protected]"); + p_info->SetComment("ecccc"); + + auto [found, algo] = KeyGenerateInfo::SearchPrimaryKeyAlgo("ed25519"); + ASSERT_TRUE(found); + ASSERT_EQ(algo.Id(), "ed25519"); + p_info->SetAlgo(algo); + + p_info->SetNonExpired(true); + p_info->SetNonPassPhrase(true); + + auto s_info = QSharedPointer<KeyGenerateInfo>::create(true); + + std::tie(found, algo) = KeyGenerateInfo::SearchSubKeyAlgo("nistp256"); + ASSERT_TRUE(found); + ASSERT_EQ(algo.Id(), "nistp256"); + s_info->SetAlgo(algo); + + s_info->SetNonExpired(true); + s_info->SetNonPassPhrase(true); + + auto [err, data_object] = GpgKeyOpera::GetInstance(kGpgFrontendDefaultChannel) + .GenerateKeyWithSubkeySync(p_info, s_info); ASSERT_EQ(CheckGpgError(err), GPG_ERR_NO_ERROR); ASSERT_TRUE( @@ -321,10 +375,10 @@ TEST_F(GpgCoreTest, GenerateKeyED25519NISTP256Test) { ASSERT_EQ(key.GetPrimaryKeyLength(), 255); ASSERT_EQ(key.GetExpireTime(), QDateTime::fromMSecsSinceEpoch(0)); - ASSERT_TRUE(key.IsHasCertificationCapability()); - ASSERT_TRUE(key.IsHasAuthenticationCapability()); - ASSERT_TRUE(key.IsHasEncryptionCapability()); - ASSERT_TRUE(key.IsHasSigningCapability()); + ASSERT_TRUE(key.IsHasCertCap()); + ASSERT_TRUE(key.IsHasAuthCap()); + ASSERT_TRUE(key.IsHasEncrCap()); + ASSERT_TRUE(key.IsHasSignCap()); ASSERT_FALSE(key.GetSubKeys()->empty()); ASSERT_EQ(key.GetSubKeys()->size(), 2); @@ -336,36 +390,45 @@ TEST_F(GpgCoreTest, GenerateKeyED25519NISTP256Test) { ASSERT_EQ(subkey.GetKeyLength(), 256); ASSERT_EQ(subkey.GetExpireTime(), QDateTime::fromMSecsSinceEpoch(0)); - ASSERT_FALSE(subkey.IsHasCertificationCapability()); - ASSERT_FALSE(subkey.IsHasAuthenticationCapability()); - ASSERT_TRUE(subkey.IsHasEncryptionCapability()); - ASSERT_FALSE(subkey.IsHasSigningCapability()); + ASSERT_FALSE(subkey.IsHasCertCap()); + ASSERT_FALSE(subkey.IsHasAuthCap()); + ASSERT_TRUE(subkey.IsHasEncrCap()); + ASSERT_FALSE(subkey.IsHasSignCap()); - ASSERT_TRUE(key.IsHasActualCertificationCapability()); - ASSERT_TRUE(key.IsHasActualAuthenticationCapability()); - ASSERT_TRUE(key.IsHasActualEncryptionCapability()); - ASSERT_TRUE(key.IsHasActualSigningCapability()); + ASSERT_TRUE(key.IsHasActualCertCap()); + ASSERT_TRUE(key.IsHasActualAuthCap()); + ASSERT_TRUE(key.IsHasActualEncrCap()); + ASSERT_TRUE(key.IsHasActualSignCap()); GpgKeyOpera::GetInstance(kGpgFrontendDefaultChannel).DeleteKey(fpr); } TEST_F(GpgCoreTest, GenerateKeyED25519BRAINPOOLP256R1Test) { - auto keygen_info = SecureCreateSharedObject<GenKeyInfo>(); - keygen_info->SetName("foo_ec3"); - keygen_info->SetEmail("[email protected]"); - keygen_info->SetComment("ecccc3"); - keygen_info->SetAlgo("ed25519"); - keygen_info->SetNonExpired(true); - keygen_info->SetNonPassPhrase(true); - - auto subkeygen_info = SecureCreateSharedObject<GenKeyInfo>(true); - subkeygen_info->SetAlgo("brainpoolp256r1"); - subkeygen_info->SetNonExpired(true); - subkeygen_info->SetNonPassPhrase(true); - - auto [err, data_object] = - GpgKeyOpera::GetInstance(kGpgFrontendDefaultChannel) - .GenerateKeyWithSubkeySync(keygen_info, subkeygen_info); + auto p_info = QSharedPointer<KeyGenerateInfo>::create(); + p_info->SetName("foo_ec3"); + p_info->SetEmail("[email protected]"); + p_info->SetComment("ecccc3"); + + auto [found, algo] = KeyGenerateInfo::SearchPrimaryKeyAlgo("ed25519"); + ASSERT_TRUE(found); + ASSERT_EQ(algo.Id(), "ed25519"); + p_info->SetAlgo(algo); + + p_info->SetNonExpired(true); + p_info->SetNonPassPhrase(true); + + auto s_info = QSharedPointer<KeyGenerateInfo>::create(true); + + std::tie(found, algo) = KeyGenerateInfo::SearchSubKeyAlgo("brainpoolp256r1"); + ASSERT_TRUE(found); + ASSERT_EQ(algo.Id(), "brainpoolp256r1"); + s_info->SetAlgo(algo); + + s_info->SetNonExpired(true); + s_info->SetNonPassPhrase(true); + + auto [err, data_object] = GpgKeyOpera::GetInstance(kGpgFrontendDefaultChannel) + .GenerateKeyWithSubkeySync(p_info, s_info); ASSERT_EQ(CheckGpgError(err), GPG_ERR_NO_ERROR); ASSERT_TRUE( @@ -387,10 +450,10 @@ TEST_F(GpgCoreTest, GenerateKeyED25519BRAINPOOLP256R1Test) { ASSERT_EQ(key.GetPrimaryKeyLength(), 255); ASSERT_EQ(key.GetExpireTime(), QDateTime::fromMSecsSinceEpoch(0)); - ASSERT_TRUE(key.IsHasCertificationCapability()); - ASSERT_TRUE(key.IsHasAuthenticationCapability()); - ASSERT_TRUE(key.IsHasEncryptionCapability()); - ASSERT_TRUE(key.IsHasSigningCapability()); + ASSERT_TRUE(key.IsHasCertCap()); + ASSERT_TRUE(key.IsHasAuthCap()); + ASSERT_TRUE(key.IsHasEncrCap()); + ASSERT_TRUE(key.IsHasSignCap()); ASSERT_FALSE(key.GetSubKeys()->empty()); ASSERT_EQ(key.GetSubKeys()->size(), 2); @@ -402,35 +465,40 @@ TEST_F(GpgCoreTest, GenerateKeyED25519BRAINPOOLP256R1Test) { ASSERT_EQ(subkey.GetKeyLength(), 256); ASSERT_EQ(subkey.GetExpireTime(), QDateTime::fromMSecsSinceEpoch(0)); - ASSERT_FALSE(subkey.IsHasCertificationCapability()); - ASSERT_FALSE(subkey.IsHasAuthenticationCapability()); - ASSERT_TRUE(subkey.IsHasEncryptionCapability()); - ASSERT_FALSE(subkey.IsHasSigningCapability()); + ASSERT_FALSE(subkey.IsHasCertCap()); + ASSERT_FALSE(subkey.IsHasAuthCap()); + ASSERT_TRUE(subkey.IsHasEncrCap()); + ASSERT_FALSE(subkey.IsHasSignCap()); - ASSERT_TRUE(key.IsHasActualCertificationCapability()); - ASSERT_TRUE(key.IsHasActualAuthenticationCapability()); - ASSERT_TRUE(key.IsHasActualEncryptionCapability()); - ASSERT_TRUE(key.IsHasActualSigningCapability()); + ASSERT_TRUE(key.IsHasActualCertCap()); + ASSERT_TRUE(key.IsHasActualAuthCap()); + ASSERT_TRUE(key.IsHasActualEncrCap()); + ASSERT_TRUE(key.IsHasActualSignCap()); GpgKeyOpera::GetInstance(kGpgFrontendDefaultChannel).DeleteKey(fpr); } TEST_F(GpgCoreTest, GenerateKeyNISTP256Test) { - auto keygen_info = SecureCreateSharedObject<GenKeyInfo>(); - keygen_info->SetName("foo_4"); - keygen_info->SetEmail("[email protected]"); - keygen_info->SetComment("hello gpgfrontend"); - keygen_info->SetAlgo("nistp256"); - keygen_info->SetNonExpired(false); - keygen_info->SetNonPassPhrase(true); + auto p_info = QSharedPointer<KeyGenerateInfo>::create(); + p_info->SetName("foo_4"); + p_info->SetEmail("[email protected]"); + p_info->SetComment("hello gpgfrontend"); + + auto [found, algo] = KeyGenerateInfo::SearchPrimaryKeyAlgo("nistp256"); + ASSERT_TRUE(found); + ASSERT_EQ(algo.Id(), "nistp256"); + p_info->SetAlgo(algo); + + p_info->SetNonExpired(false); + p_info->SetNonPassPhrase(true); auto expire_time = QDateTime::currentDateTime().addSecs(static_cast<qint64>(24 * 3600)); - keygen_info->SetExpireTime(expire_time); - keygen_info->SetNonPassPhrase(false); + p_info->SetExpireTime(expire_time); + p_info->SetNonPassPhrase(false); auto [err, data_object] = GpgKeyOpera::GetInstance(kGpgFrontendDefaultChannel) - .GenerateKeySync(keygen_info); + .GenerateKeySync(p_info); ASSERT_EQ(CheckGpgError(err), GPG_ERR_NO_ERROR); ASSERT_EQ(data_object->GetObjectSize(), 1); ASSERT_TRUE(data_object->Check<GpgGenerateKeyResult>()); @@ -451,36 +519,41 @@ TEST_F(GpgCoreTest, GenerateKeyNISTP256Test) { ASSERT_EQ(key.GetPrimaryKeyLength(), 256); ASSERT_GT(key.GetExpireTime(), QDateTime::currentDateTime()); - ASSERT_TRUE(key.IsHasCertificationCapability()); - ASSERT_TRUE(key.IsHasAuthenticationCapability()); - ASSERT_FALSE(key.IsHasEncryptionCapability()); - ASSERT_TRUE(key.IsHasSigningCapability()); + ASSERT_TRUE(key.IsHasCertCap()); + ASSERT_TRUE(key.IsHasAuthCap()); + ASSERT_FALSE(key.IsHasEncrCap()); + ASSERT_TRUE(key.IsHasSignCap()); - ASSERT_TRUE(key.IsHasActualCertificationCapability()); - ASSERT_TRUE(key.IsHasActualAuthenticationCapability()); - ASSERT_FALSE(key.IsHasActualEncryptionCapability()); - ASSERT_TRUE(key.IsHasActualSigningCapability()); + ASSERT_TRUE(key.IsHasActualCertCap()); + ASSERT_TRUE(key.IsHasActualAuthCap()); + ASSERT_FALSE(key.IsHasActualEncrCap()); + ASSERT_TRUE(key.IsHasActualSignCap()); GpgKeyOpera::GetInstance(kGpgFrontendDefaultChannel) .DeleteKey(result.GetFingerprint()); } TEST_F(GpgCoreTest, GenerateKeyED448Test) { - auto keygen_info = SecureCreateSharedObject<GenKeyInfo>(); - keygen_info->SetName("foo_4"); - keygen_info->SetEmail("[email protected]"); - keygen_info->SetComment("hello gpgfrontend"); - keygen_info->SetAlgo("ed448"); - keygen_info->SetNonExpired(false); - keygen_info->SetNonPassPhrase(true); + auto p_info = QSharedPointer<KeyGenerateInfo>::create(); + p_info->SetName("foo_4"); + p_info->SetEmail("[email protected]"); + p_info->SetComment("hello gpgfrontend"); + + auto [found, algo] = KeyGenerateInfo::SearchPrimaryKeyAlgo("ed448"); + ASSERT_TRUE(found); + ASSERT_EQ(algo.Id(), "ed448"); + p_info->SetAlgo(algo); + + p_info->SetNonExpired(false); + p_info->SetNonPassPhrase(true); auto expire_time = QDateTime::currentDateTime().addSecs(static_cast<qint64>(24 * 3600)); - keygen_info->SetExpireTime(expire_time); - keygen_info->SetNonPassPhrase(false); + p_info->SetExpireTime(expire_time); + p_info->SetNonPassPhrase(false); auto [err, data_object] = GpgKeyOpera::GetInstance(kGpgFrontendDefaultChannel) - .GenerateKeySync(keygen_info); + .GenerateKeySync(p_info); ASSERT_EQ(CheckGpgError(err), GPG_ERR_NO_ERROR); ASSERT_EQ(data_object->GetObjectSize(), 1); ASSERT_TRUE(data_object->Check<GpgGenerateKeyResult>()); @@ -501,36 +574,41 @@ TEST_F(GpgCoreTest, GenerateKeyED448Test) { ASSERT_EQ(key.GetPrimaryKeyLength(), 448); ASSERT_GT(key.GetExpireTime(), QDateTime::currentDateTime()); - ASSERT_TRUE(key.IsHasCertificationCapability()); - ASSERT_TRUE(key.IsHasAuthenticationCapability()); - ASSERT_FALSE(key.IsHasEncryptionCapability()); - ASSERT_TRUE(key.IsHasSigningCapability()); + ASSERT_TRUE(key.IsHasCertCap()); + ASSERT_TRUE(key.IsHasAuthCap()); + ASSERT_FALSE(key.IsHasEncrCap()); + ASSERT_TRUE(key.IsHasSignCap()); - ASSERT_TRUE(key.IsHasActualCertificationCapability()); - ASSERT_TRUE(key.IsHasActualAuthenticationCapability()); - ASSERT_FALSE(key.IsHasActualEncryptionCapability()); - ASSERT_TRUE(key.IsHasActualSigningCapability()); + ASSERT_TRUE(key.IsHasActualCertCap()); + ASSERT_TRUE(key.IsHasActualAuthCap()); + ASSERT_FALSE(key.IsHasActualEncrCap()); + ASSERT_TRUE(key.IsHasActualSignCap()); GpgKeyOpera::GetInstance(kGpgFrontendDefaultChannel) .DeleteKey(result.GetFingerprint()); } TEST_F(GpgCoreTest, GenerateKeySECP256K1Test) { - auto keygen_info = SecureCreateSharedObject<GenKeyInfo>(); - keygen_info->SetName("foo_4"); - keygen_info->SetEmail("[email protected]"); - keygen_info->SetComment("hello gpgfrontend"); - keygen_info->SetAlgo("secp256k1"); - keygen_info->SetNonExpired(false); - keygen_info->SetNonPassPhrase(true); + auto p_info = QSharedPointer<KeyGenerateInfo>::create(); + p_info->SetName("foo_4"); + p_info->SetEmail("[email protected]"); + p_info->SetComment("hello gpgfrontend"); + + auto [found, algo] = KeyGenerateInfo::SearchPrimaryKeyAlgo("secp256k1"); + ASSERT_TRUE(found); + ASSERT_EQ(algo.Id(), "secp256k1"); + p_info->SetAlgo(algo); + + p_info->SetNonExpired(false); + p_info->SetNonPassPhrase(true); auto expire_time = QDateTime::currentDateTime().addSecs(static_cast<qint64>(24 * 3600)); - keygen_info->SetExpireTime(expire_time); - keygen_info->SetNonPassPhrase(false); + p_info->SetExpireTime(expire_time); + p_info->SetNonPassPhrase(false); auto [err, data_object] = GpgKeyOpera::GetInstance(kGpgFrontendDefaultChannel) - .GenerateKeySync(keygen_info); + .GenerateKeySync(p_info); ASSERT_EQ(CheckGpgError(err), GPG_ERR_NO_ERROR); ASSERT_EQ(data_object->GetObjectSize(), 1); ASSERT_TRUE(data_object->Check<GpgGenerateKeyResult>()); @@ -551,15 +629,15 @@ TEST_F(GpgCoreTest, GenerateKeySECP256K1Test) { ASSERT_EQ(key.GetPrimaryKeyLength(), 256); ASSERT_GT(key.GetExpireTime(), QDateTime::currentDateTime()); - ASSERT_TRUE(key.IsHasCertificationCapability()); - ASSERT_TRUE(key.IsHasAuthenticationCapability()); - ASSERT_FALSE(key.IsHasEncryptionCapability()); - ASSERT_TRUE(key.IsHasSigningCapability()); + ASSERT_TRUE(key.IsHasCertCap()); + ASSERT_TRUE(key.IsHasAuthCap()); + ASSERT_FALSE(key.IsHasEncrCap()); + ASSERT_TRUE(key.IsHasSignCap()); - ASSERT_TRUE(key.IsHasActualCertificationCapability()); - ASSERT_TRUE(key.IsHasActualAuthenticationCapability()); - ASSERT_FALSE(key.IsHasActualEncryptionCapability()); - ASSERT_TRUE(key.IsHasActualSigningCapability()); + ASSERT_TRUE(key.IsHasActualCertCap()); + ASSERT_TRUE(key.IsHasActualAuthCap()); + ASSERT_FALSE(key.IsHasActualEncrCap()); + ASSERT_TRUE(key.IsHasActualSignCap()); GpgKeyOpera::GetInstance(kGpgFrontendDefaultChannel) .DeleteKey(result.GetFingerprint()); diff --git a/src/test/core/GpgCoreTestSubkeygen.cpp b/src/test/core/GpgCoreTestSubkeygen.cpp index c4fe92b0..bbaa2be0 100644 --- a/src/test/core/GpgCoreTestSubkeygen.cpp +++ b/src/test/core/GpgCoreTestSubkeygen.cpp @@ -29,27 +29,31 @@ #include "GpgCoreTest.h" #include "core/function/gpg/GpgKeyGetter.h" #include "core/function/gpg/GpgKeyOpera.h" -#include "core/model/GpgGenKeyInfo.h" #include "core/model/GpgGenerateKeyResult.h" #include "core/model/GpgKey.h" +#include "core/model/GpgKeyGenerateInfo.h" #include "core/utils/GpgUtils.h" #include "core/utils/MemoryUtils.h" namespace GpgFrontend::Test { TEST_F(GpgCoreTest, GenerateSubkeyRSA2048Test) { - auto main_key = GpgKeyGetter::GetInstance().GetKey( + auto p_key = GpgKeyGetter::GetInstance().GetKey( "E87C6A2D8D95C818DE93B3AE6A2764F8298DEB29"); - ASSERT_TRUE(main_key.IsGood()); + ASSERT_TRUE(p_key.IsGood()); - auto subkeygen_info = SecureCreateSharedObject<GenKeyInfo>(true); - subkeygen_info->SetAlgo("rsa"); - subkeygen_info->SetKeyLength(2048); - subkeygen_info->SetNonExpired(true); - subkeygen_info->SetNonPassPhrase(true); + auto s_info = QSharedPointer<KeyGenerateInfo>::create(true); + + auto [found, algo] = KeyGenerateInfo::SearchSubKeyAlgo("rsa2048"); + ASSERT_TRUE(found); + ASSERT_EQ(algo.Id(), "rsa2048"); + s_info->SetAlgo(algo); + + s_info->SetNonExpired(true); + s_info->SetNonPassPhrase(true); auto [err, data_object] = GpgKeyOpera::GetInstance(kGpgFrontendDefaultChannel) - .GenerateSubkeySync(main_key, subkeygen_info); + .GenerateSubkeySync(p_key, s_info); ASSERT_EQ(CheckGpgError(err), GPG_ERR_NO_ERROR); ASSERT_EQ(data_object->GetObjectSize(), 1); @@ -70,25 +74,29 @@ TEST_F(GpgCoreTest, GenerateSubkeyRSA2048Test) { ASSERT_EQ(subkey.GetKeyLength(), 2048); ASSERT_EQ(subkey.GetExpireTime(), QDateTime::fromMSecsSinceEpoch(0)); - ASSERT_FALSE(subkey.IsHasCertificationCapability()); - ASSERT_TRUE(subkey.IsHasAuthenticationCapability()); - ASSERT_TRUE(subkey.IsHasEncryptionCapability()); - ASSERT_TRUE(subkey.IsHasSigningCapability()); + ASSERT_FALSE(subkey.IsHasCertCap()); + ASSERT_TRUE(subkey.IsHasAuthCap()); + ASSERT_TRUE(subkey.IsHasEncrCap()); + ASSERT_TRUE(subkey.IsHasSignCap()); } TEST_F(GpgCoreTest, GenerateSubkeyDSA2048Test) { - auto main_key = GpgKeyGetter::GetInstance().GetKey( + auto p_key = GpgKeyGetter::GetInstance().GetKey( "E87C6A2D8D95C818DE93B3AE6A2764F8298DEB29"); - ASSERT_TRUE(main_key.IsGood()); + ASSERT_TRUE(p_key.IsGood()); + + auto s_info = QSharedPointer<KeyGenerateInfo>::create(true); - auto subkeygen_info = SecureCreateSharedObject<GenKeyInfo>(true); - subkeygen_info->SetAlgo("dsa"); - subkeygen_info->SetKeyLength(2048); - subkeygen_info->SetNonExpired(true); - subkeygen_info->SetNonPassPhrase(true); + auto [found, algo] = KeyGenerateInfo::SearchSubKeyAlgo("dsa2048"); + ASSERT_TRUE(found); + ASSERT_EQ(algo.Id(), "dsa2048"); + s_info->SetAlgo(algo); + + s_info->SetNonExpired(true); + s_info->SetNonPassPhrase(true); auto [err, data_object] = GpgKeyOpera::GetInstance(kGpgFrontendDefaultChannel) - .GenerateSubkeySync(main_key, subkeygen_info); + .GenerateSubkeySync(p_key, s_info); ASSERT_EQ(CheckGpgError(err), GPG_ERR_NO_ERROR); ASSERT_EQ(data_object->GetObjectSize(), 1); @@ -109,25 +117,29 @@ TEST_F(GpgCoreTest, GenerateSubkeyDSA2048Test) { ASSERT_EQ(subkey.GetKeyLength(), 2048); ASSERT_EQ(subkey.GetExpireTime(), QDateTime::fromMSecsSinceEpoch(0)); - ASSERT_FALSE(subkey.IsHasCertificationCapability()); - ASSERT_TRUE(subkey.IsHasAuthenticationCapability()); - ASSERT_FALSE(subkey.IsHasEncryptionCapability()); - ASSERT_TRUE(subkey.IsHasSigningCapability()); + ASSERT_FALSE(subkey.IsHasCertCap()); + ASSERT_TRUE(subkey.IsHasAuthCap()); + ASSERT_FALSE(subkey.IsHasEncrCap()); + ASSERT_TRUE(subkey.IsHasSignCap()); } TEST_F(GpgCoreTest, GenerateSubkeyELG2048Test) { - auto main_key = GpgKeyGetter::GetInstance().GetKey( + auto p_key = GpgKeyGetter::GetInstance().GetKey( "E87C6A2D8D95C818DE93B3AE6A2764F8298DEB29"); - ASSERT_TRUE(main_key.IsGood()); + ASSERT_TRUE(p_key.IsGood()); + + auto s_info = QSharedPointer<KeyGenerateInfo>::create(true); - auto subkeygen_info = SecureCreateSharedObject<GenKeyInfo>(true); - subkeygen_info->SetAlgo("elg"); - subkeygen_info->SetKeyLength(2048); - subkeygen_info->SetNonExpired(true); - subkeygen_info->SetNonPassPhrase(true); + auto [found, algo] = KeyGenerateInfo::SearchSubKeyAlgo("elg2048"); + ASSERT_TRUE(found); + ASSERT_EQ(algo.Id(), "elg2048"); + s_info->SetAlgo(algo); + + s_info->SetNonExpired(true); + s_info->SetNonPassPhrase(true); auto [err, data_object] = GpgKeyOpera::GetInstance(kGpgFrontendDefaultChannel) - .GenerateSubkeySync(main_key, subkeygen_info); + .GenerateSubkeySync(p_key, s_info); ASSERT_EQ(CheckGpgError(err), GPG_ERR_NO_ERROR); ASSERT_EQ(data_object->GetObjectSize(), 1); @@ -148,24 +160,29 @@ TEST_F(GpgCoreTest, GenerateSubkeyELG2048Test) { ASSERT_EQ(subkey.GetKeyLength(), 2048); ASSERT_EQ(subkey.GetExpireTime(), QDateTime::fromMSecsSinceEpoch(0)); - ASSERT_FALSE(subkey.IsHasCertificationCapability()); - ASSERT_FALSE(subkey.IsHasAuthenticationCapability()); - ASSERT_TRUE(subkey.IsHasEncryptionCapability()); - ASSERT_FALSE(subkey.IsHasSigningCapability()); + ASSERT_FALSE(subkey.IsHasCertCap()); + ASSERT_FALSE(subkey.IsHasAuthCap()); + ASSERT_TRUE(subkey.IsHasEncrCap()); + ASSERT_FALSE(subkey.IsHasSignCap()); } TEST_F(GpgCoreTest, GenerateSubkeyED25519Test) { - auto main_key = GpgKeyGetter::GetInstance().GetKey( + auto p_key = GpgKeyGetter::GetInstance().GetKey( "E87C6A2D8D95C818DE93B3AE6A2764F8298DEB29"); - ASSERT_TRUE(main_key.IsGood()); + ASSERT_TRUE(p_key.IsGood()); + + auto s_info = QSharedPointer<KeyGenerateInfo>::create(true); - auto subkeygen_info = SecureCreateSharedObject<GenKeyInfo>(true); - subkeygen_info->SetAlgo("ed25519"); - subkeygen_info->SetNonExpired(true); - subkeygen_info->SetNonPassPhrase(true); + auto [found, algo] = KeyGenerateInfo::SearchSubKeyAlgo("ed25519"); + ASSERT_TRUE(found); + ASSERT_EQ(algo.Id(), "ed25519"); + s_info->SetAlgo(algo); + + s_info->SetNonExpired(true); + s_info->SetNonPassPhrase(true); auto [err, data_object] = GpgKeyOpera::GetInstance(kGpgFrontendDefaultChannel) - .GenerateSubkeySync(main_key, subkeygen_info); + .GenerateSubkeySync(p_key, s_info); ASSERT_EQ(CheckGpgError(err), GPG_ERR_NO_ERROR); ASSERT_EQ(data_object->GetObjectSize(), 1); @@ -186,24 +203,29 @@ TEST_F(GpgCoreTest, GenerateSubkeyED25519Test) { ASSERT_EQ(subkey.GetKeyLength(), 255); ASSERT_EQ(subkey.GetExpireTime(), QDateTime::fromMSecsSinceEpoch(0)); - ASSERT_FALSE(subkey.IsHasCertificationCapability()); - ASSERT_TRUE(subkey.IsHasAuthenticationCapability()); - ASSERT_FALSE(subkey.IsHasEncryptionCapability()); - ASSERT_TRUE(subkey.IsHasSigningCapability()); + ASSERT_FALSE(subkey.IsHasCertCap()); + ASSERT_TRUE(subkey.IsHasAuthCap()); + ASSERT_FALSE(subkey.IsHasEncrCap()); + ASSERT_TRUE(subkey.IsHasSignCap()); } TEST_F(GpgCoreTest, GenerateSubkeyCV25519Test) { - auto main_key = GpgKeyGetter::GetInstance().GetKey( + auto p_key = GpgKeyGetter::GetInstance().GetKey( "E87C6A2D8D95C818DE93B3AE6A2764F8298DEB29"); - ASSERT_TRUE(main_key.IsGood()); + ASSERT_TRUE(p_key.IsGood()); + + auto s_info = QSharedPointer<KeyGenerateInfo>::create(true); - auto subkeygen_info = SecureCreateSharedObject<GenKeyInfo>(true); - subkeygen_info->SetAlgo("cv25519"); - subkeygen_info->SetNonExpired(true); - subkeygen_info->SetNonPassPhrase(true); + auto [found, algo] = KeyGenerateInfo::SearchSubKeyAlgo("cv25519"); + ASSERT_TRUE(found); + ASSERT_EQ(algo.Id(), "cv25519"); + s_info->SetAlgo(algo); + + s_info->SetNonExpired(true); + s_info->SetNonPassPhrase(true); auto [err, data_object] = GpgKeyOpera::GetInstance(kGpgFrontendDefaultChannel) - .GenerateSubkeySync(main_key, subkeygen_info); + .GenerateSubkeySync(p_key, s_info); ASSERT_EQ(CheckGpgError(err), GPG_ERR_NO_ERROR); ASSERT_EQ(data_object->GetObjectSize(), 1); @@ -224,23 +246,28 @@ TEST_F(GpgCoreTest, GenerateSubkeyCV25519Test) { ASSERT_EQ(subkey.GetKeyLength(), 255); ASSERT_EQ(subkey.GetExpireTime(), QDateTime::fromMSecsSinceEpoch(0)); - ASSERT_FALSE(subkey.IsHasCertificationCapability()); - ASSERT_FALSE(subkey.IsHasAuthenticationCapability()); - ASSERT_TRUE(subkey.IsHasEncryptionCapability()); - ASSERT_FALSE(subkey.IsHasSigningCapability()); + ASSERT_FALSE(subkey.IsHasCertCap()); + ASSERT_FALSE(subkey.IsHasAuthCap()); + ASSERT_TRUE(subkey.IsHasEncrCap()); + ASSERT_FALSE(subkey.IsHasSignCap()); } TEST_F(GpgCoreTest, GenerateSubkeyNISTP256Test) { - auto main_key = GpgKeyGetter::GetInstance().GetKey( + auto p_key = GpgKeyGetter::GetInstance().GetKey( "E87C6A2D8D95C818DE93B3AE6A2764F8298DEB29"); - ASSERT_TRUE(main_key.IsGood()); + ASSERT_TRUE(p_key.IsGood()); + + auto s_info = QSharedPointer<KeyGenerateInfo>::create(true); + + auto [found, algo] = KeyGenerateInfo::SearchSubKeyAlgo("nistp256"); + ASSERT_TRUE(found); + ASSERT_EQ(algo.Id(), "nistp256"); + s_info->SetAlgo(algo); - auto subkeygen_info = SecureCreateSharedObject<GenKeyInfo>(true); - subkeygen_info->SetAlgo("nistp256"); - subkeygen_info->SetNonExpired(true); + s_info->SetNonExpired(true); auto [err, data_object] = GpgKeyOpera::GetInstance(kGpgFrontendDefaultChannel) - .GenerateSubkeySync(main_key, subkeygen_info); + .GenerateSubkeySync(p_key, s_info); ASSERT_EQ(CheckGpgError(err), GPG_ERR_NO_ERROR); ASSERT_EQ(data_object->GetObjectSize(), 1); @@ -261,23 +288,28 @@ TEST_F(GpgCoreTest, GenerateSubkeyNISTP256Test) { ASSERT_EQ(subkey.GetKeyLength(), 256); ASSERT_EQ(subkey.GetExpireTime(), QDateTime::fromMSecsSinceEpoch(0)); - ASSERT_FALSE(subkey.IsHasCertificationCapability()); - ASSERT_FALSE(subkey.IsHasAuthenticationCapability()); - ASSERT_TRUE(subkey.IsHasEncryptionCapability()); - ASSERT_FALSE(subkey.IsHasSigningCapability()); + ASSERT_FALSE(subkey.IsHasCertCap()); + ASSERT_FALSE(subkey.IsHasAuthCap()); + ASSERT_TRUE(subkey.IsHasEncrCap()); + ASSERT_FALSE(subkey.IsHasSignCap()); } TEST_F(GpgCoreTest, GenerateSubkeyBRAINPOOLP256R1Test) { - auto main_key = GpgKeyGetter::GetInstance().GetKey( + auto p_key = GpgKeyGetter::GetInstance().GetKey( "E87C6A2D8D95C818DE93B3AE6A2764F8298DEB29"); - ASSERT_TRUE(main_key.IsGood()); + ASSERT_TRUE(p_key.IsGood()); + + auto s_info = QSharedPointer<KeyGenerateInfo>::create(true); + + auto [found, algo] = KeyGenerateInfo::SearchSubKeyAlgo("brainpoolp256r1"); + ASSERT_TRUE(found); + ASSERT_EQ(algo.Id(), "brainpoolp256r1"); + s_info->SetAlgo(algo); - auto subkeygen_info = SecureCreateSharedObject<GenKeyInfo>(true); - subkeygen_info->SetAlgo("brainpoolp256r1"); - subkeygen_info->SetNonExpired(true); + s_info->SetNonExpired(true); auto [err, data_object] = GpgKeyOpera::GetInstance(kGpgFrontendDefaultChannel) - .GenerateSubkeySync(main_key, subkeygen_info); + .GenerateSubkeySync(p_key, s_info); ASSERT_EQ(CheckGpgError(err), GPG_ERR_NO_ERROR); ASSERT_EQ(data_object->GetObjectSize(), 1); @@ -298,23 +330,28 @@ TEST_F(GpgCoreTest, GenerateSubkeyBRAINPOOLP256R1Test) { ASSERT_EQ(subkey.GetKeyLength(), 256); ASSERT_EQ(subkey.GetExpireTime(), QDateTime::fromMSecsSinceEpoch(0)); - ASSERT_FALSE(subkey.IsHasCertificationCapability()); - ASSERT_FALSE(subkey.IsHasAuthenticationCapability()); - ASSERT_TRUE(subkey.IsHasEncryptionCapability()); - ASSERT_FALSE(subkey.IsHasSigningCapability()); + ASSERT_FALSE(subkey.IsHasCertCap()); + ASSERT_FALSE(subkey.IsHasAuthCap()); + ASSERT_TRUE(subkey.IsHasEncrCap()); + ASSERT_FALSE(subkey.IsHasSignCap()); } TEST_F(GpgCoreTest, GenerateSubkeyX448Test) { - auto main_key = GpgKeyGetter::GetInstance().GetKey( + auto p_key = GpgKeyGetter::GetInstance().GetKey( "E87C6A2D8D95C818DE93B3AE6A2764F8298DEB29"); - ASSERT_TRUE(main_key.IsGood()); + ASSERT_TRUE(p_key.IsGood()); - auto subkeygen_info = SecureCreateSharedObject<GenKeyInfo>(true); - subkeygen_info->SetAlgo("x448"); - subkeygen_info->SetNonExpired(true); + auto s_info = QSharedPointer<KeyGenerateInfo>::create(true); + + auto [found, algo] = KeyGenerateInfo::SearchSubKeyAlgo("x448"); + ASSERT_TRUE(found); + ASSERT_EQ(algo.Id(), "x448"); + s_info->SetAlgo(algo); + + s_info->SetNonExpired(true); auto [err, data_object] = GpgKeyOpera::GetInstance(kGpgFrontendDefaultChannel) - .GenerateSubkeySync(main_key, subkeygen_info); + .GenerateSubkeySync(p_key, s_info); ASSERT_EQ(CheckGpgError(err), GPG_ERR_NO_ERROR); ASSERT_EQ(data_object->GetObjectSize(), 1); @@ -335,23 +372,28 @@ TEST_F(GpgCoreTest, GenerateSubkeyX448Test) { ASSERT_EQ(subkey.GetKeyLength(), 448); ASSERT_EQ(subkey.GetExpireTime(), QDateTime::fromMSecsSinceEpoch(0)); - ASSERT_FALSE(subkey.IsHasCertificationCapability()); - ASSERT_FALSE(subkey.IsHasAuthenticationCapability()); - ASSERT_TRUE(subkey.IsHasEncryptionCapability()); - ASSERT_FALSE(subkey.IsHasSigningCapability()); + ASSERT_FALSE(subkey.IsHasCertCap()); + ASSERT_FALSE(subkey.IsHasAuthCap()); + ASSERT_TRUE(subkey.IsHasEncrCap()); + ASSERT_FALSE(subkey.IsHasSignCap()); } TEST_F(GpgCoreTest, GenerateSubkeySECP256K1Test) { - auto main_key = GpgKeyGetter::GetInstance().GetKey( + auto p_key = GpgKeyGetter::GetInstance().GetKey( "E87C6A2D8D95C818DE93B3AE6A2764F8298DEB29"); - ASSERT_TRUE(main_key.IsGood()); + ASSERT_TRUE(p_key.IsGood()); + + auto s_info = QSharedPointer<KeyGenerateInfo>::create(true); + + auto [found, algo] = KeyGenerateInfo::SearchSubKeyAlgo("secp256k1"); + ASSERT_TRUE(found); + ASSERT_EQ(algo.Id(), "secp256k1"); + s_info->SetAlgo(algo); - auto subkeygen_info = SecureCreateSharedObject<GenKeyInfo>(true); - subkeygen_info->SetAlgo("secp256k1"); - subkeygen_info->SetNonExpired(true); + s_info->SetNonExpired(true); auto [err, data_object] = GpgKeyOpera::GetInstance(kGpgFrontendDefaultChannel) - .GenerateSubkeySync(main_key, subkeygen_info); + .GenerateSubkeySync(p_key, s_info); ASSERT_EQ(CheckGpgError(err), GPG_ERR_NO_ERROR); ASSERT_EQ(data_object->GetObjectSize(), 1); @@ -372,10 +414,10 @@ TEST_F(GpgCoreTest, GenerateSubkeySECP256K1Test) { ASSERT_EQ(subkey.GetKeyLength(), 256); ASSERT_EQ(subkey.GetExpireTime(), QDateTime::fromMSecsSinceEpoch(0)); - ASSERT_FALSE(subkey.IsHasCertificationCapability()); - ASSERT_FALSE(subkey.IsHasAuthenticationCapability()); - ASSERT_TRUE(subkey.IsHasEncryptionCapability()); - ASSERT_FALSE(subkey.IsHasSigningCapability()); + ASSERT_FALSE(subkey.IsHasCertCap()); + ASSERT_FALSE(subkey.IsHasAuthCap()); + ASSERT_TRUE(subkey.IsHasEncrCap()); + ASSERT_FALSE(subkey.IsHasSignCap()); } } // namespace GpgFrontend::Test
\ No newline at end of file diff --git a/src/ui/CMakeLists.txt b/src/ui/CMakeLists.txt index 0f35fdca..e399068d 100644 --- a/src/ui/CMakeLists.txt +++ b/src/ui/CMakeLists.txt @@ -38,6 +38,7 @@ aux_source_directory(dialog/import_export UI_SOURCE) aux_source_directory(dialog/controller UI_SOURCE) aux_source_directory(dialog UI_SOURCE) aux_source_directory(function UI_SOURCE) +aux_source_directory(model UI_SOURCE) # define libgpgfrontend_ui set(CMAKE_CXX_VISIBILITY_PRESET hidden) diff --git a/src/ui/GpgFrontendUIInit.cpp b/src/ui/GpgFrontendUIInit.cpp index bc41f5f7..9b24141f 100644 --- a/src/ui/GpgFrontendUIInit.cpp +++ b/src/ui/GpgFrontendUIInit.cpp @@ -127,7 +127,7 @@ void InitGpgFrontendUI(QApplication* /*app*/) { // init locale InitUITranslations(); - auto settings = GlobalSettingStation::GetInstance().GetSettings(); + auto settings = GetSettings(); auto theme = settings.value("appearance/theme").toString(); #if defined(_WIN32) || defined(WIN32) diff --git a/src/ui/UISignalStation.h b/src/ui/UISignalStation.h index d89ef91b..dfafca93 100644 --- a/src/ui/UISignalStation.h +++ b/src/ui/UISignalStation.h @@ -75,7 +75,7 @@ class UISignalStation : public QObject { * @brief * */ - void SignalMainWindowlUpdateBasicalOperaMenu(unsigned int); + void SignalMainWindowUpdateBasicOperaMenu(unsigned int); /** * @brief diff --git a/src/ui/UserInterfaceUtils.cpp b/src/ui/UserInterfaceUtils.cpp index d8c0059b..6ff044f0 100644 --- a/src/ui/UserInterfaceUtils.cpp +++ b/src/ui/UserInterfaceUtils.cpp @@ -51,23 +51,12 @@ #include "ui/dialog/controller/GnuPGControllerDialog.h" #include "ui/dialog/import_export/KeyServerImportDialog.h" #include "ui/struct/settings_object/KeyServerSO.h" -#include "ui/widgets/TextEdit.h" namespace GpgFrontend::UI { QScopedPointer<CommonUtils> CommonUtils::instance = QScopedPointer<CommonUtils>(nullptr); -void show_verify_details(QWidget *parent, int channel, - InfoBoardWidget *info_board, GpgError error, - const GpgVerifyResult &verify_result) { - // take out result - info_board->ResetOptionActionsMenu(); - info_board->AddOptionalAction( - QCoreApplication::tr("Show Verify Details"), - [=]() { VerifyDetailsDialog(parent, channel, error, verify_result); }); -} - void ImportUnknownKeyFromKeyserver( QWidget *parent, int channel, const GpgVerifyResultAnalyse &verify_result) { QMessageBox::StandardButton reply; @@ -80,10 +69,10 @@ void ImportUnknownKeyFromKeyserver( QMessageBox::Yes | QMessageBox::No); if (reply == QMessageBox::Yes) { auto dialog = KeyServerImportDialog(channel, parent); - auto key_ids = std::make_unique<KeyIdArgsList>(); + auto key_ids = KeyIdArgsList{}; auto *signature = verify_result.GetSignatures(); while (signature != nullptr) { - key_ids->push_back(signature->fpr); + key_ids.push_back(signature->fpr); signature = signature->next; } dialog.show(); @@ -91,35 +80,6 @@ void ImportUnknownKeyFromKeyserver( } } -void process_operation(QWidget *parent, const QString &waiting_title, - const Thread::Task::TaskRunnable func, - const Thread::Task::TaskCallback callback, - DataObjectPtr data_object) { - auto *dialog = new WaitingDialog(waiting_title, parent); - - auto *process_task = new Thread::Task(std::move(func), waiting_title, - data_object, std::move(callback)); - - QApplication::connect(process_task, &Thread::Task::SignalTaskEnd, dialog, - &QDialog::close); - QApplication::connect(process_task, &Thread::Task::SignalTaskEnd, dialog, - &QDialog::deleteLater); - - // a looper to wait for the operation - QEventLoop looper; - QApplication::connect(process_task, &Thread::Task::SignalTaskEnd, &looper, - &QEventLoop::quit); - - // post process task to task runner - Thread::TaskRunnerGetter::GetInstance() - .GetTaskRunner(Thread::TaskRunnerGetter::kTaskRunnerType_GPG) - ->PostTask(process_task); - - // block until task finished - // this is to keep reference vaild until task finished - looper.exec(); -} - auto CommonUtils::GetInstance() -> CommonUtils * { if (!instance) { instance.reset(new CommonUtils()); @@ -194,28 +154,6 @@ CommonUtils::CommonUtils() : QWidget(nullptr) { }); } -void CommonUtils::WaitForOpera(QWidget *parent, - const QString &waiting_dialog_title, - const OperaWaitingCb &opera) { - QEventLoop looper; - QPointer<WaitingDialog> const dialog = - new WaitingDialog(waiting_dialog_title, parent); - connect(dialog, &QDialog::finished, &looper, &QEventLoop::quit); - connect(dialog, &QDialog::finished, dialog, &QDialog::deleteLater); - dialog->show(); - - QTimer::singleShot(64, parent, [=]() { - opera([dialog]() { - if (dialog != nullptr) { - dialog->close(); - dialog->accept(); - } - }); - }); - - looper.exec(); -} - void CommonUtils::RaiseMessageBox(QWidget *parent, GpgError err) { GpgErrorDesc desc = DescribeGpgErrCode(err); GpgErrorCode err_code = CheckGpgError2ErrCode(err); @@ -326,7 +264,7 @@ void CommonUtils::SlotExecuteGpgCommand( const QStringList &arguments, const std::function<void(QProcess *)> &interact_func) { QEventLoop looper; - auto *dialog = new WaitingDialog(tr("Processing"), nullptr); + auto *dialog = new WaitingDialog(tr("Processing"), false); dialog->show(); auto *gpg_process = new QProcess(&looper); gpg_process->setProcessChannelMode(QProcess::MergedChannels); @@ -628,7 +566,7 @@ void CommonUtils::ImportKeyFromKeyServer(int channel, } void CommonUtils::ImportKeyByKeyServerSyncModule(QWidget *parent, int channel, - const QList<QString> &fprs) { + const QStringList &fprs) { if (!Module::IsModuleActivate(kKeyServerSyncModuleID)) { return; } diff --git a/src/ui/UserInterfaceUtils.h b/src/ui/UserInterfaceUtils.h index 6aae75ba..372bc55a 100644 --- a/src/ui/UserInterfaceUtils.h +++ b/src/ui/UserInterfaceUtils.h @@ -43,9 +43,6 @@ namespace GpgFrontend::UI { class InfoBoardWidget; class TextEdit; -using OperaWaitingHd = std::function<void()>; -using OperaWaitingCb = const std::function<void(OperaWaitingHd)>; - /** * @brief * @@ -110,14 +107,6 @@ class CommonUtils : public QWidget { * * @param err */ - static void WaitForOpera(QWidget* parent, const QString&, - const OperaWaitingCb&); - - /** - * @brief - * - * @param err - */ static void RaiseMessageBox(QWidget* parent, GpgError err); /** @@ -227,7 +216,7 @@ class CommonUtils : public QWidget { * @param channel */ void ImportKeyByKeyServerSyncModule(QWidget* parent, int channel, - const QList<QString>& fprs); + const QStringList& fprs); /** * @brief diff --git a/src/ui/dialog/KeyDatabaseEditDialog.cpp b/src/ui/dialog/KeyDatabaseEditDialog.cpp index cc6e2cf9..bde50f0c 100644 --- a/src/ui/dialog/KeyDatabaseEditDialog.cpp +++ b/src/ui/dialog/KeyDatabaseEditDialog.cpp @@ -30,6 +30,7 @@ #include <utility> +#include "core/function/GlobalSettingStation.h" #include "core/struct/settings_object/KeyDatabaseItemSO.h" #include "core/utils/MemoryUtils.h" #include "ui_KeyDatabaseEditDialog.h" @@ -43,10 +44,13 @@ KeyDatabaseEditDialog::KeyDatabaseEditDialog( ui_->setupUi(this); ui_->keyDBPathShowLabel->setHidden(true); + ui_->convert2RelativePathCheckBox->setChecked( + GlobalSettingStation::GetInstance().IsProtableMode()); ui_->keyDBNameLabel->setText(tr("Key Database Name")); ui_->keyDBPathLabel->setText(tr("Key Database Path")); ui_->selectKeyDBButton->setText(tr("Select A Key Database Path")); + ui_->convert2RelativePathCheckBox->setText(tr("Convert to Relative Path")); this->setWindowTitle(tr("Key Database Info")); @@ -96,6 +100,11 @@ void KeyDatabaseEditDialog::slot_button_box_accepted() { } } + if (ui_->convert2RelativePathCheckBox->isChecked()) { + path_ = QDir(GlobalSettingStation::GetInstance().GetAppDir()) + .relativeFilePath(path_); + } + slot_clear_err_msg(); emit SignalKeyDatabaseInfoAccepted(name_, path_); this->accept(); diff --git a/src/ui/dialog/SignersPicker.cpp b/src/ui/dialog/SignersPicker.cpp index dcd23a6b..61a31606 100644 --- a/src/ui/dialog/SignersPicker.cpp +++ b/src/ui/dialog/SignersPicker.cpp @@ -49,11 +49,9 @@ SignersPicker::SignersPicker(int channel, QWidget* parent) GpgKeyTableColumn::kNAME | GpgKeyTableColumn::kEMAIL_ADDRESS | GpgKeyTableColumn::kKEY_ID | GpgKeyTableColumn::kUSAGE, this); - key_list_->AddListGroupTab(tr("Signers"), "signers", - GpgKeyTableDisplayMode::kPRIVATE_KEY, - [](const GpgKey& key) -> bool { - return key.IsHasActualSigningCapability(); - }); + key_list_->AddListGroupTab( + tr("Signers"), "signers", GpgKeyTableDisplayMode::kPRIVATE_KEY, + [](const GpgKey& key) -> bool { return key.IsHasActualSignCap(); }); key_list_->SlotRefresh(); auto* vbox2 = new QVBoxLayout(); @@ -78,15 +76,15 @@ SignersPicker::SignersPicker(int channel, QWidget* parent) this->show(); } -auto SignersPicker::GetCheckedSigners() -> GpgFrontend::KeyIdArgsListPtr { +auto SignersPicker::GetCheckedSigners() -> GpgFrontend::KeyIdArgsList { return key_list_->GetCheckedPrivateKey(); } -auto SignersPicker::GetCheckedSignerKeyIds() -> QStringList { +auto SignersPicker::GetCheckedSignerKeyIds() -> GpgFrontend::KeyIdArgsList { auto priv_keys = key_list_->GetCheckedPrivateKey(); QStringList r; - for (const auto& priv_key : *priv_keys) { + for (const auto& priv_key : priv_keys) { r.append(priv_key); } return r; diff --git a/src/ui/dialog/SignersPicker.h b/src/ui/dialog/SignersPicker.h index accf6952..826ccfab 100644 --- a/src/ui/dialog/SignersPicker.h +++ b/src/ui/dialog/SignersPicker.h @@ -56,14 +56,14 @@ class SignersPicker : public GeneralDialog { * * @return GpgFrontend::KeyIdArgsListPtr */ - auto GetCheckedSigners() -> KeyIdArgsListPtr; + auto GetCheckedSigners() -> KeyIdArgsList; /** * @brief Get the Checked Signer Key Ids object * * @return QStringList */ - auto GetCheckedSignerKeyIds() -> QStringList; + auto GetCheckedSignerKeyIds() -> KeyIdArgsList; /** * * @return diff --git a/src/ui/dialog/WaitingDialog.cpp b/src/ui/dialog/WaitingDialog.cpp index da620ebf..e9d28f26 100644 --- a/src/ui/dialog/WaitingDialog.cpp +++ b/src/ui/dialog/WaitingDialog.cpp @@ -32,15 +32,14 @@ namespace GpgFrontend::UI { -WaitingDialog::WaitingDialog(const QString& title, QWidget* parent) - : GeneralDialog("WaitingDialog", parent) { - auto* pb = new QProgressBar(); - pb->setRange(0, 0); - pb->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred); - pb->setTextVisible(false); +WaitingDialog::WaitingDialog(const QString& title, bool range, QWidget* parent) + : GeneralDialog("WaitingDialog", parent), pb_(new QProgressBar()) { + pb_->setRange(0, range ? 100 : 0); + pb_->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred); + pb_->setTextVisible(false); auto* layout = new QVBoxLayout(); - layout->addWidget(pb); + layout->addWidget(pb_); this->setLayout(layout); this->setModal(true); @@ -50,8 +49,14 @@ WaitingDialog::WaitingDialog(const QString& title, QWidget* parent) this->setAttribute(Qt::WA_DeleteOnClose); this->setFixedSize(240, 42); + connect(this, &WaitingDialog::SignalUpdateValue, this, + &WaitingDialog::SlotUpdateValue); + this->movePosition2CenterOfParent(); this->show(); } +void WaitingDialog::SlotUpdateValue(int value) { + if (pb_->maximum() > 0) pb_->setValue(value); +} } // namespace GpgFrontend::UI diff --git a/src/ui/dialog/WaitingDialog.h b/src/ui/dialog/WaitingDialog.h index 6b0877fe..1fb9fe17 100644 --- a/src/ui/dialog/WaitingDialog.h +++ b/src/ui/dialog/WaitingDialog.h @@ -46,7 +46,28 @@ class WaitingDialog : public GeneralDialog { * @param title * @param parent */ - WaitingDialog(const QString& title, QWidget* parent); + explicit WaitingDialog(const QString& title, bool range, + QWidget* parent = nullptr); + + public slots: + + /** + * @brief max 100, min 0 + * + */ + void SlotUpdateValue(int value); + + signals: + + /** + * @brief + * + * @param value + */ + void SignalUpdateValue(int value); + + private: + QProgressBar* pb_; }; } // namespace GpgFrontend::UI diff --git a/src/ui/dialog/Wizard.cpp b/src/ui/dialog/Wizard.cpp index 3a3c0800..8e77dada 100644 --- a/src/ui/dialog/Wizard.cpp +++ b/src/ui/dialog/Wizard.cpp @@ -29,14 +29,16 @@ #include "Wizard.h" #include "core/function/GlobalSettingStation.h" +#include "ui/GpgFrontendUI.h" +#include "ui/dialog/key_generate/KeyGenerateDialog.h" namespace GpgFrontend::UI { Wizard::Wizard(QWidget* parent) : QWizard(parent) { - setPage(Page_Intro, new IntroPage(this)); - setPage(Page_Choose, new ChoosePage(this)); - setPage(Page_GenKey, new KeyGenPage(this)); - setPage(Page_Conclusion, new ConclusionPage(this)); + setPage(kPAGE_INTRO, new IntroPage(this)); + setPage(kPAGE_CHOOSE, new ChoosePage(this)); + setPage(kPAGE_GEN_KEY, new KeyGenPage(this)); + setPage(kPAGE_CONCLUSION, new ConclusionPage(this)); #ifndef Q_WS_MAC setWizardStyle(ModernStyle); #endif @@ -45,10 +47,7 @@ Wizard::Wizard(QWidget* parent) : QWizard(parent) { setPixmap(QWizard::LogoPixmap, QPixmap(":/icons/gpgfrontend_logo.png").scaled(64, 64)); - int next_page_id = GlobalSettingStation::GetInstance() - .GetSettings() - .value("wizard.next_page", -1) - .toInt(); + int next_page_id = GetSettings().value("wizard.next_page", -1).toInt(); setStartId(next_page_id); connect(this, &Wizard::accepted, this, &Wizard::slot_wizard_accepted); @@ -57,7 +56,7 @@ Wizard::Wizard(QWidget* parent) : QWizard(parent) { void Wizard::slot_wizard_accepted() { // Don't show is mapped to show -> negation try { - auto settings = GlobalSettingStation::GetInstance().GetSettings(); + auto settings = GetSettings(); settings.setValue("wizard/show_wizard", false); } catch (...) { FLOG_W("setting operation error"); @@ -101,7 +100,7 @@ IntroPage::IntroPage(QWidget* parent) : QWizardPage(parent) { setLayout(layout); } -int IntroPage::nextId() const { return Wizard::Page_Choose; } +int IntroPage::nextId() const { return Wizard::kPAGE_CHOOSE; } ChoosePage::ChoosePage(QWidget* parent) : QWizardPage(parent) { setTitle(tr("Choose your action...")); @@ -146,7 +145,7 @@ ChoosePage::ChoosePage(QWidget* parent) : QWizardPage(parent) { layout->addWidget(encr_decy_text_label); layout->addWidget(sign_verify_text_label); setLayout(layout); - next_page_ = Wizard::Page_Conclusion; + next_page_ = Wizard::kPAGE_CONCLUSION; } int ChoosePage::nextId() const { return next_page_; } @@ -193,10 +192,10 @@ KeyGenPage::KeyGenPage(QWidget* parent) : QWizardPage(parent) { setLayout(layout); } -int KeyGenPage::nextId() const { return Wizard::Page_Conclusion; } +int KeyGenPage::nextId() const { return Wizard::kPAGE_CONCLUSION; } void KeyGenPage::slot_generate_key_dialog() { - (new KeyGenDialog(kGpgFrontendDefaultChannel, this))->show(); + (new KeyGenerateDialog(kGpgFrontendDefaultChannel, this))->show(); wizard()->next(); } diff --git a/src/ui/dialog/Wizard.h b/src/ui/dialog/Wizard.h index eae1d73d..91a5f846 100644 --- a/src/ui/dialog/Wizard.h +++ b/src/ui/dialog/Wizard.h @@ -29,10 +29,6 @@ #pragma once #include "core/GpgConstants.h" -#include "main_window/KeyMgmt.h" -#include "ui/GpgFrontendUI.h" -#include "ui/dialog/key_generate/KeygenDialog.h" -#include "ui/dialog/settings/SettingsDialog.h" namespace GpgFrontend::UI { @@ -45,7 +41,12 @@ class Wizard : public QWizard { Q_ENUMS(WizardPages) public: - enum WizardPages { Page_Intro, Page_Choose, Page_GenKey, Page_Conclusion }; + enum WizardPages { + kPAGE_INTRO, + kPAGE_CHOOSE, + kPAGE_GEN_KEY, + kPAGE_CONCLUSION, + }; /** * @brief Construct a new Wizard object @@ -176,7 +177,7 @@ class ConclusionPage : public QWizardPage { * * @return int */ - [[nodiscard]] int nextId() const override; + [[nodiscard]] auto nextId() const -> int override; private: QCheckBox* dont_show_wizard_checkbox_; ///< diff --git a/src/ui/dialog/controller/GnuPGControllerDialog.cpp b/src/ui/dialog/controller/GnuPGControllerDialog.cpp index 5b8e96dd..e68e208a 100644 --- a/src/ui/dialog/controller/GnuPGControllerDialog.cpp +++ b/src/ui/dialog/controller/GnuPGControllerDialog.cpp @@ -45,7 +45,8 @@ namespace GpgFrontend::UI { GnuPGControllerDialog::GnuPGControllerDialog(QWidget* parent) : GeneralDialog("GnuPGControllerDialog", parent), - ui_(GpgFrontend::SecureCreateSharedObject<Ui_GnuPGControllerDialog>()) { + ui_(GpgFrontend::SecureCreateSharedObject<Ui_GnuPGControllerDialog>()), + app_path_(GlobalSettingStation::GetInstance().GetAppDir()) { ui_->setupUi(this); ui_->asciiModeCheckBox->setText(tr("Use Binary Mode for File Operations")); @@ -73,7 +74,7 @@ GnuPGControllerDialog::GnuPGControllerDialog(QWidget* parent) ui_->keyDatabaseTable->clear(); QStringList column_titles; - column_titles << tr("Name") << tr("Path"); + column_titles << tr("Name") << tr("Status") << tr("Path") << tr("Real Path"); ui_->keyDatabaseTable->setColumnCount(static_cast<int>(column_titles.size())); ui_->keyDatabaseTable->setHorizontalHeaderLabels(column_titles); @@ -203,10 +204,7 @@ void GnuPGControllerDialog::slot_update_custom_gnupg_install_path_label( if (custom_gnupg_path_.isEmpty()) { // read from settings file QString custom_gnupg_install_path = - GlobalSettingStation::GetInstance() - .GetSettings() - .value("gnupg/custom_gnupg_install_path") - .toString(); + GetSettings().value("gnupg/custom_gnupg_install_path").toString(); custom_gnupg_path_ = custom_gnupg_install_path; } @@ -231,7 +229,7 @@ void GnuPGControllerDialog::slot_update_custom_gnupg_install_path_label( } void GnuPGControllerDialog::set_settings() { - auto settings = GlobalSettingStation::GetInstance().GetSettings(); + auto settings = GetSettings(); auto non_ascii_at_file_operation = settings.value("gnupg/non_ascii_at_file_operation", true).toBool(); @@ -277,18 +275,14 @@ void GnuPGControllerDialog::set_settings() { this->slot_set_restart_needed(kNonRestartCode); - buffered_key_db_so_ = GetGpgKeyDatabaseInfos(); - editable_key_db_so_ = buffered_key_db_so_; - if (!editable_key_db_so_.isEmpty()) { - editable_key_db_so_.pop_front(); - } + key_db_infos_ = GetKeyDatabaseInfoBySettings(); + active_key_db_infos_ = GetGpgKeyDatabaseInfos(); this->slot_refresh_key_database_table(); } void GnuPGControllerDialog::apply_settings() { - auto settings = - GpgFrontend::GlobalSettingStation::GetInstance().GetSettings(); + auto settings = GpgFrontend::GetSettings(); settings.setValue("gnupg/non_ascii_at_file_operation", ui_->asciiModeCheckBox->isChecked()); @@ -308,7 +302,10 @@ void GnuPGControllerDialog::apply_settings() { auto so = SettingsObject("key_database_list"); auto key_database_list = KeyDatabaseListSO(so); key_database_list.key_databases.clear(); - for (const auto& key_db_info : editable_key_db_so_) { + + int index = 0; + for (auto& key_db_info : key_db_infos_) { + key_db_info.channel = index++; key_database_list.key_databases.append(KeyDatabaseItemSO(key_db_info)); } so.Store(key_database_list.ToJson()); @@ -356,9 +353,9 @@ auto GnuPGControllerDialog::check_custom_gnupg_path(QString path) -> bool { } void GnuPGControllerDialog::slot_add_new_key_database() { - auto* dialog = new KeyDatabaseEditDialog(editable_key_db_so_, this); + auto* dialog = new KeyDatabaseEditDialog(key_db_infos_, this); - if (editable_key_db_so_.size() >= 8) { + if (key_db_infos_.size() >= 8) { QMessageBox::critical( this, tr("Maximum Key Database Limit Reached"), tr("Currently, GpgFrontend supports a maximum of 8 key databases. " @@ -368,7 +365,7 @@ void GnuPGControllerDialog::slot_add_new_key_database() { connect(dialog, &KeyDatabaseEditDialog::SignalKeyDatabaseInfoAccepted, this, [this](const QString& name, const QString& path) { - auto& key_databases = buffered_key_db_so_; + auto& key_databases = key_db_infos_; for (const auto& key_database : key_databases) { if (QFileInfo(key_database.path) == QFileInfo(path)) { QMessageBox::warning( @@ -379,20 +376,25 @@ void GnuPGControllerDialog::slot_add_new_key_database() { } } + auto key_db_fs_path = + GpgFrontend::GetCanonicalKeyDatabasePath(app_path_, path); + if (key_db_fs_path.isEmpty()) { + QMessageBox::warning(this, tr("Invalid Key Database Paths"), + tr("The edited key database path is not a " + "valid path that GpgFrontend can use")); + return; + } + LOG_D() << "new key database path, name: " << name - << "path: " << path; + << "path: " << path << "canonical path: " << key_db_fs_path; KeyDatabaseInfo key_database; key_database.name = name; - key_database.path = path; - key_database.channel = buffered_key_db_so_.size(); + key_database.path = key_db_fs_path; + key_database.origin_path = path; + key_database.channel = static_cast<int>(key_databases.size()); key_databases.append(key_database); - editable_key_db_so_ = buffered_key_db_so_; - if (!editable_key_db_so_.isEmpty()) { - editable_key_db_so_.pop_front(); - } - // refresh ui slot_refresh_key_database_table(); @@ -403,23 +405,34 @@ void GnuPGControllerDialog::slot_add_new_key_database() { } void GnuPGControllerDialog::slot_refresh_key_database_table() { - auto& key_databases = editable_key_db_so_; + auto& key_databases = key_db_infos_; ui_->keyDatabaseTable->setRowCount(static_cast<int>(key_databases.size())); int index = 0; - for (const auto& key_database : key_databases) { + for (const auto& key_db : key_databases) { LOG_D() << "key database table item index: " << index - << "name: " << key_database.name << "path: " << key_database.path; + << "name: " << key_db.name << "path: " << key_db.path; - auto* i_name = new QTableWidgetItem(key_database.name); + auto* i_name = new QTableWidgetItem(key_db.name); i_name->setTextAlignment(Qt::AlignCenter); ui_->keyDatabaseTable->setVerticalHeaderItem( index, new QTableWidgetItem(QString::number(index + 1))); ui_->keyDatabaseTable->setItem(index, 0, i_name); - ui_->keyDatabaseTable->setItem(index, 1, - new QTableWidgetItem(key_database.path)); + auto is_active = + std::find_if(active_key_db_infos_.begin(), active_key_db_infos_.end(), + [key_db](const KeyDatabaseInfo& i) { + return i.name == key_db.name; + }) != active_key_db_infos_.end(); + ui_->keyDatabaseTable->setItem( + index, 1, + new QTableWidgetItem(is_active ? tr("Active") : tr("Inactive"))); + + ui_->keyDatabaseTable->setItem(index, 2, + new QTableWidgetItem(key_db.origin_path)); + + ui_->keyDatabaseTable->setItem(index, 3, new QTableWidgetItem(key_db.path)); index++; } @@ -436,7 +449,7 @@ void GnuPGControllerDialog::contextMenuEvent(QContextMenuEvent* event) { void GnuPGControllerDialog::slot_remove_existing_key_database() { const auto row_size = ui_->keyDatabaseTable->rowCount(); - auto& key_databases = editable_key_db_so_; + auto& key_databases = key_db_infos_; for (int i = 0; i < row_size; i++) { auto* const item = ui_->keyDatabaseTable->item(i, 1); if (!item->isSelected()) continue; @@ -463,7 +476,7 @@ void GnuPGControllerDialog::slot_remove_existing_key_database() { void GnuPGControllerDialog::slot_open_key_database() { const auto row_size = ui_->keyDatabaseTable->rowCount(); - auto& key_databases = editable_key_db_so_; + auto& key_databases = key_db_infos_; for (int i = 0; i < row_size; i++) { auto* const item = ui_->keyDatabaseTable->item(i, 1); if (!item->isSelected()) continue; @@ -478,7 +491,7 @@ void GnuPGControllerDialog::slot_move_up_key_database() { if (row_size <= 0) return; - auto& key_databases = editable_key_db_so_; + auto& key_databases = key_db_infos_; for (int i = 0; i < row_size; i++) { auto* const item = ui_->keyDatabaseTable->item(i, 1); @@ -508,7 +521,7 @@ void GnuPGControllerDialog::slot_move_to_top_key_database() { if (row_size <= 0) return; - auto& key_databases = editable_key_db_so_; + auto& key_databases = key_db_infos_; for (int i = 0; i < row_size; i++) { auto* const item = ui_->keyDatabaseTable->item(i, 1); @@ -541,7 +554,7 @@ void GnuPGControllerDialog::slot_move_down_key_database() { if (row_size <= 0) return; - auto& key_databases = editable_key_db_so_; + auto& key_databases = key_db_infos_; for (int i = row_size - 1; i >= 0; i--) { auto* const item = ui_->keyDatabaseTable->item(i, 1); @@ -586,16 +599,16 @@ void GnuPGControllerDialog::slot_edit_key_database() { return; } - auto& key_databases = editable_key_db_so_; + auto& key_databases = key_db_infos_; KeyDatabaseInfo& selected_key_database = key_databases[selected_row]; - auto* dialog = new KeyDatabaseEditDialog(editable_key_db_so_, this); + auto* dialog = new KeyDatabaseEditDialog(key_databases, this); dialog->SetDefaultName(selected_key_database.name); dialog->SetDefaultPath(selected_key_database.path); connect(dialog, &KeyDatabaseEditDialog::SignalKeyDatabaseInfoAccepted, this, [this, selected_row, selected_key_database](const QString& name, const QString& path) { - auto& all_key_databases = buffered_key_db_so_; + auto& all_key_databases = key_db_infos_; if (selected_key_database.path != path) { for (int i = 0; i < all_key_databases.size(); i++) { @@ -610,12 +623,22 @@ void GnuPGControllerDialog::slot_edit_key_database() { } } + auto key_db_fs_path = + GpgFrontend::GetCanonicalKeyDatabasePath(app_path_, path); + if (key_db_fs_path.isEmpty()) { + QMessageBox::warning(this, tr("Invalid Key Database Paths"), + tr("The edited key database path is not a " + "valid path that GpgFrontend can use")); + return; + } + LOG_D() << "edit key database path, name: " << name - << "path: " << path; + << "path: " << path << "canonical path: " << key_db_fs_path; - KeyDatabaseInfo& key_database = editable_key_db_so_[selected_row]; + KeyDatabaseInfo& key_database = key_db_infos_[selected_row]; key_database.name = name; - key_database.path = path; + key_database.path = key_db_fs_path; + key_database.origin_path = path; slot_refresh_key_database_table(); diff --git a/src/ui/dialog/controller/GnuPGControllerDialog.h b/src/ui/dialog/controller/GnuPGControllerDialog.h index 9c42180c..f0994c27 100644 --- a/src/ui/dialog/controller/GnuPGControllerDialog.h +++ b/src/ui/dialog/controller/GnuPGControllerDialog.h @@ -126,12 +126,13 @@ class GnuPGControllerDialog : public GeneralDialog { private: std::shared_ptr<Ui_GnuPGControllerDialog> ui_; ///< - int restart_mode_{0}; ///< + const QString app_path_; + int restart_mode_{0}; ///< QString custom_key_database_path_; QString custom_gnupg_path_; QMenu* popup_menu_{}; - QList<KeyDatabaseInfo> buffered_key_db_so_; - QList<KeyDatabaseInfo> editable_key_db_so_; + QList<KeyDatabaseInfo> active_key_db_infos_; + QList<KeyDatabaseInfo> key_db_infos_; /** * @brief Get the Restart Needed object diff --git a/src/ui/dialog/controller/ModuleControllerDialog.cpp b/src/ui/dialog/controller/ModuleControllerDialog.cpp index 77949a61..2b842c7f 100644 --- a/src/ui/dialog/controller/ModuleControllerDialog.cpp +++ b/src/ui/dialog/controller/ModuleControllerDialog.cpp @@ -108,10 +108,7 @@ ModuleControllerDialog::ModuleControllerDialog(QWidget* parent) // give user ability to give up all modules auto disable_loading_all_modules = - GlobalSettingStation::GetInstance() - .GetSettings() - .value("basic/disable_loading_all_modules", false) - .toBool(); + GetSettings().value("basic/disable_loading_all_modules", false).toBool(); if (disable_loading_all_modules) { ui_->tabWidget->setTabEnabled(0, false); } diff --git a/src/ui/dialog/import_export/ExportKeyPackageDialog.cpp b/src/ui/dialog/import_export/ExportKeyPackageDialog.cpp index 762c79b7..7aab31b5 100644 --- a/src/ui/dialog/import_export/ExportKeyPackageDialog.cpp +++ b/src/ui/dialog/import_export/ExportKeyPackageDialog.cpp @@ -31,11 +31,11 @@ #include "core/GpgModel.h" #include "core/function/KeyPackageOperator.h" #include "core/function/gpg/GpgKeyGetter.h" -#include "ui/UserInterfaceUtils.h" +#include "ui/function/GpgOperaHelper.h" #include "ui_ExportKeyPackageDialog.h" GpgFrontend::UI::ExportKeyPackageDialog::ExportKeyPackageDialog( - int channel, KeyIdArgsListPtr key_ids, QWidget* parent) + int channel, KeyIdArgsList key_ids, QWidget* parent) : GeneralDialog(typeid(ExportKeyPackageDialog).name(), parent), ui_(GpgFrontend::SecureCreateSharedObject<Ui_exportKeyPackageDialog>()), current_gpg_context_channel_(channel), @@ -98,26 +98,26 @@ GpgFrontend::UI::ExportKeyPackageDialog::ExportKeyPackageDialog( // get suitable key ids auto keys = GpgKeyGetter::GetInstance(current_gpg_context_channel_) .GetKeys(key_ids_); - assert(std::all_of(keys->begin(), keys->end(), + assert(std::all_of(keys.begin(), keys.end(), [](const auto& key) { return key.IsGood(); })); auto keys_new_end = - std::remove_if(keys->begin(), keys->end(), [this](const auto& key) { + std::remove_if(keys.begin(), keys.end(), [this](const auto& key) { return ui_->noPublicKeyCheckBox->isChecked() && !key.IsPrivateKey(); }); - keys->erase(keys_new_end, keys->end()); + keys.erase(keys_new_end, keys.end()); - if (keys->empty()) { + if (keys.empty()) { QMessageBox::critical(this, tr("Error"), tr("No key is suitable to export.")); return; } - CommonUtils::WaitForOpera( + GpgOperaHelper::WaitForOpera( this, tr("Generating"), [this, keys](const OperaWaitingHd& op_hd) { KeyPackageOperator::GenerateKeyPackage( ui_->outputPathLabel->text(), ui_->nameValueLabel->text(), - current_gpg_context_channel_, *keys, passphrase_, + current_gpg_context_channel_, keys, passphrase_, ui_->includeSecretKeyCheckBox->isChecked(), [=](GFError err, const DataObjectPtr&) { // stop waiting diff --git a/src/ui/dialog/import_export/ExportKeyPackageDialog.h b/src/ui/dialog/import_export/ExportKeyPackageDialog.h index bf8e92a6..07722a21 100644 --- a/src/ui/dialog/import_export/ExportKeyPackageDialog.h +++ b/src/ui/dialog/import_export/ExportKeyPackageDialog.h @@ -50,13 +50,13 @@ class ExportKeyPackageDialog : public GeneralDialog { * @param key_ids * @param parent */ - explicit ExportKeyPackageDialog(int channel, KeyIdArgsListPtr key_ids, + explicit ExportKeyPackageDialog(int channel, KeyIdArgsList key_ids, QWidget* parent); private: std::shared_ptr<Ui_exportKeyPackageDialog> ui_; ///< int current_gpg_context_channel_; - KeyIdArgsListPtr key_ids_; ///< - QString passphrase_; ///< + KeyIdArgsList key_ids_; ///< + QString passphrase_; ///< }; } // namespace GpgFrontend::UI diff --git a/src/ui/dialog/import_export/KeyServerImportDialog.cpp b/src/ui/dialog/import_export/KeyServerImportDialog.cpp index e81cc2e8..e3c66245 100644 --- a/src/ui/dialog/import_export/KeyServerImportDialog.cpp +++ b/src/ui/dialog/import_export/KeyServerImportDialog.cpp @@ -43,8 +43,7 @@ KeyServerImportDialog::KeyServerImportDialog(int channel, QWidget* parent) : GeneralDialog("key_server_import_dialog", parent), current_gpg_context_channel_(channel) { auto forbid_all_gnupg_connection = - GlobalSettingStation::GetInstance() - .GetSettings() + GetSettings() .value("network/forbid_all_gnupg_connection", false) .toBool(); if (forbid_all_gnupg_connection) { @@ -360,7 +359,7 @@ void KeyServerImportDialog::slot_search_finished( } void KeyServerImportDialog::slot_import() { - std::vector<QString> key_ids; + KeyIdArgsList key_ids; const int row_count = keys_table_->rowCount(); for (int i = 0; i < row_count; ++i) { if (keys_table_->item(i, 2)->isSelected()) { @@ -377,7 +376,7 @@ void KeyServerImportDialog::slot_import() { } } -void KeyServerImportDialog::SlotImport(const KeyIdArgsListPtr& keys) { +void KeyServerImportDialog::SlotImport(const KeyIdArgsList& keys) { // keyserver host url QString target_keyserver; @@ -388,18 +387,17 @@ void KeyServerImportDialog::SlotImport(const KeyIdArgsListPtr& keys) { KeyServerSO key_server(SettingsObject("key_server")); target_keyserver = key_server.GetTargetServer(); } - std::vector<QString> key_ids; - for (const auto& key_id : *keys) { + KeyIdArgsList key_ids; + for (const auto& key_id : keys) { key_ids.push_back(key_id); } SlotImport(key_ids, target_keyserver); } -void KeyServerImportDialog::SlotImport(std::vector<QString> key_ids, +void KeyServerImportDialog::SlotImport(QStringList key_ids, QString keyserver_url) { - auto* task = - new KeyServerImportTask(std::move(keyserver_url), - current_gpg_context_channel_, std::move(key_ids)); + auto* task = new KeyServerImportTask(keyserver_url, + current_gpg_context_channel_, key_ids); connect(task, &KeyServerImportTask::SignalKeyServerImportResult, this, &KeyServerImportDialog::slot_import_finished); diff --git a/src/ui/dialog/import_export/KeyServerImportDialog.h b/src/ui/dialog/import_export/KeyServerImportDialog.h index e4ee2367..25c55c3e 100644 --- a/src/ui/dialog/import_export/KeyServerImportDialog.h +++ b/src/ui/dialog/import_export/KeyServerImportDialog.h @@ -59,7 +59,7 @@ class KeyServerImportDialog : public GeneralDialog { * * @param keys */ - void SlotImport(const KeyIdArgsListPtr& keys); + void SlotImport(const KeyIdArgsList& keys); /** * @brief @@ -67,7 +67,7 @@ class KeyServerImportDialog : public GeneralDialog { * @param keyIds * @param keyserverUrl */ - void SlotImport(std::vector<QString> key_ids_list, QString keyserver_url); + void SlotImport(KeyIdArgsList key_ids_list, QString keyserver_url); signals: @@ -127,7 +127,7 @@ class KeyServerImportDialog : public GeneralDialog { * * @param in_data */ - void import_keys(ByteArrayPtr in_data); + void import_keys(ByteArray in_data); /** * @brief Set the loading object diff --git a/src/ui/dialog/import_export/KeyUploadDialog.cpp b/src/ui/dialog/import_export/KeyUploadDialog.cpp index 9a02ea0e..efa72802 100644 --- a/src/ui/dialog/import_export/KeyUploadDialog.cpp +++ b/src/ui/dialog/import_export/KeyUploadDialog.cpp @@ -41,13 +41,13 @@ namespace GpgFrontend::UI { -KeyUploadDialog::KeyUploadDialog(int channel, const KeyIdArgsListPtr& keys_ids, +KeyUploadDialog::KeyUploadDialog(int channel, const KeyIdArgsList& keys_ids, QWidget* parent) : GeneralDialog(typeid(KeyUploadDialog).name(), parent), current_gpg_context_channel_(channel), m_keys_(GpgKeyGetter::GetInstance(current_gpg_context_channel_) .GetKeys(keys_ids)) { - assert(std::all_of(m_keys_->begin(), m_keys_->end(), + assert(std::all_of(m_keys_.begin(), m_keys_.end(), [](const auto& key) { return key.IsGood(); })); auto* pb = new QProgressBar(); @@ -70,7 +70,7 @@ KeyUploadDialog::KeyUploadDialog(int channel, const KeyIdArgsListPtr& keys_ids, void KeyUploadDialog::SlotUpload() { GpgKeyImportExporter::GetInstance(current_gpg_context_channel_) - .ExportKeys(*m_keys_, false, true, false, false, + .ExportKeys(m_keys_, false, true, false, false, [=](GpgError err, const DataObjectPtr& data_obj) { if (CheckGpgError(err) != GPG_ERR_NO_ERROR) { CommonUtils::RaiseMessageBox(this, err); diff --git a/src/ui/dialog/import_export/KeyUploadDialog.h b/src/ui/dialog/import_export/KeyUploadDialog.h index 3085ba0a..36616037 100644 --- a/src/ui/dialog/import_export/KeyUploadDialog.h +++ b/src/ui/dialog/import_export/KeyUploadDialog.h @@ -48,7 +48,7 @@ class KeyUploadDialog : public GeneralDialog { * @param keys_ids * @param parent */ - explicit KeyUploadDialog(int channel, const KeyIdArgsListPtr& keys_ids, + explicit KeyUploadDialog(int channel, const KeyIdArgsList& keys_ids, QWidget* parent); public slots: @@ -76,7 +76,7 @@ class KeyUploadDialog : public GeneralDialog { private: int current_gpg_context_channel_; - KeyListPtr m_keys_; ///< + GpgKeyList m_keys_; ///< QByteArray m_key_data_; ///< }; diff --git a/src/ui/dialog/key_generate/KeyGenerateDialog.cpp b/src/ui/dialog/key_generate/KeyGenerateDialog.cpp new file mode 100644 index 00000000..ab3a5ac8 --- /dev/null +++ b/src/ui/dialog/key_generate/KeyGenerateDialog.cpp @@ -0,0 +1,641 @@ +/** + * Copyright (C) 2021-2024 Saturneric <[email protected]> + * + * This file is part of GpgFrontend. + * + * GpgFrontend is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GpgFrontend is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GpgFrontend. If not, see <https://www.gnu.org/licenses/>. + * + * The initial version of the source code is inherited from + * the gpg4usb project, which is under GPL-3.0-or-later. + * + * All the source code of GpgFrontend was modified and released by + * Saturneric <[email protected]> starting on May 12, 2021. + * + * SPDX-License-Identifier: GPL-3.0-or-later + * + */ + +#include "KeyGenerateDialog.h" + +#include "core/GpgModel.h" +#include "core/function/GlobalSettingStation.h" +#include "core/function/gpg/GpgKeyOpera.h" +#include "core/typedef/GpgTypedef.h" +#include "core/utils/CacheUtils.h" +#include "core/utils/GpgUtils.h" +#include "ui/UISignalStation.h" +#include "ui/UserInterfaceUtils.h" +#include "ui/function/GpgOperaHelper.h" +#include "ui/function/KeyGenerateHelper.h" + +// +#include "ui_KeyGenDialog.h" + +namespace GpgFrontend::UI { + +KeyGenerateDialog::KeyGenerateDialog(int channel, QWidget* parent) + : GeneralDialog(typeid(KeyGenerateDialog).name(), parent), + ui_(QSharedPointer<Ui_KeyGenDialog>::create()), + gen_key_info_(QSharedPointer<KeyGenerateInfo>::create()), + gen_subkey_info_(nullptr), + supported_primary_key_algos_(KeyGenerateInfo::GetSupportedKeyAlgo()), + supported_subkey_algos_(KeyGenerateInfo::GetSupportedSubkeyAlgo()), + channel_(channel) { + ui_->setupUi(this); + + for (const auto& key_db : GetGpgKeyDatabaseInfos()) { + ui_->keyDBIndexComboBox->insertItem( + key_db.channel, QString("%1: %2").arg(key_db.channel).arg(key_db.name)); + } + + ui_->easyAlgoComboBox->addItems({ + tr("Custom"), + "RSA", + "DSA", + "ECC (25519)", + }); + + ui_->easyValidityPeriodComboBox->addItems({ + tr("Custom"), + tr("3 Months"), + tr("6 Months"), + tr("1 Year"), + tr("2 Years"), + tr("5 Years"), + tr("10 Years"), + tr("Non Expired"), + }); + + ui_->easyCombinationComboBox->addItems({ + tr("Primary Key Only"), + tr("Primary Key With Subkey"), + }); + + ui_->nameLabel->setText(tr("Name")); + ui_->emailLabel->setText(tr("Email")); + ui_->commentLabel->setText(tr("Comment")); + ui_->keyDBLabel->setText(tr("Key Database")); + ui_->easyAlgoLabel->setText(tr("Algorithm")); + ui_->easyValidPeriodLabel->setText(tr("Validity Period")); + + ui_->pAlgoLabel->setText(tr("Algorithm")); + ui_->pExpireDateLabel->setText(tr("Validity Period")); + ui_->pKeyLengthLabel->setText(tr("Key Length")); + ui_->pUsageLabel->setText(tr("Usage")); + ui_->pEncrCheckBox->setText(tr("Encrypt")); + ui_->pSignCheckBox->setText(tr("Sign")); + ui_->pAuthCheckBox->setText(tr("Authentication")); + ui_->noPassphraseCheckBox->setText(tr("No Passphrase")); + ui_->pExpireCheckBox->setText(tr("Non Expired")); + + ui_->sAlgoLabel->setText(tr("Algorithm")); + ui_->sExpireDateLabel->setText(tr("Expire Date")); + ui_->sKeyLengthLabel->setText(tr("Key Length")); + ui_->sUsageLabel->setText(tr("Usage")); + ui_->sEncrCheckBox->setText(tr("Encrypt")); + ui_->sSignCheckBox->setText(tr("Sign")); + ui_->sAuthCheckBox->setText(tr("Authentication")); + ui_->sExpireCheckBox->setText(tr("Non Expired")); + + assert(ui_->tabWidget->count() == 3); + ui_->tabWidget->setTabText(0, tr("Easy Mode")); + ui_->tabWidget->setTabText(1, tr("Primary Key")); + ui_->tabWidget->setTabText(2, tr("Subkey")); + ui_->tabWidget->setCurrentIndex(0); + + ui_->generateButton->setText(tr("Generate")); + + const auto min_date_time = QDateTime::currentDateTime().addDays(3); + ui_->pExpireDateTimeEdit->setMinimumDateTime(min_date_time); + ui_->sExpireDateTimeEdit->setMinimumDateTime(min_date_time); + + QSet<QString> p_algo_set; + for (const auto& algo : supported_primary_key_algos_) { + p_algo_set.insert(algo.Name()); + } + ui_->pAlgoComboBox->addItems( + QStringList(p_algo_set.cbegin(), p_algo_set.cend())); + + QSet<QString> s_algo_set; + for (const auto& algo : supported_subkey_algos_) { + s_algo_set.insert(algo.Name()); + } + ui_->sAlgoComboBox->addItem(tr("None")); + ui_->sAlgoComboBox->addItems( + QStringList(s_algo_set.cbegin(), s_algo_set.cend())); + + ui_->easyAlgoComboBox->setCurrentText("RSA"); + ui_->easyValidityPeriodComboBox->setCurrentText(tr("2 Years")); + + set_signal_slot_config(); + + slot_easy_mode_changed("RSA"); + slot_easy_valid_date_changed(tr("2 Years")); + + this->setWindowTitle(tr("Generate Key")); + this->setAttribute(Qt::WA_DeleteOnClose); + this->setModal(true); +} + +void KeyGenerateDialog::slot_key_gen_accept() { + QString buffer; + QTextStream err_stream(&buffer); + + if (ui_->nameEdit->text().size() < 5) { + err_stream << " -> " << tr("Name must contain at least five characters.") + << Qt::endl; + } + if (ui_->emailEdit->text().isEmpty() || + !check_email_address(ui_->emailEdit->text())) { + err_stream << " -> " << tr("Please give a valid email address.") + << Qt::endl; + } + + if (gen_key_info_->GetAlgo() == KeyGenerateInfo::kNoneAlgo) { + err_stream << " -> " << tr("Please give a valid primary key algorithm.") + << Qt::endl; + } + + const auto min_expire_date = QDateTime::currentDateTime().addSecs(120); + + if (!gen_key_info_->IsNonExpired() && + gen_key_info_->GetExpireTime() < min_expire_date) { + err_stream << " -> " + << tr("Time to primary key expiration must not be less than 120 " + "seconds.") + << Qt::endl; + } + + if (gen_subkey_info_ != nullptr) { + if (gen_subkey_info_->GetAlgo() == KeyGenerateInfo::kNoneAlgo) { + err_stream << " -> " << tr("Please give a valid subkey algorithm.") + << Qt::endl; + } + + if (!gen_subkey_info_->IsNonExpired() && + gen_subkey_info_->GetExpireTime() < min_expire_date) { + err_stream + << " -> " + << tr("Time to subkey expiration must not be less than 120 seconds.") + << Qt::endl; + } + } + + const auto err_string = err_stream.readAll(); + if (!err_string.isEmpty()) { + ui_->statusPlainTextEdit->clear(); + ui_->statusPlainTextEdit->appendPlainText(err_string); + return; + } + + gen_key_info_->SetName(ui_->nameEdit->text()); + gen_key_info_->SetEmail(ui_->emailEdit->text()); + gen_key_info_->SetComment(ui_->commentEdit->text()); + + LOG_D() << "try to generate key at gpg context channel: " << channel_; + + do_generate(); + this->done(0); +} + +void KeyGenerateDialog::refresh_widgets_state() { + ui_->pAlgoComboBox->blockSignals(true); + ui_->pAlgoComboBox->setCurrentText(gen_key_info_->GetAlgo().Name()); + ui_->pAlgoComboBox->blockSignals(false); + + ui_->pKeyLengthComboBox->blockSignals(true); + SetKeyLengthComboxBoxByAlgo( + ui_->pKeyLengthComboBox, + SearchAlgoByName(ui_->pAlgoComboBox->currentText(), + supported_primary_key_algos_)); + ui_->pKeyLengthComboBox->setCurrentText( + QString::number(gen_key_info_->GetKeyLength())); + ui_->pKeyLengthComboBox->blockSignals(false); + + ui_->pEncrCheckBox->blockSignals(true); + ui_->pEncrCheckBox->setCheckState( + gen_key_info_->IsAllowEncr() ? Qt::Checked : Qt::Unchecked); + ui_->pEncrCheckBox->setEnabled(gen_key_info_->IsAllowModifyEncr()); + ui_->pEncrCheckBox->blockSignals(false); + + ui_->pSignCheckBox->blockSignals(true); + ui_->pSignCheckBox->setCheckState( + gen_key_info_->IsAllowSign() ? Qt::Checked : Qt::Unchecked); + ui_->pSignCheckBox->setEnabled(gen_key_info_->IsAllowModifySign()); + ui_->pSignCheckBox->blockSignals(false); + + ui_->pAuthCheckBox->blockSignals(true); + ui_->pAuthCheckBox->setCheckState( + gen_key_info_->IsAllowAuth() ? Qt::Checked : Qt::Unchecked); + ui_->pAuthCheckBox->setEnabled(gen_key_info_->IsAllowModifyAuth()); + ui_->pAuthCheckBox->blockSignals(false); + + ui_->noPassphraseCheckBox->setEnabled(gen_key_info_->IsAllowNoPassPhrase()); + + ui_->pExpireDateTimeEdit->blockSignals(true); + ui_->pExpireDateTimeEdit->setDateTime(gen_key_info_->GetExpireTime()); + ui_->pExpireDateTimeEdit->setDisabled(gen_key_info_->IsNonExpired()); + ui_->pExpireDateTimeEdit->blockSignals(false); + + ui_->pExpireCheckBox->blockSignals(true); + ui_->pExpireCheckBox->setChecked(gen_key_info_->IsNonExpired()); + ui_->pExpireCheckBox->blockSignals(false); + + ui_->generateButton->setDisabled(false); + + if (gen_subkey_info_ == nullptr) { + ui_->sTab->setDisabled(true); + + ui_->sAlgoComboBox->blockSignals(true); + ui_->sAlgoComboBox->setCurrentText(tr("None")); + ui_->sAlgoComboBox->blockSignals(false); + + ui_->sKeyLengthComboBox->blockSignals(true); + ui_->sKeyLengthComboBox->clear(); + ui_->sKeyLengthComboBox->blockSignals(false); + + ui_->sEncrCheckBox->blockSignals(true); + ui_->sEncrCheckBox->setCheckState(Qt::Unchecked); + ui_->sEncrCheckBox->blockSignals(false); + + ui_->sSignCheckBox->blockSignals(true); + ui_->sSignCheckBox->setCheckState(Qt::Unchecked); + ui_->sSignCheckBox->blockSignals(false); + + ui_->sAuthCheckBox->blockSignals(true); + ui_->sAuthCheckBox->setCheckState(Qt::Unchecked); + ui_->sAuthCheckBox->blockSignals(false); + + ui_->sExpireDateTimeEdit->blockSignals(true); + ui_->sExpireDateTimeEdit->setDateTime(QDateTime::currentDateTime()); + ui_->sExpireDateTimeEdit->setDisabled(true); + ui_->sExpireDateTimeEdit->blockSignals(false); + + ui_->sExpireCheckBox->blockSignals(true); + ui_->sExpireCheckBox->setCheckState(Qt::Unchecked); + ui_->sExpireCheckBox->blockSignals(false); + + ui_->easyCombinationComboBox->blockSignals(true); + ui_->easyCombinationComboBox->setCurrentText(tr("Primary Key Only")); + ui_->easyCombinationComboBox->blockSignals(false); + return; + } + + ui_->sTab->setDisabled(false); + + ui_->sAlgoComboBox->blockSignals(true); + ui_->sAlgoComboBox->setCurrentText(gen_subkey_info_->GetAlgo().Name()); + ui_->sAlgoComboBox->blockSignals(false); + + ui_->sKeyLengthComboBox->blockSignals(true); + SetKeyLengthComboxBoxByAlgo( + ui_->sKeyLengthComboBox, + SearchAlgoByName(ui_->sAlgoComboBox->currentText(), + supported_subkey_algos_)); + ui_->sKeyLengthComboBox->setCurrentText( + QString::number(gen_subkey_info_->GetKeyLength())); + ui_->sKeyLengthComboBox->blockSignals(false); + + ui_->sEncrCheckBox->blockSignals(true); + ui_->sEncrCheckBox->setCheckState( + gen_subkey_info_->IsAllowEncr() ? Qt::Checked : Qt::Unchecked); + ui_->sEncrCheckBox->setEnabled(gen_subkey_info_->IsAllowModifyEncr()); + ui_->sEncrCheckBox->blockSignals(false); + + ui_->sSignCheckBox->blockSignals(true); + ui_->sSignCheckBox->setCheckState( + gen_subkey_info_->IsAllowSign() ? Qt::Checked : Qt::Unchecked); + ui_->sSignCheckBox->setEnabled(gen_subkey_info_->IsAllowModifySign()); + ui_->sSignCheckBox->blockSignals(false); + + ui_->sAuthCheckBox->blockSignals(true); + ui_->sAuthCheckBox->setCheckState( + gen_subkey_info_->IsAllowAuth() ? Qt::Checked : Qt::Unchecked); + ui_->sAuthCheckBox->setEnabled(gen_subkey_info_->IsAllowModifyAuth()); + ui_->sAuthCheckBox->blockSignals(false); + + ui_->sExpireDateTimeEdit->blockSignals(true); + ui_->sExpireDateTimeEdit->setDateTime(gen_subkey_info_->GetExpireTime()); + ui_->sExpireDateTimeEdit->setDisabled(gen_subkey_info_->IsNonExpired()); + ui_->sExpireDateTimeEdit->blockSignals(false); + + ui_->sExpireCheckBox->blockSignals(true); + ui_->sExpireCheckBox->setChecked(gen_subkey_info_->IsNonExpired()); + ui_->sExpireCheckBox->blockSignals(false); + + ui_->easyCombinationComboBox->blockSignals(true); + ui_->easyCombinationComboBox->setCurrentText(tr("Primary Key With Subkey")); + ui_->easyCombinationComboBox->blockSignals(false); +} + +void KeyGenerateDialog::set_signal_slot_config() { + connect(ui_->generateButton, &QPushButton::clicked, this, + &KeyGenerateDialog::slot_key_gen_accept); + + connect( + ui_->pExpireCheckBox, &QCheckBox::stateChanged, this, [this](int state) { + gen_key_info_->SetNonExpired(state == Qt::Checked); + gen_key_info_->SetExpireTime(QDateTime::currentDateTime().addYears(2)); + slot_set_easy_valid_date_2_custom(); + refresh_widgets_state(); + }); + connect(ui_->sExpireCheckBox, &QCheckBox::stateChanged, this, + [this](int state) { + gen_subkey_info_->SetNonExpired(state == Qt::Checked); + gen_subkey_info_->SetExpireTime( + QDateTime::currentDateTime().addYears(2)); + slot_set_easy_valid_date_2_custom(); + refresh_widgets_state(); + }); + + connect( + ui_->pEncrCheckBox, &QCheckBox::stateChanged, this, + [this](int state) { gen_key_info_->SetAllowEncr(state == Qt::Checked); }); + connect( + ui_->pSignCheckBox, &QCheckBox::stateChanged, this, + [this](int state) { gen_key_info_->SetAllowSign(state == Qt::Checked); }); + connect( + ui_->pAuthCheckBox, &QCheckBox::stateChanged, this, + [this](int state) { gen_key_info_->SetAllowAuth(state == Qt::Checked); }); + + connect(ui_->sEncrCheckBox, &QCheckBox::stateChanged, this, + [this](int state) { + gen_subkey_info_->SetAllowEncr(state == Qt::Checked); + }); + connect(ui_->sSignCheckBox, &QCheckBox::stateChanged, this, + [this](int state) { + gen_subkey_info_->SetAllowSign(state == Qt::Checked); + }); + connect(ui_->sAuthCheckBox, &QCheckBox::stateChanged, this, + [this](int state) { + gen_subkey_info_->SetAllowAuth(state == Qt::Checked); + }); + + connect(ui_->noPassphraseCheckBox, &QCheckBox::stateChanged, this, + [this](int state) -> void { + gen_key_info_->SetNonPassPhrase(state != 0); + if (gen_subkey_info_ != nullptr) { + gen_subkey_info_->SetNonPassPhrase(state != 0); + } + }); + + connect(ui_->pAlgoComboBox, &QComboBox::currentTextChanged, this, + [=](const QString&) { + sync_gen_key_algo_info(); + slot_set_easy_key_algo_2_custom(); + refresh_widgets_state(); + }); + + connect(ui_->sAlgoComboBox, &QComboBox::currentTextChanged, this, + [=](const QString&) { + sync_gen_subkey_algo_info(); + slot_set_easy_key_algo_2_custom(); + refresh_widgets_state(); + }); + + connect(ui_->easyAlgoComboBox, &QComboBox::currentTextChanged, this, + &KeyGenerateDialog::slot_easy_mode_changed); + + connect(ui_->easyValidityPeriodComboBox, &QComboBox::currentTextChanged, this, + &KeyGenerateDialog::slot_easy_valid_date_changed); + + connect(ui_->pExpireDateTimeEdit, &QDateTimeEdit::dateTimeChanged, this, + [=](const QDateTime& dt) { + gen_key_info_->SetExpireTime(dt); + + slot_set_easy_valid_date_2_custom(); + }); + + connect(ui_->sExpireDateTimeEdit, &QDateTimeEdit::dateTimeChanged, this, + [=](const QDateTime& dt) { + gen_subkey_info_->SetExpireTime(dt); + + slot_set_easy_valid_date_2_custom(); + }); + + connect(ui_->keyDBIndexComboBox, &QComboBox::currentIndexChanged, this, + [=](int index) { channel_ = index; }); + + connect(ui_->easyCombinationComboBox, &QComboBox::currentTextChanged, this, + &KeyGenerateDialog::slot_easy_combination_changed); + + connect(ui_->pKeyLengthComboBox, &QComboBox::currentTextChanged, this, + [this](const QString& text) -> void { + auto [found, algo] = GetAlgoByNameAndKeyLength( + ui_->pAlgoComboBox->currentText(), text.toInt(), + supported_primary_key_algos_); + + if (found) gen_key_info_->SetAlgo(algo); + }); + + connect(ui_->sKeyLengthComboBox, &QComboBox::currentTextChanged, this, + [this](const QString& text) -> void { + auto [found, algo] = GetAlgoByNameAndKeyLength( + ui_->sAlgoComboBox->currentText(), text.toInt(), + supported_subkey_algos_); + + if (found) gen_subkey_info_->SetAlgo(algo); + }); + + connect(this, &KeyGenerateDialog::SignalKeyGenerated, + UISignalStation::GetInstance(), + &UISignalStation::SignalKeyDatabaseRefresh); +} + +auto KeyGenerateDialog::check_email_address(const QString& str) -> bool { + return re_email_.match(str).hasMatch(); +} + +void KeyGenerateDialog::sync_gen_key_algo_info() { + auto [found, algo] = GetAlgoByName(ui_->pAlgoComboBox->currentText(), + + supported_primary_key_algos_); + + if (found) gen_key_info_->SetAlgo(found ? algo : KeyGenerateInfo::kNoneAlgo); +} + +void KeyGenerateDialog::sync_gen_subkey_algo_info() { + if (gen_subkey_info_ != nullptr) { + auto [s_found, algo] = GetAlgoByName(ui_->sAlgoComboBox->currentText(), + supported_subkey_algos_); + + if (s_found) { + gen_subkey_info_->SetAlgo(s_found ? algo : KeyGenerateInfo::kNoneAlgo); + } + } +} + +void KeyGenerateDialog::slot_easy_mode_changed(const QString& mode) { + if (mode == "RSA") { + auto [found, algo] = KeyGenerateInfo::SearchPrimaryKeyAlgo("rsa2048"); + if (found) gen_key_info_->SetAlgo(algo); + + gen_subkey_info_ = nullptr; + } + + else if (mode == "DSA") { + auto [found, algo] = KeyGenerateInfo::SearchPrimaryKeyAlgo("dsa2048"); + if (found) gen_key_info_->SetAlgo(algo); + + if (gen_subkey_info_ == nullptr) { + create_sync_gen_subkey_info(); + } + + auto [s_found, s_algo] = KeyGenerateInfo::SearchSubKeyAlgo("elg2048"); + if (s_found) gen_subkey_info_->SetAlgo(s_algo); + } + + else if (mode == "ECC (25519)") { + auto [found, algo] = KeyGenerateInfo::SearchPrimaryKeyAlgo("ed25519"); + if (found) gen_key_info_->SetAlgo(algo); + + if (gen_subkey_info_ == nullptr) { + create_sync_gen_subkey_info(); + } + + auto [s_found, s_algo] = KeyGenerateInfo::SearchSubKeyAlgo("cv25519"); + if (s_found) gen_subkey_info_->SetAlgo(s_algo); + } + + else { + auto [found, algo] = KeyGenerateInfo::SearchPrimaryKeyAlgo("rsa2048"); + if (found) gen_key_info_->SetAlgo(algo); + + if (gen_subkey_info_ == nullptr) { + create_sync_gen_subkey_info(); + } + + auto [s_found, s_algo] = KeyGenerateInfo::SearchSubKeyAlgo("rsa2048"); + if (s_found) gen_subkey_info_->SetAlgo(s_algo); + } + + refresh_widgets_state(); +} + +void KeyGenerateDialog::slot_easy_valid_date_changed(const QString& mode) { + if (mode == tr("3 Months")) { + gen_key_info_->SetNonExpired(false); + gen_key_info_->SetExpireTime(QDateTime::currentDateTime().addMonths(3)); + } + + else if (mode == tr("6 Months")) { + gen_key_info_->SetNonExpired(false); + gen_key_info_->SetExpireTime(QDateTime::currentDateTime().addMonths(6)); + } + + else if (mode == tr("1 Year")) { + gen_key_info_->SetNonExpired(false); + gen_key_info_->SetExpireTime(QDateTime::currentDateTime().addYears(1)); + } + + else if (mode == tr("2 Years")) { + gen_key_info_->SetNonExpired(false); + gen_key_info_->SetExpireTime(QDateTime::currentDateTime().addYears(2)); + } + + else if (mode == tr("5 Years")) { + gen_key_info_->SetNonExpired(false); + gen_key_info_->SetExpireTime(QDateTime::currentDateTime().addYears(5)); + } + + else if (mode == tr("10 Years")) { + gen_key_info_->SetNonExpired(false); + gen_key_info_->SetExpireTime(QDateTime::currentDateTime().addYears(10)); + + } + + else if (mode == tr("Non Expired")) { + gen_key_info_->SetNonExpired(true); + gen_key_info_->SetExpireTime(QDateTime::currentDateTime()); + } + + else { + gen_key_info_->SetNonExpired(false); + gen_key_info_->SetExpireTime(QDateTime::currentDateTime().addYears(2)); + } + + if (gen_subkey_info_ != nullptr) { + gen_subkey_info_->SetNonExpired(gen_key_info_->IsNonExpired()); + gen_subkey_info_->SetExpireTime(gen_key_info_->GetExpireTime()); + } + + refresh_widgets_state(); +} + +void KeyGenerateDialog::slot_set_easy_valid_date_2_custom() { + ui_->easyValidityPeriodComboBox->blockSignals(true); + ui_->easyValidityPeriodComboBox->setCurrentText(tr("Custom")); + ui_->easyValidityPeriodComboBox->blockSignals(false); +} + +void KeyGenerateDialog::slot_set_easy_key_algo_2_custom() { + ui_->easyAlgoComboBox->blockSignals(true); + ui_->easyAlgoComboBox->setCurrentText(tr("Custom")); + ui_->easyAlgoComboBox->blockSignals(false); +} + +void KeyGenerateDialog::slot_easy_combination_changed(const QString& mode) { + if (mode == tr("Primary Key Only")) { + gen_subkey_info_ = nullptr; + } else { + create_sync_gen_subkey_info(); + } + + slot_set_easy_key_algo_2_custom(); + refresh_widgets_state(); +} + +void KeyGenerateDialog::do_generate() { + if (!GetSettings() + .value("gnupg/use_pinentry_as_password_input_dialog", + QString::fromLocal8Bit(qgetenv("container")) != "flatpak") + .toBool() && + !ui_->noPassphraseCheckBox->isChecked()) { + SetCacheValue("PinentryContext", "NEW_PASSPHRASE"); + } + + auto f = [this, + gen_key_info = this->gen_key_info_](const OperaWaitingHd& hd) { + GpgKeyOpera::GetInstance(channel_).GenerateKeyWithSubkey( + gen_key_info, gen_subkey_info_, + [this, hd](GpgError err, const DataObjectPtr&) { + // stop showing waiting dialog + hd(); + + if (CheckGpgError(err) == GPG_ERR_USER_1) { + QMessageBox::critical(this, tr("Error"), + tr("Unknown error occurred")); + return; + } + + CommonUtils::RaiseMessageBox( + this->parentWidget() != nullptr ? this->parentWidget() : this, + err); + if (CheckGpgError(err) == GPG_ERR_NO_ERROR) { + emit SignalKeyGenerated(); + } + }); + }; + GpgOperaHelper::WaitForOpera(this, tr("Generating"), f); +} + +void KeyGenerateDialog::create_sync_gen_subkey_info() { + if (gen_subkey_info_ == nullptr) { + gen_subkey_info_ = QSharedPointer<KeyGenerateInfo>::create(true); + } + + sync_gen_subkey_algo_info(); + slot_easy_valid_date_changed(ui_->easyValidityPeriodComboBox->currentText()); +} +} // namespace GpgFrontend::UI diff --git a/src/ui/dialog/key_generate/KeygenDialog.h b/src/ui/dialog/key_generate/KeyGenerateDialog.h index 8b9757d5..ad927446 100644 --- a/src/ui/dialog/key_generate/KeygenDialog.h +++ b/src/ui/dialog/key_generate/KeyGenerateDialog.h @@ -28,20 +28,18 @@ #pragma once -#include <memory> - -#include "core/model/GpgGenKeyInfo.h" -#include "core/utils/MemoryUtils.h" -#include "ui/GpgFrontendUI.h" +#include "core/model/GpgKeyGenerateInfo.h" #include "ui/dialog/GeneralDialog.h" +class Ui_KeyGenDialog; + namespace GpgFrontend::UI { /** * @brief * */ -class KeyGenDialog : public GeneralDialog { +class KeyGenerateDialog : public GeneralDialog { Q_OBJECT public: @@ -52,7 +50,7 @@ class KeyGenDialog : public GeneralDialog { * @param key The key to show details of * @param parent The parent of this widget */ - explicit KeyGenDialog(int channel, QWidget* parent = nullptr); + explicit KeyGenerateDialog(int channel, QWidget* parent = nullptr); signals: /** @@ -61,131 +59,114 @@ class KeyGenDialog : public GeneralDialog { */ void SignalKeyGenerated(); - private: + private slots: + /** - * @brief Create a key usage group box object - * - * @return QGroupBox* + * @details check all lineedits for false entries. Show error, when there + * is one, otherwise generate the key */ - QGroupBox* create_key_usage_group_box(); + void slot_key_gen_accept(); /** - * @brief Create a basic info group box object + * @brief * - * @return QGroupBox* + * @param mode */ - QGroupBox* create_basic_info_group_box(); + void slot_easy_mode_changed(const QString& mode); /** * @brief * + * @param mode */ - QRegularExpression re_email_{ - R"((?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9]))\.){3}(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9])|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\]))"}; + void slot_easy_valid_date_changed(const QString& mode); /** * @brief * */ - QStringList error_messages_; ///< List of errors occurring when checking - ///< entries of line edits - - std::shared_ptr<GenKeyInfo> gen_key_info_ = - SecureCreateSharedObject<GenKeyInfo>(); ///< - std::shared_ptr<GenKeyInfo> gen_subkey_info_ = nullptr; ///< - - QDialogButtonBox* button_box_; ///< Box for standard buttons - QLabel* error_label_{}; ///< Label containing error message - QLineEdit* name_edit_{}; ///< Line edit for the keys name - QLineEdit* email_edit_{}; ///< Line edit for the keys email - QLineEdit* comment_edit_{}; ///< Line edit for the keys comment - QSpinBox* key_size_spin_box_{}; ///< Spinbox for the keys size (in bit) - QComboBox* key_type_combo_box_{}; ///< Combobox for Key type - QDateTimeEdit* date_edit_{}; ///< Date edit for expiration date - QCheckBox* expire_check_box_{}; ///< Checkbox, if key should expire - QCheckBox* no_pass_phrase_check_box_{}; - QGroupBox* key_usage_group_box_{}; ///< Group of Widgets detecting the usage - ///< of the Key - QDateTime max_date_time_; ///< - std::vector<QCheckBox*> key_usage_check_boxes_; ///< ENCR, SIGN, CERT, AUTH - QComboBox* gpg_contexts_combo_box_{}; - - int default_gpg_context_channel_; + void slot_set_easy_valid_date_2_custom(); /** * @brief * */ - void generate_key_dialog(); + void slot_set_easy_key_algo_2_custom(); /** - * @details Refresh widgets state by GenKeyInfo + * @brief + * + * @param mode */ - void refresh_widgets_state(); + void slot_easy_combination_changed(const QString& mode); + private: /** - * @brief Set the signal slot object + * @brief * */ - void set_signal_slot(); + QRegularExpression re_email_{ + R"((?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9]))\.){3}(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9])|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\]))"}; /** * @brief * - * @param str - * @return true - * @return false */ - bool check_email_address(const QString& str); + QStringList error_messages_; ///< List of errors occurring when checking + ///< entries of line edits - private slots: + QSharedPointer<Ui_KeyGenDialog> ui_; + QSharedPointer<KeyGenerateInfo> gen_key_info_; ///< + QSharedPointer<KeyGenerateInfo> gen_subkey_info_; ///< + + QContainer<KeyAlgo> supported_primary_key_algos_; + QContainer<KeyAlgo> supported_subkey_algos_; + + int channel_; /** - * @details when expirebox was checked/unchecked, enable/disable the - * expiration date box + * @details Refresh widgets state by GenKeyInfo */ - void slot_expire_box_changed(); + void refresh_widgets_state(); /** - * @details check all lineedits for false entries. Show error, when there is - * one, otherwise generate the key + * @brief Set the signal slot object + * */ - void slot_key_gen_accept(); + void set_signal_slot_config(); /** * @brief * - * @param state + * @param str + * @return true + * @return false */ - void slot_encryption_box_changed(int state); + auto check_email_address(const QString& str) -> bool; /** * @brief * - * @param state */ - void slot_signing_box_changed(int state); + void sync_gen_key_algo_info(); /** * @brief * - * @param state */ - void slot_certification_box_changed(int state); + void sync_gen_subkey_algo_info(); /** * @brief * - * @param state */ - void slot_authentication_box_changed(int state); + void create_sync_gen_subkey_info(); /** * @brief * - * @param index */ - void slot_activated_key_type(int index); + void do_generate(); }; } // namespace GpgFrontend::UI diff --git a/src/ui/dialog/key_generate/KeygenDialog.cpp b/src/ui/dialog/key_generate/KeygenDialog.cpp deleted file mode 100644 index e29f6b64..00000000 --- a/src/ui/dialog/key_generate/KeygenDialog.cpp +++ /dev/null @@ -1,482 +0,0 @@ -/** - * Copyright (C) 2021-2024 Saturneric <[email protected]> - * - * This file is part of GpgFrontend. - * - * GpgFrontend is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * GpgFrontend is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GpgFrontend. If not, see <https://www.gnu.org/licenses/>. - * - * The initial version of the source code is inherited from - * the gpg4usb project, which is under GPL-3.0-or-later. - * - * All the source code of GpgFrontend was modified and released by - * Saturneric <[email protected]> starting on May 12, 2021. - * - * SPDX-License-Identifier: GPL-3.0-or-later - * - */ - -#include "KeygenDialog.h" - -#include "core/GpgModel.h" -#include "core/function/GlobalSettingStation.h" -#include "core/function/gpg/GpgKeyOpera.h" -#include "core/model/DataObject.h" -#include "core/module/ModuleManager.h" -#include "core/typedef/GpgTypedef.h" -#include "core/utils/CacheUtils.h" -#include "core/utils/GpgUtils.h" -#include "ui/UISignalStation.h" -#include "ui/UserInterfaceUtils.h" - -namespace GpgFrontend::UI { - -KeyGenDialog::KeyGenDialog(int channel, QWidget* parent) - : GeneralDialog(typeid(KeyGenDialog).name(), parent), - default_gpg_context_channel_(channel) { - button_box_ = - new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel); - - bool const longer_expiration_date = - GlobalSettingStation::GetInstance() - .GetSettings() - .value("basic/longer_expiration_date", false) - .toBool(); - - max_date_time_ = longer_expiration_date - ? QDateTime::currentDateTime().toLocalTime().addYears(30) - : QDateTime::currentDateTime().toLocalTime().addYears(2); - - connect(this, &KeyGenDialog::SignalKeyGenerated, - UISignalStation::GetInstance(), - &UISignalStation::SignalKeyDatabaseRefresh); - - generate_key_dialog(); - - this->setWindowTitle(tr("Generate Key")); - this->setAttribute(Qt::WA_DeleteOnClose); - this->setModal(true); -} - -void KeyGenDialog::generate_key_dialog() { - key_usage_group_box_ = create_key_usage_group_box(); - - auto* group_grid = new QGridLayout(this); - group_grid->addWidget(create_basic_info_group_box(), 0, 0); - group_grid->addWidget(key_usage_group_box_, 1, 0); - - auto* name_list = new QWidget(this); - name_list->setLayout(group_grid); - - auto* vbox2 = new QVBoxLayout(); - vbox2->addWidget(name_list); - vbox2->addWidget(error_label_); - vbox2->addWidget(button_box_); - - this->setLayout(vbox2); - - set_signal_slot(); - refresh_widgets_state(); -} - -void KeyGenDialog::slot_key_gen_accept() { - QString buffer; - QTextStream error_stream(&buffer); - - /** - * check for errors in keygen dialog input - */ - if ((name_edit_->text()).size() < 5) { - error_stream << " " << tr("Name must contain at least five characters.") - << '\n'; - } - if (email_edit_->text().isEmpty() || - !check_email_address(email_edit_->text())) { - error_stream << " " << tr("Please give a email address.") << '\n'; - } - - /** - * primary keys should have a reasonable expiration date (no more than 2 years - * in the future) - */ - if (date_edit_->dateTime() > max_date_time_) { - error_stream << " " << tr("Expiration time too long.") << '\n'; - } - - auto err_string = error_stream.readAll(); - if (err_string.isEmpty()) { - /** - * create the string for key generation - */ - gen_key_info_->SetName(name_edit_->text()); - gen_key_info_->SetEmail(email_edit_->text()); - gen_key_info_->SetComment(comment_edit_->text()); - - gen_key_info_->SetKeyLength(key_size_spin_box_->value()); - - if (no_pass_phrase_check_box_->checkState() != 0U) { - gen_key_info_->SetNonPassPhrase(true); - if (gen_subkey_info_ != nullptr) { - gen_subkey_info_->SetNonPassPhrase(true); - } - } - - if (expire_check_box_->checkState() != 0U) { - gen_key_info_->SetNonExpired(true); - if (gen_subkey_info_ != nullptr) gen_subkey_info_->SetNonExpired(true); - } else { - gen_key_info_->SetExpireTime(date_edit_->dateTime()); - if (gen_subkey_info_ != nullptr) { - gen_subkey_info_->SetExpireTime(date_edit_->dateTime()); - } - } - - if (!GlobalSettingStation::GetInstance() - .GetSettings() - .value("gnupg/use_pinentry_as_password_input_dialog", - QString::fromLocal8Bit(qgetenv("container")) != "flatpak") - .toBool() && - !no_pass_phrase_check_box_->isChecked()) { - SetCacheValue("PinentryContext", "NEW_PASSPHRASE"); - } - - auto selected_gpg_context_channel = gpg_contexts_combo_box_->currentIndex(); - LOG_D() << "try to generate key at gpg context channel: " - << selected_gpg_context_channel; - - CommonUtils::WaitForOpera( - this, tr("Generating"), - [this, gen_key_info = this->gen_key_info_, - selected_gpg_context_channel](const OperaWaitingHd& hd) { - GpgKeyOpera::GetInstance(selected_gpg_context_channel) - .GenerateKeyWithSubkey( - gen_key_info, gen_subkey_info_, - [this, hd](GpgError err, const DataObjectPtr&) { - // stop showing waiting dialog - hd(); - - if (CheckGpgError(err) == GPG_ERR_USER_1) { - QMessageBox::critical(this, tr("Error"), - tr("Unknown error occurred")); - return; - } - - CommonUtils::RaiseMessageBox(this->parentWidget() != nullptr - ? this->parentWidget() - : this, - err); - if (CheckGpgError(err) == GPG_ERR_NO_ERROR) { - emit SignalKeyGenerated(); - } - }); - }); - - this->done(0); - - } else { - /** - * create error message - */ - error_label_->setAutoFillBackground(true); - QPalette error = error_label_->palette(); - error.setColor(QPalette::Window, "#ff8080"); - error_label_->setPalette(error); - error_label_->setText(err_string); - - this->show(); - } -} - -void KeyGenDialog::slot_expire_box_changed() {} - -auto KeyGenDialog::create_key_usage_group_box() -> QGroupBox* { - auto* group_box = new QGroupBox(this); - auto* grid = new QGridLayout(this); - - group_box->setTitle(tr("Key Usage")); - - auto* encrypt = new QCheckBox(tr("Encryption"), group_box); - encrypt->setTristate(false); - - auto* sign = new QCheckBox(tr("Signing"), group_box); - sign->setTristate(false); - - auto* cert = new QCheckBox(tr("Certification"), group_box); - cert->setTristate(false); - - auto* auth = new QCheckBox(tr("Authentication"), group_box); - auth->setTristate(false); - - key_usage_check_boxes_.push_back(encrypt); - key_usage_check_boxes_.push_back(sign); - key_usage_check_boxes_.push_back(cert); - key_usage_check_boxes_.push_back(auth); - - grid->addWidget(encrypt, 0, 0); - grid->addWidget(sign, 0, 1); - grid->addWidget(cert, 1, 0); - grid->addWidget(auth, 1, 1); - - group_box->setLayout(grid); - - return group_box; -} - -void KeyGenDialog::slot_encryption_box_changed(int state) { - if (state == 0) { - gen_key_info_->SetAllowEncryption(false); - } else { - gen_key_info_->SetAllowEncryption(true); - } -} - -void KeyGenDialog::slot_signing_box_changed(int state) { - if (state == 0) { - gen_key_info_->SetAllowSigning(false); - } else { - gen_key_info_->SetAllowSigning(true); - } -} - -void KeyGenDialog::slot_certification_box_changed(int state) { - if (state == 0) { - gen_key_info_->SetAllowCertification(false); - } else { - gen_key_info_->SetAllowCertification(true); - } -} - -void KeyGenDialog::slot_authentication_box_changed(int state) { - if (state == 0) { - gen_key_info_->SetAllowAuthentication(false); - } else { - gen_key_info_->SetAllowAuthentication(true); - } -} - -void KeyGenDialog::slot_activated_key_type(int index) { - // check - assert(gen_key_info_->GetSupportedKeyAlgo().size() > - static_cast<size_t>(index)); - - const auto [name, key_algo, subkey_algo] = - gen_key_info_->GetSupportedKeyAlgo()[index]; - - assert(!key_algo.isEmpty()); - gen_key_info_->SetAlgo(key_algo); - - if (!subkey_algo.isEmpty()) { - if (gen_subkey_info_ == nullptr) { - gen_subkey_info_ = SecureCreateSharedObject<GenKeyInfo>(true); - } - gen_subkey_info_->SetAlgo(subkey_algo); - } else { - gen_subkey_info_ = nullptr; - } - - refresh_widgets_state(); -} - -void KeyGenDialog::refresh_widgets_state() { - if (gen_key_info_->IsAllowEncryption() || - (gen_subkey_info_ != nullptr && gen_subkey_info_->IsAllowEncryption())) { - key_usage_check_boxes_[0]->setCheckState(Qt::CheckState::Checked); - } else { - key_usage_check_boxes_[0]->setCheckState(Qt::CheckState::Unchecked); - } - - if (gen_key_info_->IsAllowChangeEncryption() || - (gen_subkey_info_ != nullptr && - gen_subkey_info_->IsAllowChangeEncryption())) { - key_usage_check_boxes_[0]->setDisabled(false); - } else { - key_usage_check_boxes_[0]->setDisabled(true); - } - - if (gen_key_info_->IsAllowSigning() || - (gen_subkey_info_ != nullptr && gen_subkey_info_->IsAllowSigning())) { - key_usage_check_boxes_[1]->setCheckState(Qt::CheckState::Checked); - } else { - key_usage_check_boxes_[1]->setCheckState(Qt::CheckState::Unchecked); - } - - if (gen_key_info_->IsAllowChangeSigning() || - (gen_subkey_info_ != nullptr && - gen_subkey_info_->IsAllowChangeSigning())) { - key_usage_check_boxes_[1]->setDisabled(false); - } else { - key_usage_check_boxes_[1]->setDisabled(true); - } - - if (gen_key_info_->IsAllowCertification() || - (gen_subkey_info_ != nullptr && - gen_subkey_info_->IsAllowCertification())) { - key_usage_check_boxes_[2]->setCheckState(Qt::CheckState::Checked); - } else { - key_usage_check_boxes_[2]->setCheckState(Qt::CheckState::Unchecked); - } - - if (gen_key_info_->IsAllowChangeCertification() || - (gen_subkey_info_ != nullptr && - gen_subkey_info_->IsAllowChangeCertification())) { - key_usage_check_boxes_[2]->setDisabled(false); - } else { - key_usage_check_boxes_[2]->setDisabled(true); - } - - if (gen_key_info_->IsAllowAuthentication() || - (gen_subkey_info_ != nullptr && - gen_subkey_info_->IsAllowAuthentication())) { - key_usage_check_boxes_[3]->setCheckState(Qt::CheckState::Checked); - } else { - key_usage_check_boxes_[3]->setCheckState(Qt::CheckState::Unchecked); - } - - if (gen_key_info_->IsAllowChangeAuthentication() || - (gen_subkey_info_ != nullptr && - gen_subkey_info_->IsAllowChangeAuthentication())) { - key_usage_check_boxes_[3]->setDisabled(false); - } else { - key_usage_check_boxes_[3]->setDisabled(true); - } - - if (gen_key_info_->IsAllowNoPassPhrase()) { - no_pass_phrase_check_box_->setDisabled(false); - } else { - no_pass_phrase_check_box_->setDisabled(true); - } - - if (gen_key_info_->GetSuggestMinKeySize() == -1 || - gen_key_info_->GetSuggestMaxKeySize() == -1) { - key_size_spin_box_->setDisabled(true); - key_size_spin_box_->setRange(0, 0); - key_size_spin_box_->setValue(0); - key_size_spin_box_->setSingleStep(0); - } else { - key_size_spin_box_->setDisabled(false); - key_size_spin_box_->setRange(gen_key_info_->GetSuggestMinKeySize(), - gen_key_info_->GetSuggestMaxKeySize()); - key_size_spin_box_->setValue(gen_key_info_->GetKeyLength()); - key_size_spin_box_->setSingleStep(gen_key_info_->GetSizeChangeStep()); - } -} - -void KeyGenDialog::set_signal_slot() { - connect(button_box_, &QDialogButtonBox::accepted, this, - &KeyGenDialog::slot_key_gen_accept); - connect(button_box_, &QDialogButtonBox::rejected, this, - &KeyGenDialog::reject); - - connect(expire_check_box_, &QCheckBox::stateChanged, this, [this]() { - date_edit_->setDisabled(expire_check_box_->checkState() != 0U); - }); - - connect(key_usage_check_boxes_[0], &QCheckBox::stateChanged, this, - &KeyGenDialog::slot_encryption_box_changed); - connect(key_usage_check_boxes_[1], &QCheckBox::stateChanged, this, - &KeyGenDialog::slot_signing_box_changed); - connect(key_usage_check_boxes_[2], &QCheckBox::stateChanged, this, - &KeyGenDialog::slot_certification_box_changed); - connect(key_usage_check_boxes_[3], &QCheckBox::stateChanged, this, - &KeyGenDialog::slot_authentication_box_changed); - - connect(key_type_combo_box_, qOverload<int>(&QComboBox::currentIndexChanged), - this, &KeyGenDialog::slot_activated_key_type); - - connect(no_pass_phrase_check_box_, &QCheckBox::stateChanged, this, - [this](int state) -> void { - gen_key_info_->SetNonPassPhrase(state != 0); - if (gen_subkey_info_ != nullptr) { - gen_subkey_info_->SetNonPassPhrase(state != 0); - } - }); -} - -auto KeyGenDialog::check_email_address(const QString& str) -> bool { - return re_email_.match(str).hasMatch(); -} - -auto KeyGenDialog::create_basic_info_group_box() -> QGroupBox* { - error_label_ = new QLabel(); - name_edit_ = new QLineEdit(this); - email_edit_ = new QLineEdit(this); - comment_edit_ = new QLineEdit(this); - key_size_spin_box_ = new QSpinBox(this); - key_type_combo_box_ = new QComboBox(this); - gpg_contexts_combo_box_ = new QComboBox(this); - - auto gpg_context_index_list = - Module::ListRTChildKeys("core", "gpgme.ctx.list"); - - for (auto& context_index : gpg_context_index_list) { - const auto grt_key_prefix = QString("gpgme.ctx.list.%1").arg(context_index); - auto channel = Module::RetrieveRTValueTypedOrDefault( - "core", grt_key_prefix + ".channel", -1); - auto database_name = Module::RetrieveRTValueTypedOrDefault( - "core", grt_key_prefix + ".database_name", QString{}); - gpg_contexts_combo_box_->addItem( - QString("%1: %2").arg(channel).arg(database_name)); - } - gpg_contexts_combo_box_->setCurrentIndex(default_gpg_context_channel_); - - for (const auto& algo : GenKeyInfo::GetSupportedKeyAlgo()) { - key_type_combo_box_->addItem(std::get<0>(algo)); - } - if (!GenKeyInfo::GetSupportedKeyAlgo().empty()) { - key_type_combo_box_->setCurrentIndex(0); - } - - date_edit_ = - new QDateTimeEdit(QDateTime::currentDateTime().addYears(2), this); - date_edit_->setMinimumDateTime(QDateTime::currentDateTime()); - date_edit_->setMaximumDateTime(max_date_time_); - date_edit_->setDisplayFormat("dd/MM/yyyy hh:mm:ss"); - date_edit_->setCalendarPopup(true); - date_edit_->setEnabled(true); - - expire_check_box_ = new QCheckBox(this); - expire_check_box_->setCheckState(Qt::Unchecked); - - no_pass_phrase_check_box_ = new QCheckBox(this); - no_pass_phrase_check_box_->setCheckState(Qt::Unchecked); - - auto* vbox1 = new QGridLayout; - - vbox1->addWidget(new QLabel(tr("Key Database") + ": "), 0, 0); - vbox1->addWidget(new QLabel(tr("Name") + ": "), 1, 0); - vbox1->addWidget(new QLabel(tr("Email Address") + ": "), 2, 0); - vbox1->addWidget(new QLabel(tr("Comment") + ": "), 3, 0); - vbox1->addWidget(new QLabel(tr("Expiration Date") + ": "), 4, 0); - vbox1->addWidget(new QLabel(tr("Never Expire") + ": "), 4, 3); - vbox1->addWidget(new QLabel(tr("KeySize (in Bit)") + ": "), 5, 0); - vbox1->addWidget(new QLabel(tr("Key Type") + ": "), 6, 0); - vbox1->addWidget(new QLabel(tr("Non Pass Phrase")), 7, 0); - - vbox1->addWidget(gpg_contexts_combo_box_, 0, 1, 1, 3); - vbox1->addWidget(name_edit_, 1, 1, 1, 3); - vbox1->addWidget(email_edit_, 2, 1, 1, 3); - vbox1->addWidget(comment_edit_, 3, 1, 1, 3); - vbox1->addWidget(date_edit_, 4, 1); - vbox1->addWidget(expire_check_box_, 4, 2); - vbox1->addWidget(key_size_spin_box_, 5, 1); - vbox1->addWidget(key_type_combo_box_, 6, 1); - vbox1->addWidget(no_pass_phrase_check_box_, 7, 1); - - auto* basic_info_group_box = new QGroupBox(); - basic_info_group_box->setLayout(vbox1); - basic_info_group_box->setTitle(tr("Basic Information")); - - return basic_info_group_box; -} - -} // namespace GpgFrontend::UI diff --git a/src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp b/src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp index dd88aac2..58734c7d 100644 --- a/src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp +++ b/src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp @@ -31,345 +31,200 @@ #include <cassert> #include <cstddef> -#include "core/function/GlobalSettingStation.h" #include "core/function/gpg/GpgKeyGetter.h" #include "core/function/gpg/GpgKeyOpera.h" -#include "core/utils/CacheUtils.h" #include "core/utils/GpgUtils.h" #include "ui/UISignalStation.h" #include "ui/UserInterfaceUtils.h" +#include "ui/function/GpgOperaHelper.h" +#include "ui/function/KeyGenerateHelper.h" + +// +#include "ui_SubkeyGenDialog.h" namespace GpgFrontend::UI { SubkeyGenerateDialog::SubkeyGenerateDialog(int channel, const KeyId& key_id, QWidget* parent) : GeneralDialog(typeid(SubkeyGenerateDialog).name(), parent), + ui_(QSharedPointer<Ui_SubkeyGenDialog>::create()), current_gpg_context_channel_(channel), key_(GpgKeyGetter::GetInstance(current_gpg_context_channel_) - .GetKey(key_id)) { + .GetKey(key_id)), + gen_subkey_info_(QSharedPointer<KeyGenerateInfo>::create(true)), + supported_subkey_algos_(KeyGenerateInfo::GetSupportedSubkeyAlgo()) { + ui_->setupUi(this); assert(key_.IsGood()); - bool longer_expiration_date = - GlobalSettingStation::GetInstance() - .GetSettings() - .value("basic/longer_expiration_date", false) - .toBool(); - - max_date_time_ = longer_expiration_date - ? QDateTime::currentDateTime().toLocalTime().addYears(30) - : QDateTime::currentDateTime().toLocalTime().addYears(2); - - button_box_ = - new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel); + ui_->algoLabel->setText(tr("Algorithm")); + ui_->keyLengthLabel->setText(tr("Key Length")); + ui_->expireLabel->setText(tr("Expire Date")); + ui_->usageLabel->setText(tr("Usage")); + ui_->encrCheckBox->setText(tr("Encrypt")); + ui_->signCheckBox->setText(tr("Sign")); + ui_->authCheckBox->setText(tr("Authentication")); + ui_->nonExpiredCheckBox->setText(tr("Non Expired")); + ui_->nonPassphraseCheckBox->setText(tr("No Passphrase")); - key_usage_group_box_ = create_key_usage_group_box(); + const auto min_date_time = QDateTime::currentDateTime().addDays(3); + ui_->expireDateTimeEdit->setMinimumDateTime(min_date_time); - auto* group_grid = new QGridLayout(this); - group_grid->addWidget(create_basic_info_group_box(), 0, 0); - group_grid->addWidget(key_usage_group_box_, 1, 0); - - auto* tipps_label = - new QLabel(tr("Tipps: if the key pair has a passphrase, the subkey's " - "passphrase must be equal to it.")); - tipps_label->setWordWrap(true); - group_grid->addWidget(tipps_label); + QSet<QString> algo_set; + for (const auto& algo : supported_subkey_algos_) { + algo_set.insert(algo.Name()); + } + ui_->algoComboBox->addItems(QStringList(algo_set.cbegin(), algo_set.cend())); - auto* name_list = new QWidget(this); - name_list->setLayout(group_grid); + ui_->expireDateTimeEdit->setDateTime(gen_subkey_info_->GetExpireTime()); + ui_->expireDateTimeEdit->setDisabled(gen_subkey_info_->IsNonExpired()); - auto* vbox2 = new QVBoxLayout(); - vbox2->addWidget(name_list); - vbox2->addWidget(error_label_); - vbox2->addWidget(button_box_); + ui_->statusPlainTextEdit->appendPlainText( + tr("Tipps: if the key pair has a passphrase, the subkey's " + "passphrase must be equal to it.")); this->setWindowTitle(tr("Generate New Subkey")); - this->setLayout(vbox2); this->setAttribute(Qt::WA_DeleteOnClose); this->setModal(true); - set_signal_slot(); + set_signal_slot_config(); refresh_widgets_state(); } -QGroupBox* SubkeyGenerateDialog::create_key_usage_group_box() { - auto* group_box = new QGroupBox(this); - auto* grid = new QGridLayout(this); - - group_box->setTitle(tr("Key Usage")); - - auto* encrypt = new QCheckBox(tr("Encryption"), group_box); - encrypt->setTristate(false); - - auto* sign = new QCheckBox(tr("Signing"), group_box); - sign->setTristate(false); - - auto* cert = new QCheckBox(tr("Certification"), group_box); - cert->setTristate(false); - - auto* auth = new QCheckBox(tr("Authentication"), group_box); - auth->setTristate(false); - - key_usage_check_boxes_.push_back(encrypt); - key_usage_check_boxes_.push_back(sign); - key_usage_check_boxes_.push_back(cert); - key_usage_check_boxes_.push_back(auth); - - grid->addWidget(encrypt, 0, 0); - grid->addWidget(sign, 0, 1); - grid->addWidget(cert, 1, 0); - grid->addWidget(auth, 1, 1); - - group_box->setLayout(grid); - - return group_box; -} - -QGroupBox* SubkeyGenerateDialog::create_basic_info_group_box() { - error_label_ = new QLabel(); - key_size_spin_box_ = new QSpinBox(this); - key_type_combo_box_ = new QComboBox(this); - no_pass_phrase_check_box_ = new QCheckBox(this); - - for (const auto& algo : GenKeyInfo::GetSupportedSubkeyAlgo()) { - key_type_combo_box_->addItem(std::get<0>(algo)); - } - if (!GenKeyInfo::GetSupportedSubkeyAlgo().empty()) { - key_type_combo_box_->setCurrentIndex(0); - } - - date_edit_ = - new QDateTimeEdit(QDateTime::currentDateTime().addYears(2), this); - date_edit_->setMinimumDateTime(QDateTime::currentDateTime()); - date_edit_->setMaximumDateTime(max_date_time_); - date_edit_->setDisplayFormat("dd/MM/yyyy hh:mm:ss"); - date_edit_->setCalendarPopup(true); - date_edit_->setEnabled(true); - - expire_check_box_ = new QCheckBox(this); - expire_check_box_->setCheckState(Qt::Unchecked); - - auto* vbox1 = new QGridLayout; - - vbox1->addWidget(new QLabel(tr("Key Type") + ": "), 0, 0); - vbox1->addWidget(new QLabel(tr("KeySize (in Bit)") + ": "), 1, 0); - vbox1->addWidget(new QLabel(tr("Expiration Date") + ": "), 2, 0); - vbox1->addWidget(new QLabel(tr("Never Expire")), 2, 3); - vbox1->addWidget(new QLabel(tr("Non Pass Phrase")), 3, 0); - - vbox1->addWidget(key_type_combo_box_, 0, 1); - vbox1->addWidget(key_size_spin_box_, 1, 1); - vbox1->addWidget(date_edit_, 2, 1); - vbox1->addWidget(expire_check_box_, 2, 2); - vbox1->addWidget(no_pass_phrase_check_box_, 3, 1); - - auto* basic_info_group_box = new QGroupBox(); - basic_info_group_box->setLayout(vbox1); - basic_info_group_box->setTitle(tr("Basic Information")); - - return basic_info_group_box; -} - -void SubkeyGenerateDialog::set_signal_slot() { - connect(button_box_, &QDialogButtonBox::accepted, this, +void SubkeyGenerateDialog::set_signal_slot_config() { + connect(ui_->generateButton, &QPushButton::clicked, this, &SubkeyGenerateDialog::slot_key_gen_accept); - connect(button_box_, &QDialogButtonBox::rejected, this, - &SubkeyGenerateDialog::reject); - - connect(expire_check_box_, &QCheckBox::stateChanged, this, - &SubkeyGenerateDialog::slot_expire_box_changed); - connect(key_usage_check_boxes_[0], &QCheckBox::stateChanged, this, - &SubkeyGenerateDialog::slot_encryption_box_changed); - connect(key_usage_check_boxes_[1], &QCheckBox::stateChanged, this, - &SubkeyGenerateDialog::slot_signing_box_changed); - connect(key_usage_check_boxes_[2], &QCheckBox::stateChanged, this, - &SubkeyGenerateDialog::slot_certification_box_changed); - connect(key_usage_check_boxes_[3], &QCheckBox::stateChanged, this, - &SubkeyGenerateDialog::slot_authentication_box_changed); + connect(ui_->nonExpiredCheckBox, &QCheckBox::stateChanged, this, + [=](int state) { + gen_subkey_info_->SetNonExpired(state == Qt::Checked); + refresh_widgets_state(); + }); - connect(key_type_combo_box_, qOverload<int>(&QComboBox::currentIndexChanged), - this, &SubkeyGenerateDialog::slot_activated_key_type); + connect(ui_->encrCheckBox, &QCheckBox::stateChanged, this, [this](int state) { + gen_subkey_info_->SetAllowEncr(state == Qt::Checked); + }); + connect(ui_->signCheckBox, &QCheckBox::stateChanged, this, [this](int state) { + gen_subkey_info_->SetAllowSign(state == Qt::Checked); + }); + connect(ui_->authCheckBox, &QCheckBox::stateChanged, this, [this](int state) { + gen_subkey_info_->SetAllowAuth(state == Qt::Checked); + }); + + connect(ui_->algoComboBox, &QComboBox::currentTextChanged, this, + [=](const QString& text) { + auto [found, algo] = GetAlgoByName(text, supported_subkey_algos_); + ui_->generateButton->setDisabled(!found); + if (found) gen_subkey_info_->SetAlgo(algo); + + refresh_widgets_state(); + }); - connect(no_pass_phrase_check_box_, &QCheckBox::stateChanged, this, + connect(ui_->nonPassphraseCheckBox, &QCheckBox::stateChanged, this, [this](int state) -> void { - gen_key_info_->SetNonPassPhrase(state != 0); + gen_subkey_info_->SetNonPassPhrase(state == Qt::Checked); }); -} -void SubkeyGenerateDialog::slot_expire_box_changed() { - if (expire_check_box_->checkState() != 0U) { - date_edit_->setEnabled(false); - } else { - date_edit_->setEnabled(true); - } + connect(ui_->keyLengthComboBox, &QComboBox::currentTextChanged, this, + [this](const QString& text) -> void { + auto [found, algo] = GetAlgoByNameAndKeyLength( + ui_->algoComboBox->currentText(), text.toInt(), + supported_subkey_algos_); + + if (found) gen_subkey_info_->SetAlgo(algo); + }); } void SubkeyGenerateDialog::refresh_widgets_state() { - if (gen_key_info_->IsAllowEncryption()) { - key_usage_check_boxes_[0]->setCheckState(Qt::CheckState::Checked); - } else { - key_usage_check_boxes_[0]->setCheckState(Qt::CheckState::Unchecked); - } - - if (gen_key_info_->IsAllowChangeEncryption()) { - key_usage_check_boxes_[0]->setDisabled(false); - } else { - key_usage_check_boxes_[0]->setDisabled(true); - } - - if (gen_key_info_->IsAllowSigning()) { - key_usage_check_boxes_[1]->setCheckState(Qt::CheckState::Checked); - } else { - key_usage_check_boxes_[1]->setCheckState(Qt::CheckState::Unchecked); - } - - if (gen_key_info_->IsAllowChangeSigning()) { - key_usage_check_boxes_[1]->setDisabled(false); - } else { - key_usage_check_boxes_[1]->setDisabled(true); - } - - if (gen_key_info_->IsAllowCertification()) { - key_usage_check_boxes_[2]->setCheckState(Qt::CheckState::Checked); - } else { - key_usage_check_boxes_[2]->setCheckState(Qt::CheckState::Unchecked); - } - - if (gen_key_info_->IsAllowChangeCertification()) { - key_usage_check_boxes_[2]->setDisabled(false); - } else { - key_usage_check_boxes_[2]->setDisabled(true); - } - - if (gen_key_info_->IsAllowAuthentication()) { - key_usage_check_boxes_[3]->setCheckState(Qt::CheckState::Checked); - } else { - key_usage_check_boxes_[3]->setCheckState(Qt::CheckState::Unchecked); - } - - if (gen_key_info_->IsAllowChangeAuthentication()) { - key_usage_check_boxes_[3]->setDisabled(false); - } else { - key_usage_check_boxes_[3]->setDisabled(true); - } - - if (gen_key_info_->GetSuggestMinKeySize() == -1 || - gen_key_info_->GetSuggestMaxKeySize() == -1) { - key_size_spin_box_->setDisabled(true); - key_size_spin_box_->setRange(0, 0); - key_size_spin_box_->setValue(0); - key_size_spin_box_->setSingleStep(0); - } else { - key_size_spin_box_->setDisabled(false); - key_size_spin_box_->setRange(gen_key_info_->GetSuggestMinKeySize(), - gen_key_info_->GetSuggestMaxKeySize()); - key_size_spin_box_->setValue(gen_key_info_->GetKeyLength()); - key_size_spin_box_->setSingleStep(gen_key_info_->GetSizeChangeStep()); - } + ui_->algoComboBox->blockSignals(true); + ui_->algoComboBox->setCurrentText(gen_subkey_info_->GetAlgo().Name()); + ui_->algoComboBox->blockSignals(false); + + ui_->keyLengthComboBox->blockSignals(true); + SetKeyLengthComboxBoxByAlgo(ui_->keyLengthComboBox, + SearchAlgoByName(ui_->algoComboBox->currentText(), + supported_subkey_algos_)); + ui_->keyLengthComboBox->setCurrentText( + QString::number(gen_subkey_info_->GetKeyLength())); + ui_->keyLengthComboBox->blockSignals(false); + + ui_->encrCheckBox->blockSignals(true); + ui_->encrCheckBox->setChecked(gen_subkey_info_->IsAllowEncr()); + ui_->encrCheckBox->setEnabled(gen_subkey_info_->IsAllowModifyEncr()); + ui_->encrCheckBox->blockSignals(false); + + ui_->signCheckBox->blockSignals(true); + ui_->signCheckBox->setChecked(gen_subkey_info_->IsAllowSign()); + ui_->signCheckBox->setEnabled(gen_subkey_info_->IsAllowModifySign()); + ui_->signCheckBox->blockSignals(false); + + ui_->authCheckBox->blockSignals(true); + ui_->authCheckBox->setChecked(gen_subkey_info_->IsAllowAuth()); + ui_->authCheckBox->setEnabled(gen_subkey_info_->IsAllowModifyAuth()); + ui_->authCheckBox->blockSignals(false); + + ui_->nonPassphraseCheckBox->setEnabled( + gen_subkey_info_->IsAllowNoPassPhrase()); + + ui_->expireDateTimeEdit->blockSignals(true); + ui_->expireDateTimeEdit->setDateTime(gen_subkey_info_->GetExpireTime()); + ui_->expireDateTimeEdit->setDisabled(gen_subkey_info_->IsNonExpired()); + ui_->expireDateTimeEdit->blockSignals(false); + + ui_->nonExpiredCheckBox->blockSignals(true); + ui_->nonExpiredCheckBox->setChecked(gen_subkey_info_->IsNonExpired()); + ui_->nonExpiredCheckBox->blockSignals(false); } void SubkeyGenerateDialog::slot_key_gen_accept() { QString buffer; QTextStream err_stream(&buffer); - /** - * primary keys should have a reasonable expiration date (no more than 2 years - * in the future) - */ - if (date_edit_->dateTime() > QDateTime::currentDateTime().addYears(2)) { - err_stream << " " << tr("Expiration time no more than 2 years.") << " "; - } - - auto err_string = err_stream.readAll(); - - if (err_string.isEmpty()) { - gen_key_info_->SetKeyLength(key_size_spin_box_->value()); - - if (expire_check_box_->checkState() != 0U) { - gen_key_info_->SetNonExpired(true); - } else { - gen_key_info_->SetExpireTime(date_edit_->dateTime()); - } - - CommonUtils::WaitForOpera( - this, tr("Generating"), - [this, key = this->key_, - gen_key_info = this->gen_key_info_](const OperaWaitingHd& hd) { - GpgKeyOpera::GetInstance(current_gpg_context_channel_) - .GenerateSubkey(key, gen_key_info, - [this, hd](GpgError err, const DataObjectPtr&) { - // stop showing waiting dialog - hd(); - - if (CheckGpgError(err) == GPG_ERR_USER_1) { - QMessageBox::critical( - this, tr("Error"), - tr("Unknown error occurred")); - return; - } - - CommonUtils::RaiseMessageBox(this, err); - if (CheckGpgError(err) == GPG_ERR_NO_ERROR) { - emit UISignalStation::GetInstance() - -> SignalKeyDatabaseRefresh(); - } - }); - }); - this->done(0); - - } else { - /** - * create error message - */ - error_label_->setAutoFillBackground(true); - QPalette error = error_label_->palette(); - error.setColor(QPalette::Window, "#ff8080"); - error_label_->setPalette(error); - error_label_->setText(err_string); - - this->show(); - } -} - -void SubkeyGenerateDialog::slot_encryption_box_changed(int state) { - if (state == 0) { - gen_key_info_->SetAllowEncryption(false); - } else { - gen_key_info_->SetAllowEncryption(true); - } -} - -void SubkeyGenerateDialog::slot_signing_box_changed(int state) { - if (state == 0) { - gen_key_info_->SetAllowSigning(false); - } else { - gen_key_info_->SetAllowSigning(true); - } -} - -void SubkeyGenerateDialog::slot_certification_box_changed(int state) { - if (state == 0) { - gen_key_info_->SetAllowCertification(false); - } else { - gen_key_info_->SetAllowCertification(true); - } -} - -void SubkeyGenerateDialog::slot_authentication_box_changed(int state) { - if (state == 0) { - gen_key_info_->SetAllowAuthentication(false); - } else { - gen_key_info_->SetAllowAuthentication(true); - } -} - -void SubkeyGenerateDialog::slot_activated_key_type(int index) { - // check - assert(gen_key_info_->GetSupportedSubkeyAlgo().size() > - static_cast<size_t>(index)); - gen_key_info_->SetAlgo( - std::get<2>(gen_key_info_->GetSupportedSubkeyAlgo()[index])); - refresh_widgets_state(); + if (gen_subkey_info_->GetAlgo() == KeyGenerateInfo::kNoneAlgo) { + err_stream << " -> " << tr("Please give a valid subkey algorithm.") + << Qt::endl; + } + + if (!gen_subkey_info_->IsNonExpired() && + gen_subkey_info_->GetExpireTime() < + QDateTime::currentDateTime().addSecs(120)) { + err_stream + << " -> " + << tr("Time to subkey expiration must not be less than 120 seconds.") + << Qt::endl; + } + + const auto err_string = err_stream.readAll(); + if (!err_string.isEmpty()) { + ui_->statusPlainTextEdit->clear(); + ui_->statusPlainTextEdit->appendPlainText(err_string); + return; + } + + GpgOperaHelper::WaitForOpera( + this, tr("Generating"), + [this, key = this->key_, + gen_key_info = this->gen_subkey_info_](const OperaWaitingHd& hd) { + GpgKeyOpera::GetInstance(current_gpg_context_channel_) + .GenerateSubkey(key, gen_key_info, + [this, hd](GpgError err, const DataObjectPtr&) { + // stop showing waiting dialog + hd(); + + if (CheckGpgError(err) == GPG_ERR_USER_1) { + QMessageBox::critical( + this, tr("Error"), + tr("Unknown error occurred")); + return; + } + + CommonUtils::RaiseMessageBox(this, err); + if (CheckGpgError(err) == GPG_ERR_NO_ERROR) { + emit UISignalStation::GetInstance() + -> SignalKeyDatabaseRefresh(); + } + }); + }); + this->done(0); } } // namespace GpgFrontend::UI diff --git a/src/ui/dialog/key_generate/SubkeyGenerateDialog.h b/src/ui/dialog/key_generate/SubkeyGenerateDialog.h index f0a4fed6..96dee49e 100644 --- a/src/ui/dialog/key_generate/SubkeyGenerateDialog.h +++ b/src/ui/dialog/key_generate/SubkeyGenerateDialog.h @@ -28,16 +28,16 @@ #pragma once -#include <memory> - #include "core/function/gpg/GpgContext.h" -#include "core/model/GpgGenKeyInfo.h" #include "core/model/GpgKey.h" +#include "core/model/GpgKeyGenerateInfo.h" #include "core/typedef/GpgTypedef.h" #include "core/utils/MemoryUtils.h" #include "ui/GpgFrontendUI.h" #include "ui/dialog/GeneralDialog.h" +class Ui_SubkeyGenDialog; + namespace GpgFrontend::UI { /** * @brief @@ -56,97 +56,32 @@ class SubkeyGenerateDialog : public GeneralDialog { explicit SubkeyGenerateDialog(int channel, const KeyId& key_id, QWidget* parent); - private: - int current_gpg_context_channel_; ///< - GpgKey key_; ///< - - std::shared_ptr<GenKeyInfo> gen_key_info_ = - SecureCreateSharedObject<GenKeyInfo>(true); ///< - - QGroupBox* key_usage_group_box_{}; - QDialogButtonBox* button_box_; ///< Box for standard buttons - QLabel* error_label_{}; ///< Label containing error message - QSpinBox* key_size_spin_box_{}; ///< Spinbox for the keys size (in bit) - QComboBox* key_type_combo_box_{}; ///< Combobox for Key tpe - QDateTimeEdit* date_edit_{}; ///< Date edit for expiration date - QCheckBox* expire_check_box_{}; ///< Checkbox, if key should expire - QCheckBox* no_pass_phrase_check_box_{}; ///< Checkbox, if key should expire - - std::vector<QCheckBox*> key_usage_check_boxes_; ///< ENCR, SIGN, CERT, AUTH - QDateTime max_date_time_; ///< - - /** - * @brief Create a key usage group box object - * - * @return QGroupBox* - */ - QGroupBox* create_key_usage_group_box(); - - /** - * @brief Create a basic info group box object - * - * @return QGroupBox* - */ - QGroupBox* create_basic_info_group_box(); - /** - * @brief Set the signal slot object - * - */ - void set_signal_slot(); - - /** - * @details Refresh widgets state by GenKeyInfo - */ - void refresh_widgets_state(); - private slots: /** - * @details when expire box was checked/unchecked, enable/disable the - * expiration date box - */ - void slot_expire_box_changed(); - - /** * @details check all line edits for false entries. Show error, when there is * one, otherwise generate the key */ void slot_key_gen_accept(); - /** - * @brief - * - * @param state - */ - void slot_encryption_box_changed(int state); - - /** - * @brief - * - * @param state - */ - void slot_signing_box_changed(int state); + private: + QSharedPointer<Ui_SubkeyGenDialog> ui_; ///< + int current_gpg_context_channel_; ///< - /** - * @brief - * - * @param state - */ - void slot_certification_box_changed(int state); + GpgKey key_; ///< + QSharedPointer<KeyGenerateInfo> gen_subkey_info_; ///< + QContainer<KeyAlgo> supported_subkey_algos_; ///< /** - * @brief + * @brief Set the signal slot object * - * @param state */ - void slot_authentication_box_changed(int state); + void set_signal_slot_config(); /** - * @brief - * - * @param index + * @details Refresh widgets state by GenKeyInfo */ - void slot_activated_key_type(int index); + void refresh_widgets_state(); }; } // namespace GpgFrontend::UI diff --git a/src/ui/dialog/keypair_details/KeyPairDetailTab.cpp b/src/ui/dialog/keypair_details/KeyPairDetailTab.cpp index 21c16107..88c7fbf5 100644 --- a/src/ui/dialog/keypair_details/KeyPairDetailTab.cpp +++ b/src/ui/dialog/keypair_details/KeyPairDetailTab.cpp @@ -215,28 +215,28 @@ void KeyPairDetailTab::slot_refresh_key_info() { QString buffer; QTextStream usage_steam(&buffer); - if (key_.IsHasCertificationCapability()) { + if (key_.IsHasCertCap()) { usage_steam << tr("Certificate") << " "; } - if (key_.IsHasEncryptionCapability()) usage_steam << tr("Encrypt") << " "; - if (key_.IsHasSigningCapability()) usage_steam << tr("Sign") << " "; - if (key_.IsHasAuthenticationCapability()) usage_steam << tr("Auth") << " "; + if (key_.IsHasEncrCap()) usage_steam << tr("Encrypt") << " "; + if (key_.IsHasSignCap()) usage_steam << tr("Sign") << " "; + if (key_.IsHasAuthCap()) usage_steam << tr("Auth") << " "; usage_var_label_->setText(usage_steam.readAll()); QString buffer_2; QTextStream actual_usage_steam(&buffer_2); - if (key_.IsHasActualCertificationCapability()) { + if (key_.IsHasActualCertCap()) { actual_usage_steam << tr("Certificate") << " "; } - if (key_.IsHasActualEncryptionCapability()) { + if (key_.IsHasActualEncrCap()) { actual_usage_steam << tr("Encrypt") << " "; } - if (key_.IsHasActualSigningCapability()) { + if (key_.IsHasActualSignCap()) { actual_usage_steam << tr("Sign") << " "; } - if (key_.IsHasActualAuthenticationCapability()) { + if (key_.IsHasActualAuthCap()) { actual_usage_steam << tr("Auth") << " "; } @@ -306,16 +306,10 @@ void KeyPairDetailTab::slot_refresh_key() { void KeyPairDetailTab::slot_query_key_publish_state() { bool forbid_all_gnupg_connection = - GlobalSettingStation::GetInstance() - .GetSettings() - .value("network/forbid_all_gnupg_connection") - .toBool(); + GetSettings().value("network/forbid_all_gnupg_connection").toBool(); bool auto_fetch_key_publish_status = - GlobalSettingStation::GetInstance() - .GetSettings() - .value("network/auto_fetch_key_publish_status") - .toBool(); + GetSettings().value("network/auto_fetch_key_publish_status").toBool(); if (forbid_all_gnupg_connection || !auto_fetch_key_publish_status) return; diff --git a/src/ui/dialog/keypair_details/KeyPairOperaTab.cpp b/src/ui/dialog/keypair_details/KeyPairOperaTab.cpp index 56103d62..c4f0dad1 100644 --- a/src/ui/dialog/keypair_details/KeyPairOperaTab.cpp +++ b/src/ui/dialog/keypair_details/KeyPairOperaTab.cpp @@ -35,7 +35,6 @@ #include "core/function/gpg/GpgKeyOpera.h" #include "core/model/GpgKey.h" #include "core/module/ModuleManager.h" -#include "core/thread/TaskRunnerGetter.h" #include "core/typedef/GpgTypedef.h" #include "core/utils/GpgUtils.h" #include "core/utils/IOUtils.h" @@ -92,7 +91,7 @@ KeyPairOperaTab::KeyPairOperaTab(int channel, const QString& key_id, auto* advance_h_box_layout = new QHBoxLayout(); - auto settings = GlobalSettingStation::GetInstance().GetSettings(); + auto settings = GetSettings(); // read settings bool forbid_all_gnupg_connection = @@ -436,8 +435,7 @@ void KeyPairOperaTab::slot_publish_key_to_server() { return; } - auto keys = std::make_unique<KeyIdArgsList>(); - keys->push_back(m_key_.GetId()); + auto keys = KeyIdArgsList{m_key_.GetId()}; auto* dialog = new KeyUploadDialog(current_gpg_context_channel_, keys, this); dialog->show(); dialog->SlotUpload(); diff --git a/src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp b/src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp index b37f610f..548b3473 100644 --- a/src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp +++ b/src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp @@ -205,9 +205,8 @@ void KeyPairSubkeyTab::slot_refresh_subkey_list() { tmp0->setTextAlignment(Qt::AlignCenter); subkey_list_->setItem(row, 0, tmp0); - auto* tmp1 = new QTableWidgetItem(subkey.IsHasCertificationCapability() - ? tr("Primary Key") - : tr("Subkey")); + auto* tmp1 = new QTableWidgetItem(subkey.IsHasCertCap() ? tr("Primary Key") + : tr("Subkey")); tmp1->setTextAlignment(Qt::AlignCenter); subkey_list_->setItem(row, 1, tmp1); @@ -307,12 +306,12 @@ void KeyPairSubkeyTab::slot_refresh_subkey_detail() { QString buffer; QTextStream usage_steam(&buffer); - if (subkey.IsHasCertificationCapability()) { + if (subkey.IsHasCertCap()) { usage_steam << tr("Certificate") << " "; } - if (subkey.IsHasEncryptionCapability()) usage_steam << tr("Encrypt") << " "; - if (subkey.IsHasSigningCapability()) usage_steam << tr("Sign") << " "; - if (subkey.IsHasAuthenticationCapability()) usage_steam << tr("Auth") << " "; + if (subkey.IsHasEncrCap()) usage_steam << tr("Encrypt") << " "; + if (subkey.IsHasSignCap()) usage_steam << tr("Sign") << " "; + if (subkey.IsHasAuthCap()) usage_steam << tr("Auth") << " "; usage_var_label_->setText(usage_steam.readAll()); @@ -348,15 +347,13 @@ void KeyPairSubkeyTab::slot_refresh_subkey_detail() { fingerprint_var_label_->setText(BeautifyFingerprint(subkey.GetFingerprint())); fingerprint_var_label_->setWordWrap(true); // for x448 and ed448 - export_subkey_button_->setText(subkey.IsHasCertificationCapability() - ? tr("Export Primary Key") - : tr("Export Subkey")); - export_subkey_button_->setDisabled(!key_.IsPrivateKey() || - subkey.IsHasCertificationCapability() || - !subkey.IsSecretKey()); + export_subkey_button_->setText( + subkey.IsHasCertCap() ? tr("Export Primary Key") : tr("Export Subkey")); + export_subkey_button_->setDisabled( + !key_.IsPrivateKey() || subkey.IsHasCertCap() || !subkey.IsSecretKey()); - key_type_var_label_->setText( - subkey.IsHasCertificationCapability() ? tr("Primary Key") : tr("Subkey")); + key_type_var_label_->setText(subkey.IsHasCertCap() ? tr("Primary Key") + : tr("Subkey")); revoke_var_label_->setText(subkey.IsRevoked() ? tr("Yes") : tr("No")); if (!subkey.IsRevoked()) { @@ -406,7 +403,7 @@ void KeyPairSubkeyTab::contextMenuEvent(QContextMenuEvent* event) { if (key_.IsHasMasterKey() && !subkey_list_->selectedItems().isEmpty()) { const auto& subkey = get_selected_subkey(); - if (subkey.IsHasCertificationCapability()) return; + if (subkey.IsHasCertCap()) return; export_subkey_act_->setDisabled(!subkey.IsSecretKey()); edit_subkey_act_->setDisabled(!subkey.IsSecretKey()); diff --git a/src/ui/dialog/keypair_details/KeyPairSubkeyTab.h b/src/ui/dialog/keypair_details/KeyPairSubkeyTab.h index 9c8daeb9..b4aa9a00 100644 --- a/src/ui/dialog/keypair_details/KeyPairSubkeyTab.h +++ b/src/ui/dialog/keypair_details/KeyPairSubkeyTab.h @@ -68,9 +68,9 @@ class KeyPairSubkeyTab : public QWidget { const GpgSubKey& get_selected_subkey(); int current_gpg_context_channel_; - GpgKey key_; ///< - QTableWidget* subkey_list_{}; ///< - std::vector<GpgSubKey> buffered_subkeys_; ///< + GpgKey key_; ///< + QTableWidget* subkey_list_{}; ///< + QContainer<GpgSubKey> buffered_subkeys_; ///< QGroupBox* list_box_; ///< QGroupBox* detail_box_; ///< diff --git a/src/ui/dialog/keypair_details/KeyPairUIDTab.cpp b/src/ui/dialog/keypair_details/KeyPairUIDTab.cpp index 9fc13690..1d1231c7 100644 --- a/src/ui/dialog/keypair_details/KeyPairUIDTab.cpp +++ b/src/ui/dialog/keypair_details/KeyPairUIDTab.cpp @@ -408,12 +408,12 @@ void KeyPairUIDTab::slot_set_primary_uid() { } } -auto KeyPairUIDTab::get_sign_selected() -> SignIdArgsListPtr { - auto signatures = std::make_unique<SignIdArgsList>(); +auto KeyPairUIDTab::get_sign_selected() -> SignIdArgsList { + auto signatures = SignIdArgsList{}; for (int i = 0; i < sig_list_->rowCount(); i++) { if (sig_list_->item(i, 0)->isSelected()) { auto& sign = buffered_signatures_[i]; - signatures->push_back({sign.GetKeyID(), sign.GetUID()}); + signatures.push_back({sign.GetKeyID(), sign.GetUID()}); } } return signatures; @@ -476,7 +476,7 @@ void KeyPairUIDTab::create_sign_popup_menu() { void KeyPairUIDTab::slot_del_sign() { auto selected_signs = get_sign_selected(); - if (selected_signs->empty()) { + if (selected_signs.empty()) { QMessageBox::information( nullptr, tr("Invalid Operation"), tr("Please select one Key Signature before doing this operation.")); @@ -484,7 +484,7 @@ void KeyPairUIDTab::slot_del_sign() { } if (!GpgKeyGetter::GetInstance(current_gpg_context_channel_) - .GetKey(selected_signs->front().first) + .GetKey(selected_signs.front().first) .IsGood()) { QMessageBox::critical( nullptr, tr("Invalid Operation"), @@ -495,7 +495,7 @@ void KeyPairUIDTab::slot_del_sign() { QString keynames; - keynames.append(selected_signs->front().second); + keynames.append(selected_signs.front().second); keynames.append("<br/>"); int ret = QMessageBox::warning(this, tr("Deleting Key Signature"), @@ -514,6 +514,7 @@ void KeyPairUIDTab::slot_del_sign() { } } } + void KeyPairUIDTab::slot_refresh_key() { // refresh the key GpgKey refreshed_key = GpgKeyGetter::GetInstance(current_gpg_context_channel_) diff --git a/src/ui/dialog/keypair_details/KeyPairUIDTab.h b/src/ui/dialog/keypair_details/KeyPairUIDTab.h index d97ea2d8..3f98e54b 100644 --- a/src/ui/dialog/keypair_details/KeyPairUIDTab.h +++ b/src/ui/dialog/keypair_details/KeyPairUIDTab.h @@ -139,13 +139,13 @@ class KeyPairUIDTab : public QWidget { private: int current_gpg_context_channel_; GpgKey m_key_; - QTableWidget* uid_list_{}; ///< - QTableWidget* sig_list_{}; ///< - QTabWidget* tofu_tabs_{}; ///< - QMenu* uid_popup_menu_{}; ///< - QMenu* sign_popup_menu_{}; ///< - std::vector<GpgUID> buffered_uids_; ///< - std::vector<GpgKeySignature> buffered_signatures_; ///< + QTableWidget* uid_list_{}; ///< + QTableWidget* sig_list_{}; ///< + QTabWidget* tofu_tabs_{}; ///< + QMenu* uid_popup_menu_{}; ///< + QMenu* sign_popup_menu_{}; ///< + QContainer<GpgUID> buffered_uids_; ///< + QContainer<GpgKeySignature> buffered_signatures_; ///< QAction* set_primary_uid_act_; QAction* sign_uid_act_; @@ -181,7 +181,7 @@ class KeyPairUIDTab : public QWidget { * * @return SignIdArgsListPtr */ - auto get_sign_selected() -> SignIdArgsListPtr; + auto get_sign_selected() -> SignIdArgsList; /** * @brief Get the sign selected object diff --git a/src/ui/dialog/keypair_details/KeySetExpireDateDialog.cpp b/src/ui/dialog/keypair_details/KeySetExpireDateDialog.cpp index d621e261..2f86b603 100644 --- a/src/ui/dialog/keypair_details/KeySetExpireDateDialog.cpp +++ b/src/ui/dialog/keypair_details/KeySetExpireDateDialog.cpp @@ -95,20 +95,9 @@ void KeySetExpireDateDialog::slot_confirm() { void KeySetExpireDateDialog::init() { ui_->setupUi(this); - auto settings = - GpgFrontend::GlobalSettingStation::GetInstance().GetSettings(); - - bool longer_expiration_date = - settings.value("basic/longer_expiration_date").toBool(); - - auto max_date_time = - longer_expiration_date - ? QDateTime::currentDateTime().toLocalTime().addYears(30) - : QDateTime::currentDateTime().toLocalTime().addYears(2); + auto settings = GpgFrontend::GetSettings(); auto min_date_time = QDateTime::currentDateTime().addDays(7); - - ui_->dateEdit->setMaximumDateTime(max_date_time); ui_->dateEdit->setMinimumDateTime(min_date_time); // set default date time to expire date time @@ -133,10 +122,6 @@ void KeySetExpireDateDialog::init() { } ui_->titleLabel->setText(tr("Modified Expiration Date (Local Time)")); - ui_->label->setText(tr( - "Tips: For the sake of security, the key is valid for up to two years. " - "If you are an expert user, please unlock it for a longer time in the " - "settings.")); ui_->noExpirationCheckBox->setText(tr("No Expiration")); this->setWindowTitle(tr("Modified Expiration Date")); this->setAttribute(Qt::WA_DeleteOnClose); diff --git a/src/ui/dialog/keypair_details/KeyUIDSignDialog.cpp b/src/ui/dialog/keypair_details/KeyUIDSignDialog.cpp index e079e683..4b9d4726 100644 --- a/src/ui/dialog/keypair_details/KeyUIDSignDialog.cpp +++ b/src/ui/dialog/keypair_details/KeyUIDSignDialog.cpp @@ -52,7 +52,7 @@ KeyUIDSignDialog::KeyUIDSignDialog(int channel, const GpgKey& key, m_key_list_->AddListGroupTab( tr("Signers"), "signers", GpgKeyTableDisplayMode::kPRIVATE_KEY, [key_id](const GpgKey& key) -> bool { - return !(key.IsDisabled() || !key.IsHasCertificationCapability() || + return !(key.IsDisabled() || !key.IsHasCertCap() || !key.IsHasMasterKey() || key.IsExpired() || key.IsRevoked() || key_id == key.GetId()); }); @@ -108,14 +108,14 @@ void KeyUIDSignDialog::slot_sign_key(bool clicked) { auto key_ids = m_key_list_->GetChecked(); auto keys = GpgKeyGetter::GetInstance(current_gpg_context_channel_).GetKeys(key_ids); - assert(std::all_of(keys->begin(), keys->end(), + assert(std::all_of(keys.begin(), keys.end(), [](const auto& key) { return key.IsGood(); })); auto expires = std::make_unique<QDateTime>(expires_edit_->dateTime()); // Sign For mKey if (!GpgKeyManager::GetInstance(current_gpg_context_channel_) - .SignKey(m_key_, *keys, m_uid_, expires)) { + .SignKey(m_key_, keys, m_uid_, expires)) { QMessageBox::critical( nullptr, tr("Unsuccessful Operation"), tr("Signature operation failed for UID %1").arg(m_uid_)); diff --git a/src/ui/dialog/settings/SettingsAppearance.cpp b/src/ui/dialog/settings/SettingsAppearance.cpp index d2648498..2c675251 100644 --- a/src/ui/dialog/settings/SettingsAppearance.cpp +++ b/src/ui/dialog/settings/SettingsAppearance.cpp @@ -135,7 +135,7 @@ void AppearanceTab::SetSettings() { ui_->themeComboBox->addItem(s.toLower()); } - auto settings = GlobalSettingStation::GetInstance().GetSettings(); + auto settings = GetSettings(); auto theme = settings.value("appearance/theme").toString(); auto target_theme_index = ui_->themeComboBox->findText(theme); @@ -150,6 +150,19 @@ void AppearanceTab::SetSettings() { } else { ui_->themeComboBox->setCurrentIndex(target_theme_index); } + + ui_->encrCheckBox->setChecked( + (appearance.tool_bar_crypto_operas_type & GpgOperation::kENCRYPT) != 0); + ui_->decrCheckBox->setChecked( + (appearance.tool_bar_crypto_operas_type & GpgOperation::kDECRYPT) != 0); + ui_->signCheckBox->setChecked( + (appearance.tool_bar_crypto_operas_type & GpgOperation::kSIGN) != 0); + ui_->verifyCheckBox->setChecked( + (appearance.tool_bar_crypto_operas_type & GpgOperation::kVERIFY) != 0); + ui_->encrSignCheckBox->setChecked((appearance.tool_bar_crypto_operas_type & + GpgOperation::kENCRYPT_SIGN) != 0); + ui_->decrVerifyCheckBox->setChecked((appearance.tool_bar_crypto_operas_type & + GpgOperation::kDECRYPT_VERIFY) != 0); } void AppearanceTab::ApplySettings() { @@ -195,9 +208,23 @@ void AppearanceTab::ApplySettings() { appearance.text_editor_font_size = ui_->fontSizeTextEditorLabelSpinBox->value(); + appearance.tool_bar_crypto_operas_type = 0; + appearance.tool_bar_crypto_operas_type |= + ui_->encrCheckBox->isChecked() ? kENCRYPT : kNONE; + appearance.tool_bar_crypto_operas_type |= + ui_->decrCheckBox->isChecked() ? kDECRYPT : kNONE; + appearance.tool_bar_crypto_operas_type |= + ui_->signCheckBox->isChecked() ? kSIGN : kNONE; + appearance.tool_bar_crypto_operas_type |= + ui_->verifyCheckBox->isChecked() ? kVERIFY : kNONE; + appearance.tool_bar_crypto_operas_type |= + ui_->encrSignCheckBox->isChecked() ? kENCRYPT_SIGN : kNONE; + appearance.tool_bar_crypto_operas_type |= + ui_->decrVerifyCheckBox->isChecked() ? kDECRYPT_VERIFY : kNONE; + general_settings_state.Store(appearance.ToJson()); - auto settings = GlobalSettingStation::GetInstance().GetSettings(); + auto settings = GetSettings(); settings.setValue("appearance/theme", ui_->themeComboBox->currentText()); } diff --git a/src/ui/dialog/settings/SettingsGeneral.cpp b/src/ui/dialog/settings/SettingsGeneral.cpp index 73599729..73d8bccd 100644 --- a/src/ui/dialog/settings/SettingsGeneral.cpp +++ b/src/ui/dialog/settings/SettingsGeneral.cpp @@ -48,8 +48,6 @@ GeneralTab::GeneralTab(QWidget* parent) "crash.")); ui_->importConfirmationBox->setTitle(tr("Operation")); - ui_->longerKeyExpirationDateCheckBox->setText( - tr("Enable to use longer key expiration date.")); ui_->importConfirmationCheckBox->setText( tr("Import files dropped on the Key List without confirmation.")); ui_->disableLoadingModulesCheckBox->setText( @@ -109,7 +107,7 @@ GeneralTab::GeneralTab(QWidget* parent) } void GeneralTab::SetSettings() { - auto settings = GlobalSettingStation::GetInstance().GetSettings(); + auto settings = GetSettings(); auto clear_gpg_password_cache = settings.value("basic/clear_gpg_password_cache", true).toBool(); @@ -121,11 +119,6 @@ void GeneralTab::SetSettings() { ui_->restoreTextEditorPageCheckBox->setCheckState( restore_text_editor_page ? Qt::Checked : Qt::Unchecked); - auto longer_expiration_date = - settings.value("basic/longer_expiration_date", false).toBool(); - ui_->longerKeyExpirationDateCheckBox->setCheckState( - longer_expiration_date ? Qt::Checked : Qt::Unchecked); - auto confirm_import_keys = settings.value("basic/confirm_import_keys", false).toBool(); ui_->importConfirmationCheckBox->setCheckState( @@ -147,11 +140,8 @@ void GeneralTab::SetSettings() { } void GeneralTab::ApplySettings() { - auto settings = - GpgFrontend::GlobalSettingStation::GetInstance().GetSettings(); + auto settings = GpgFrontend::GetSettings(); - settings.setValue("basic/longer_expiration_date", - ui_->longerKeyExpirationDateCheckBox->isChecked()); settings.setValue("basic/clear_gpg_password_cache", ui_->clearGpgPasswordCacheCheckBox->isChecked()); settings.setValue("basic/restore_text_editor_page", diff --git a/src/ui/dialog/settings/SettingsGeneral.h b/src/ui/dialog/settings/SettingsGeneral.h index 6dc35d58..2bd717d0 100644 --- a/src/ui/dialog/settings/SettingsGeneral.h +++ b/src/ui/dialog/settings/SettingsGeneral.h @@ -28,6 +28,7 @@ #pragma once +#include "core/typedef/CoreTypedef.h" #include "ui/GpgFrontendUI.h" class Ui_GeneralSettings; @@ -81,7 +82,7 @@ class GeneralTab : public QWidget { private: std::shared_ptr<Ui_GeneralSettings> ui_; ///< QHash<QString, QString> lang_; ///< - std::vector<QString> key_ids_list_; ///< + QStringList key_ids_list_; ///< KeyList* m_key_list_{}; ///< }; } // namespace GpgFrontend::UI diff --git a/src/ui/dialog/settings/SettingsKeyServer.cpp b/src/ui/dialog/settings/SettingsKeyServer.cpp index 38256c8e..e73363d6 100644 --- a/src/ui/dialog/settings/SettingsKeyServer.cpp +++ b/src/ui/dialog/settings/SettingsKeyServer.cpp @@ -233,8 +233,7 @@ void KeyserverTab::slot_test_listed_key_server() { task, &GpgFrontend::UI::ListedKeyServerTestTask::SignalKeyServerListTestResult, this, - [=](std::vector<ListedKeyServerTestTask::KeyServerTestResultType> - result) { + [=](QContainer<ListedKeyServerTestTask::KeyServerTestResultType> result) { const size_t row_size = ui_->keyServerListTable->rowCount(); if (result.size() != row_size) return; ui_->keyServerListTable->blockSignals(true); diff --git a/src/ui/dialog/settings/SettingsNetwork.cpp b/src/ui/dialog/settings/SettingsNetwork.cpp index 8a95c177..66f3abb1 100644 --- a/src/ui/dialog/settings/SettingsNetwork.cpp +++ b/src/ui/dialog/settings/SettingsNetwork.cpp @@ -101,7 +101,7 @@ GpgFrontend::UI::NetworkTab::NetworkTab(QWidget *parent) } void GpgFrontend::UI::NetworkTab::SetSettings() { - auto settings = GlobalSettingStation::GetInstance().GetSettings(); + auto settings = GetSettings(); auto proxy_host = settings.value("proxy/proxy_host").toString(); ui_->proxyServerAddressEdit->setText(proxy_host); @@ -146,8 +146,7 @@ void GpgFrontend::UI::NetworkTab::SetSettings() { } void GpgFrontend::UI::NetworkTab::ApplySettings() { - auto settings = - GpgFrontend::GlobalSettingStation::GetInstance().GetSettings(); + auto settings = GpgFrontend::GetSettings(); settings.setValue("proxy/proxy_host", ui_->proxyServerAddressEdit->text()); settings.setValue("proxy/username", ui_->usernameEdit->text()); diff --git a/src/ui/function/GpgOperaHelper.cpp b/src/ui/function/GpgOperaHelper.cpp new file mode 100644 index 00000000..4bcd9960 --- /dev/null +++ b/src/ui/function/GpgOperaHelper.cpp @@ -0,0 +1,557 @@ +/** + * Copyright (C) 2021-2024 Saturneric <[email protected]> + * + * This file is part of GpgFrontend. + * + * GpgFrontend is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GpgFrontend is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GpgFrontend. If not, see <https://www.gnu.org/licenses/>. + * + * The initial version of the source code is inherited from + * the gpg4usb project, which is under GPL-3.0-or-later. + * + * All the source code of GpgFrontend was modified and released by + * Saturneric <[email protected]> starting on May 12, 2021. + * + * SPDX-License-Identifier: GPL-3.0-or-later + * + */ + +#include "GpgOperaHelper.h" + +#include "core/GpgModel.h" +#include "core/function/gpg/GpgFileOpera.h" +#include "core/function/result_analyse/GpgDecryptResultAnalyse.h" +#include "core/function/result_analyse/GpgEncryptResultAnalyse.h" +#include "core/function/result_analyse/GpgSignResultAnalyse.h" +#include "core/function/result_analyse/GpgVerifyResultAnalyse.h" +#include "core/model/GpgDecryptResult.h" +#include "core/model/GpgEncryptResult.h" +#include "core/model/GpgSignResult.h" +#include "core/utils/GpgUtils.h" +#include "ui/dialog/WaitingDialog.h" + +namespace GpgFrontend::UI { + +void GpgOperaHelper::BuildOperas(QSharedPointer<GpgOperaContextBasement>& base, + int category, int channel, + const GpgOperaFactory& f) { + assert(base != nullptr); + + auto context = GetGpgOperaContextFromBasement(base, category); + if (context == nullptr) return; + + if (!context->paths.isEmpty()) { + assert(context->paths.size() == context->o_paths.size()); + + for (int i = 0; i < context->paths.size(); i++) { + context->base->operas.push_back(f(context, channel, i)); + } + } + + if (!context->buffers.isEmpty()) { + for (int i = 0; i < context->buffers.size(); i++) { + context->base->operas.push_back(f(context, channel, i)); + } + } +} + +template <typename AnalyseType> +void HandleExtraLogicIfNeeded(const QSharedPointer<GpgOperaContext>& context, + const AnalyseType& analyse) {} + +template <> +void HandleExtraLogicIfNeeded<GpgVerifyResultAnalyse>( + const QSharedPointer<GpgOperaContext>& context, + const GpgVerifyResultAnalyse& analyse) { + context->base->unknown_fprs.append(analyse.GetUnknownSignatures()); +} + +template <typename ResultType, typename AnalyseType, typename OperaFunc> +auto GpgOperaHelper::BuildSimpleGpgFileOperasHelper( + QSharedPointer<GpgOperaContext>& context, int channel, int index, + OperaFunc opera_func) -> OperaWaitingCb { + const auto& path = context->paths[index]; + const auto& o_path = context->o_paths[index]; + auto& opera_results = context->base->opera_results; + + return [=, &opera_results](const OperaWaitingHd& op_hd) { + opera_func( + path, o_path, + [=, &opera_results](GpgError err, const DataObjectPtr& data_obj) { + // stop waiting + op_hd(); + + if (CheckGpgError(err) == GPG_ERR_USER_1 || data_obj == nullptr || + !data_obj->Check<ResultType>()) { + opera_results.append( + {-1, "# " + tr("Critical Error"), QFileInfo(path).fileName()}); + return; + } + + auto result = ExtractParams<ResultType>(data_obj, 0); + auto result_analyse = AnalyseType(channel, err, result); + result_analyse.Analyse(); + + HandleExtraLogicIfNeeded(context, result_analyse); + + opera_results.append( + {result_analyse.GetStatus(), result_analyse.GetResultReport(), + QFileInfo(path.isEmpty() ? o_path : path).fileName()}); + }); + }; +} + +template <typename ResultTypeA, typename AnalyseTypeA, typename ResultTypeB, + typename AnalyseTypeB, typename OperaFunc> +auto GpgOperaHelper::BuildComplexGpgFileOperasHelper( + QSharedPointer<GpgOperaContext>& context, int channel, int index, + OperaFunc opera_func) -> OperaWaitingCb { + const auto& path = context->paths[index]; + const auto& o_path = context->o_paths[index]; + auto& opera_results = context->base->opera_results; + + return [=, &opera_results](const OperaWaitingHd& op_hd) { + opera_func( + path, o_path, + [=, &opera_results](GpgError err, const DataObjectPtr& data_obj) { + // stop waiting + op_hd(); + + if (CheckGpgError(err) == GPG_ERR_USER_1 || data_obj == nullptr || + !data_obj->Check<ResultTypeA, ResultTypeB>()) { + opera_results.append( + {-1, "# " + tr("Critical Error"), QFileInfo(path).fileName()}); + return; + } + + auto result_1 = ExtractParams<ResultTypeA>(data_obj, 0); + auto result_2 = ExtractParams<ResultTypeB>(data_obj, 1); + + auto result_analyse_1 = AnalyseTypeA(channel, err, result_1); + result_analyse_1.Analyse(); + + HandleExtraLogicIfNeeded(context, result_analyse_1); + + auto result_analyse_2 = AnalyseTypeB(channel, err, result_2); + result_analyse_2.Analyse(); + + HandleExtraLogicIfNeeded(context, result_analyse_2); + + opera_results.append( + {std::min(result_analyse_1.GetStatus(), + result_analyse_2.GetStatus()), + result_analyse_1.GetResultReport() + + result_analyse_2.GetResultReport(), + QFileInfo(path.isEmpty() ? o_path : path).fileName()}); + }); + }; +} + +template <typename ResultType, typename AnalyseType, typename OperaFunc> +auto GpgOperaHelper::BuildSimpleGpgOperasHelper( + QSharedPointer<GpgOperaContext>& context, int channel, int index, + OperaFunc opera_func) -> OperaWaitingCb { + const auto& buffer = context->buffers[index]; + auto& opera_results = context->base->opera_results; + + return [=, &opera_results](const OperaWaitingHd& op_hd) { + opera_func(buffer, [=, &opera_results](GpgError err, + const DataObjectPtr& data_obj) { + // stop waiting + op_hd(); + + if (CheckGpgError(err) == GPG_ERR_USER_1 || data_obj == nullptr || + !data_obj->Check<ResultType, GFBuffer>()) { + opera_results.append({-1, "# " + tr("Critical Error"), {}}); + return; + } + + auto result = ExtractParams<ResultType>(data_obj, 0); + + auto result_analyse = AnalyseType(channel, err, result); + result_analyse.Analyse(); + + HandleExtraLogicIfNeeded(context, result_analyse); + + auto opera_result = GpgOperaResult{ + result_analyse.GetStatus(), result_analyse.GetResultReport(), {}}; + + auto o_buffer = ExtractParams<GFBuffer>(data_obj, 1); + opera_result.o_buffer = o_buffer; + + opera_results.append(opera_result); + }); + }; +} + +template <typename ResultTypeA, typename AnalyseTypeA, typename ResultTypeB, + typename AnalyseTypeB, typename OperaFunc> +auto GpgOperaHelper::BuildComplexGpgOperasHelper( + QSharedPointer<GpgOperaContext>& context, int channel, int index, + OperaFunc opera_func) -> OperaWaitingCb { + const auto& buffer = context->buffers[index]; + auto& opera_results = context->base->opera_results; + + return [=, &opera_results](const OperaWaitingHd& op_hd) { + opera_func(buffer, [=, &opera_results](GpgError err, + const DataObjectPtr& data_obj) { + // stop waiting + op_hd(); + + if (CheckGpgError(err) == GPG_ERR_USER_1 || data_obj == nullptr || + !data_obj->Check<ResultTypeA, ResultTypeB, GFBuffer>()) { + opera_results.append({-1, "# " + tr("Critical Error"), {}}); + return; + } + + auto result_1 = ExtractParams<ResultTypeA>(data_obj, 0); + auto result_2 = ExtractParams<ResultTypeB>(data_obj, 1); + + auto result_analyse_1 = AnalyseTypeA(channel, err, result_1); + result_analyse_1.Analyse(); + + HandleExtraLogicIfNeeded(context, result_analyse_1); + + auto result_analyse_2 = AnalyseTypeB(channel, err, result_2); + result_analyse_2.Analyse(); + + HandleExtraLogicIfNeeded(context, result_analyse_2); + + auto opera_result = GpgOperaResult{ + std::min(result_analyse_1.GetStatus(), result_analyse_2.GetStatus()), + result_analyse_1.GetResultReport() + + result_analyse_2.GetResultReport(), + {}}; + + auto o_buffer = ExtractParams<GFBuffer>(data_obj, 2); + opera_result.o_buffer = o_buffer; + + opera_results.append(opera_result); + }); + }; +} + +template <typename EncryptFuncSymmetric, typename EncryptFuncKeys> +auto BuildOperasFileEncryptHelper( + QSharedPointer<GpgOperaContext>& context, int channel, int index, + EncryptFuncSymmetric encrypt_symmetric, + EncryptFuncKeys encrypt_with_keys) -> OperaWaitingCb { + if (context->base->keys.isEmpty()) { + return GpgOperaHelper::BuildSimpleGpgFileOperasHelper< + GpgEncryptResult, GpgEncryptResultAnalyse>( + context, channel, index, + [=](const QString& path, const QString& o_path, const auto& callback) { + encrypt_symmetric(path, o_path, callback); + }); + } + + return GpgOperaHelper::BuildSimpleGpgFileOperasHelper< + GpgEncryptResult, GpgEncryptResultAnalyse>( + context, channel, index, + [=](const QString& path, const QString& o_path, const auto& callback) { + encrypt_with_keys(path, o_path, callback); + }); +} + +template <typename EncryptFuncSymmetric, typename EncryptFuncKeys> +auto BuildOperasEncryptHelper( + QSharedPointer<GpgOperaContext>& context, int channel, int index, + EncryptFuncSymmetric encrypt_symmetric, + EncryptFuncKeys encrypt_with_keys) -> OperaWaitingCb { + if (context->base->keys.isEmpty()) { + return GpgOperaHelper::BuildSimpleGpgOperasHelper<GpgEncryptResult, + GpgEncryptResultAnalyse>( + context, channel, index, + [=](const GFBuffer& buffer, const auto& callback) { + encrypt_symmetric(buffer, callback); + }); + } + + return GpgOperaHelper::BuildSimpleGpgOperasHelper<GpgEncryptResult, + GpgEncryptResultAnalyse>( + context, channel, index, + [=](const GFBuffer& buffer, const auto& callback) { + encrypt_with_keys(buffer, callback); + }); +} + +auto GpgOperaHelper::BuildOperasFileEncrypt( + QSharedPointer<GpgOperaContext>& context, int channel, + int index) -> OperaWaitingCb { + return BuildOperasFileEncryptHelper( + context, channel, index, + [context, channel](const QString& path, const QString& o_path, + const auto& callback) { + GpgFileOpera::GetInstance(channel).EncryptFileSymmetric( + path, context->base->ascii, o_path, callback); + }, + [context, channel](const QString& path, const QString& o_path, + const auto& callback) { + GpgFileOpera::GetInstance(channel).EncryptFile( + context->base->keys, path, context->base->ascii, o_path, callback); + }); +} + +auto GpgOperaHelper::BuildOperasDirectoryEncrypt( + QSharedPointer<GpgOperaContext>& context, int channel, + int index) -> OperaWaitingCb { + return BuildOperasFileEncryptHelper( + context, channel, index, + [context, channel](const QString& path, const QString& o_path, + const auto& callback) { + GpgFileOpera::GetInstance(channel).EncryptDirectorySymmetric( + path, context->base->ascii, o_path, callback); + }, + [context, channel](const QString& path, const QString& o_path, + const auto& callback) { + GpgFileOpera::GetInstance(channel).EncryptDirectory( + context->base->keys, path, context->base->ascii, o_path, callback); + }); +} + +auto GpgOperaHelper::BuildOperasFileDecrypt( + QSharedPointer<GpgOperaContext>& context, int channel, + int index) -> OperaWaitingCb { + return BuildSimpleGpgFileOperasHelper<GpgDecryptResult, + GpgDecryptResultAnalyse>( + context, channel, index, + [channel](const QString& path, const QString& o_path, + const auto& callback) { + GpgFileOpera::GetInstance(channel).DecryptFile(path, o_path, callback); + }); +} + +auto GpgOperaHelper::BuildOperasArchiveDecrypt( + QSharedPointer<GpgOperaContext>& context, int channel, + int index) -> OperaWaitingCb { + return BuildSimpleGpgFileOperasHelper<GpgDecryptResult, + GpgDecryptResultAnalyse>( + context, channel, index, + [channel](const QString& path, const QString& o_path, + const auto& callback) { + GpgFileOpera::GetInstance(channel).DecryptArchive(path, o_path, + callback); + }); +} + +auto GpgOperaHelper::BuildOperasFileSign( + QSharedPointer<GpgOperaContext>& context, int channel, + int index) -> OperaWaitingCb { + return BuildSimpleGpgFileOperasHelper<GpgSignResult, GpgSignResultAnalyse>( + context, channel, index, + [channel, context](const QString& path, const QString& o_path, + const auto& callback) { + GpgFileOpera::GetInstance(channel).SignFile( + context->base->keys, path, context->base->ascii, o_path, callback); + }); +} + +auto GpgOperaHelper::BuildOperasFileVerify( + QSharedPointer<GpgOperaContext>& context, int channel, + int index) -> OperaWaitingCb { + return BuildSimpleGpgFileOperasHelper<GpgVerifyResult, + GpgVerifyResultAnalyse>( + context, channel, index, + [channel](const QString& path, const QString& o_path, + const auto& callback) { + GpgFileOpera::GetInstance(channel).VerifyFile(o_path, path, callback); + }); +} + +auto GpgOperaHelper::BuildOperasFileEncryptSign( + QSharedPointer<GpgOperaContext>& context, int channel, + int index) -> OperaWaitingCb { + return BuildComplexGpgFileOperasHelper<GpgEncryptResult, + GpgEncryptResultAnalyse, GpgSignResult, + GpgSignResultAnalyse>( + context, channel, index, + [channel, context](const QString& path, const QString& o_path, + const auto& callback) { + GpgFileOpera::GetInstance(channel).EncryptSignFile( + context->base->keys, context->base->singer_keys, path, + context->base->ascii, o_path, callback); + }); +} + +auto GpgOperaHelper::BuildOperasDirectoryEncryptSign( + QSharedPointer<GpgOperaContext>& context, int channel, + int index) -> OperaWaitingCb { + return BuildComplexGpgFileOperasHelper<GpgEncryptResult, + GpgEncryptResultAnalyse, GpgSignResult, + GpgSignResultAnalyse>( + context, channel, index, + [channel, context](const QString& path, const QString& o_path, + const auto& callback) { + GpgFileOpera::GetInstance(channel).EncryptSignDirectory( + context->base->keys, context->base->singer_keys, path, + context->base->ascii, o_path, callback); + }); +} + +auto GpgOperaHelper::BuildOperasFileDecryptVerify( + QSharedPointer<GpgOperaContext>& context, int channel, + int index) -> OperaWaitingCb { + return BuildComplexGpgFileOperasHelper< + GpgDecryptResult, GpgDecryptResultAnalyse, GpgVerifyResult, + GpgVerifyResultAnalyse>( + context, channel, index, + [channel](const QString& path, const QString& o_path, + const auto& callback) { + GpgFileOpera::GetInstance(channel).DecryptVerifyFile(path, o_path, + callback); + }); +} + +auto GpgOperaHelper::BuildOperasArchiveDecryptVerify( + QSharedPointer<GpgOperaContext>& context, int channel, + int index) -> OperaWaitingCb { + return BuildComplexGpgFileOperasHelper< + GpgDecryptResult, GpgDecryptResultAnalyse, GpgVerifyResult, + GpgVerifyResultAnalyse>( + context, channel, index, + [channel](const QString& path, const QString& o_path, + const auto& callback) { + GpgFileOpera::GetInstance(channel).DecryptVerifyArchive(path, o_path, + callback); + }); +} + +void GpgOperaHelper::WaitForMultipleOperas( + QWidget* parent, const QString& title, + const QContainer<OperaWaitingCb>& operas) { + if (operas.isEmpty()) return; + + QEventLoop looper; + QPointer<WaitingDialog> const dialog = + new WaitingDialog(title, operas.size() > 1, parent); + connect(dialog, &QDialog::finished, &looper, &QEventLoop::quit); + connect(dialog, &QDialog::finished, dialog, &QDialog::deleteLater); + dialog->show(); + + std::atomic<int> remaining_tasks(static_cast<int>(operas.size())); + const auto tasks_count = operas.size(); + + for (const auto& opera : operas) { + QTimer::singleShot(64, parent, [=, &remaining_tasks]() { + opera([dialog, &remaining_tasks, tasks_count]() { + if (dialog == nullptr) return; + + const auto pg_value = + static_cast<double>(tasks_count - remaining_tasks + 1) * 100.0 / + static_cast<double>(tasks_count); + emit dialog->SignalUpdateValue(static_cast<int>(pg_value)); + QCoreApplication::processEvents(); + + if (--remaining_tasks == 0) { + dialog->close(); + dialog->accept(); + } + }); + }); + } + + looper.exec(); +} + +auto GpgOperaHelper::BuildOperasEncrypt( + QSharedPointer<GpgOperaContext>& context, int channel, + int index) -> OperaWaitingCb { + return BuildOperasEncryptHelper( + context, channel, index, + [context, channel](const GFBuffer& buffer, const auto& callback) { + GpgBasicOperator::GetInstance(channel).EncryptSymmetric( + buffer, context->base->ascii, callback); + }, + [context, channel](const GFBuffer& buffer, const auto& callback) { + GpgBasicOperator::GetInstance(channel).Encrypt( + context->base->keys, buffer, context->base->ascii, callback); + }); +} + +auto GpgOperaHelper::BuildOperasDecrypt( + QSharedPointer<GpgOperaContext>& context, int channel, + int index) -> OperaWaitingCb { + return BuildSimpleGpgOperasHelper<GpgDecryptResult, GpgDecryptResultAnalyse>( + context, channel, index, + [channel](const GFBuffer& buffer, const auto& callback) { + GpgBasicOperator::GetInstance(channel).Decrypt(buffer, callback); + }); +} + +auto GpgOperaHelper::BuildOperasSign(QSharedPointer<GpgOperaContext>& context, + int channel, int index) -> OperaWaitingCb { + return BuildSimpleGpgOperasHelper<GpgSignResult, GpgSignResultAnalyse>( + context, channel, index, + [channel, context](const GFBuffer& buffer, const auto& callback) { + GpgBasicOperator::GetInstance(channel).Sign( + context->base->keys, buffer, GPGME_SIG_MODE_CLEAR, + context->base->ascii, callback); + }); +} + +auto GpgOperaHelper::BuildOperasVerify(QSharedPointer<GpgOperaContext>& context, + int channel, + int index) -> OperaWaitingCb { + return BuildSimpleGpgOperasHelper<GpgVerifyResult, GpgVerifyResultAnalyse>( + context, channel, index, + [channel, context](const GFBuffer& buffer, const auto& callback) { + GpgBasicOperator::GetInstance(channel).Verify(buffer, GFBuffer(), + callback); + }); +} + +auto GpgOperaHelper::BuildOperasEncryptSign( + QSharedPointer<GpgOperaContext>& context, int channel, + int index) -> OperaWaitingCb { + return BuildComplexGpgOperasHelper<GpgEncryptResult, GpgEncryptResultAnalyse, + GpgSignResult, GpgSignResultAnalyse>( + context, channel, index, + [channel, context](const GFBuffer& buffer, const auto& callback) { + GpgBasicOperator::GetInstance(channel).EncryptSign( + context->base->keys, context->base->singer_keys, buffer, + context->base->ascii, callback); + }); +} + +auto GpgOperaHelper::BuildOperasDecryptVerify( + QSharedPointer<GpgOperaContext>& context, int channel, + int index) -> OperaWaitingCb { + return BuildComplexGpgOperasHelper<GpgDecryptResult, GpgDecryptResultAnalyse, + GpgVerifyResult, GpgVerifyResultAnalyse>( + context, channel, index, + [channel](const GFBuffer& buffer, const auto& callback) { + GpgBasicOperator::GetInstance(channel).DecryptVerify(buffer, callback); + }); +} + +void GpgOperaHelper::WaitForOpera(QWidget* parent, const QString& title, + const OperaWaitingCb& opera) { + QEventLoop looper; + QPointer<WaitingDialog> const dialog = + new WaitingDialog(title, false, parent); + connect(dialog, &QDialog::finished, &looper, &QEventLoop::quit); + connect(dialog, &QDialog::finished, dialog, &QDialog::deleteLater); + dialog->show(); + + QTimer::singleShot(64, parent, [=]() { + opera([dialog]() { + if (dialog != nullptr) { + dialog->close(); + dialog->accept(); + } + }); + }); + + looper.exec(); +} +} // namespace GpgFrontend::UI diff --git a/src/ui/function/GpgOperaHelper.h b/src/ui/function/GpgOperaHelper.h new file mode 100644 index 00000000..9d53ab12 --- /dev/null +++ b/src/ui/function/GpgOperaHelper.h @@ -0,0 +1,323 @@ +/** + * Copyright (C) 2021-2024 Saturneric <[email protected]> + * + * This file is part of GpgFrontend. + * + * GpgFrontend is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GpgFrontend is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GpgFrontend. If not, see <https://www.gnu.org/licenses/>. + * + * The initial version of the source code is inherited from + * the gpg4usb project, which is under GPL-3.0-or-later. + * + * All the source code of GpgFrontend was modified and released by + * Saturneric <[email protected]> starting on May 12, 2021. + * + * SPDX-License-Identifier: GPL-3.0-or-later + * + */ + +#pragma once + +#include "GpgFrontendUI.h" +#include "ui/struct/GpgOperaResultContext.h" + +namespace GpgFrontend::UI { + +class GpgOperaHelper : QObject { + Q_OBJECT + public: + using GpgOperaFactory = std::function<OperaWaitingCb( + QSharedPointer<GpgOperaContext>& context, int channel, int index)>; + + /** + * @brief + * + * @tparam ResultType + * @tparam AnalyseType + * @tparam OperaFunc + * @param context + * @param channel + * @param index + * @param opera_func + * @return OperaWaitingCb + */ + template <typename ResultType, typename AnalyseType, typename OperaFunc> + static auto BuildSimpleGpgFileOperasHelper( + QSharedPointer<GpgOperaContext>& context, int channel, int index, + OperaFunc opera_func) -> OperaWaitingCb; + + /** + * @brief + * + * @tparam ResultTypeA + * @tparam AnalyseTypeA + * @tparam ResultTypeB + * @tparam AnalyseTypeB + * @tparam OperaFunc + * @param context + * @param channel + * @param index + * @param opera_func + * @return OperaWaitingCb + */ + template <typename ResultTypeA, typename AnalyseTypeA, typename ResultTypeB, + typename AnalyseTypeB, typename OperaFunc> + static auto BuildComplexGpgFileOperasHelper( + QSharedPointer<GpgOperaContext>& context, int channel, int index, + OperaFunc opera_func) -> OperaWaitingCb; + + /** + * @brief + * + * @tparam ResultType + * @tparam AnalyseType + * @tparam OperaFunc + * @param context + * @param channel + * @param index + * @param opera_func + * @return OperaWaitingCb + */ + template <typename ResultType, typename AnalyseType, typename OperaFunc> + static auto BuildSimpleGpgOperasHelper( + QSharedPointer<GpgOperaContext>& context, int channel, int index, + OperaFunc opera_func) -> OperaWaitingCb; + + /** + * @brief + * + * @tparam ResultTypeA + * @tparam AnalyseTypeA + * @tparam ResultTypeB + * @tparam AnalyseTypeB + * @tparam OperaFunc + * @param context + * @param channel + * @param index + * @param opera_func + * @return OperaWaitingCb + */ + template <typename ResultTypeA, typename AnalyseTypeA, typename ResultTypeB, + typename AnalyseTypeB, typename OperaFunc> + static auto BuildComplexGpgOperasHelper( + QSharedPointer<GpgOperaContext>& context, int channel, int index, + OperaFunc opera_func) -> OperaWaitingCb; + + /** + * @brief + * + * @param base + * @param category + * @param channel + * @param f + */ + static void BuildOperas(QSharedPointer<GpgOperaContextBasement>& base, + int category, int channel, const GpgOperaFactory& f); + + /** + * @brief + * + * @param context + * @param channel + * @param index + * @return OperaWaitingCb + */ + static auto BuildOperasEncrypt(QSharedPointer<GpgOperaContext>& context, + int channel, int index) -> OperaWaitingCb; + + /** + * @brief + * + * @param context + * @param channel + * @param index + * @return OperaWaitingCb + */ + static auto BuildOperasFileEncrypt(QSharedPointer<GpgOperaContext>& context, + int channel, int index) -> OperaWaitingCb; + + /** + * @brief + * + * @param context + * @param channel + * @param index + * @return OperaWaitingCb + */ + static auto BuildOperasDirectoryEncrypt( + QSharedPointer<GpgOperaContext>& context, int channel, + int index) -> OperaWaitingCb; + + /** + * @brief + * + * @param context + * @param channel + * @param index + * @return OperaWaitingCb + */ + static auto BuildOperasDecrypt(QSharedPointer<GpgOperaContext>& context, + int channel, int index) -> OperaWaitingCb; + + /** + * @brief + * + * @param context + */ + static auto BuildOperasFileDecrypt(QSharedPointer<GpgOperaContext>& context, + int channel, int index) -> OperaWaitingCb; + + /** + * @brief + * + * @param context + * @param channel + * @param index + * @return OperaWaitingCb + */ + static auto BuildOperasArchiveDecrypt( + QSharedPointer<GpgOperaContext>& context, int channel, + int index) -> OperaWaitingCb; + + /** + * @brief + * + * @param context + * @param channel + * @param index + * @return OperaWaitingCb + */ + static auto BuildOperasSign(QSharedPointer<GpgOperaContext>& context, + int channel, int index) -> OperaWaitingCb; + + /** + * @brief + * + * @param context + * @return OperaWaitingCb + */ + static auto BuildOperasFileSign(QSharedPointer<GpgOperaContext>& context, + int channel, int index) -> OperaWaitingCb; + + /** + * @brief + * + * @param context + * @param channel + * @param index + * @return OperaWaitingCb + */ + static auto BuildOperasVerify(QSharedPointer<GpgOperaContext>& context, + int channel, int index) -> OperaWaitingCb; + + /** + * @brief + * + * @param context + * @param channel + * @param index + * @return OperaWaitingCb + */ + static auto BuildOperasFileVerify(QSharedPointer<GpgOperaContext>& context, + int channel, int index) -> OperaWaitingCb; + + /** + * @brief + * + * @param context + * @param channel + * @param index + * @return OperaWaitingCb + */ + static auto BuildOperasEncryptSign(QSharedPointer<GpgOperaContext>& context, + int channel, int index) -> OperaWaitingCb; + + /** + * @brief + * + * @param context + * @param channel + * @param index + */ + static auto BuildOperasFileEncryptSign( + QSharedPointer<GpgOperaContext>& context, int channel, + int index) -> OperaWaitingCb; + + /** + * @brief + * + * @param context + * @param channel + * @param index + * @return OperaWaitingCb + */ + static auto BuildOperasDirectoryEncryptSign( + QSharedPointer<GpgOperaContext>& context, int channel, + int index) -> OperaWaitingCb; + + /** + * @brief + * + * @param context + * @param channel + * @param index + * @return OperaWaitingCb + */ + static auto BuildOperasDecryptVerify(QSharedPointer<GpgOperaContext>& context, + int channel, + int index) -> OperaWaitingCb; + + /** + * @brief + * + * @param context + * @param channel + * @param index + * @return OperaWaitingCb + */ + static auto BuildOperasFileDecryptVerify( + QSharedPointer<GpgOperaContext>& context, int channel, + int index) -> OperaWaitingCb; + + /** + * @brief + * + * @param context + * @param channel + * @param index + * @return OperaWaitingCb + */ + static auto BuildOperasArchiveDecryptVerify( + QSharedPointer<GpgOperaContext>& context, int channel, + int index) -> OperaWaitingCb; + + /** + * @brief + * + * @param err + */ + static void WaitForOpera(QWidget* parent, const QString& title, + const OperaWaitingCb& opera); + + /** + * @brief + * + * @param parent + * @param title + * @param operas + */ + static void WaitForMultipleOperas(QWidget* parent, const QString& title, + const QContainer<OperaWaitingCb>& operas); +}; + +} // namespace GpgFrontend::UI
\ No newline at end of file diff --git a/src/ui/function/KeyGenerateHelper.cpp b/src/ui/function/KeyGenerateHelper.cpp new file mode 100644 index 00000000..4cd40dea --- /dev/null +++ b/src/ui/function/KeyGenerateHelper.cpp @@ -0,0 +1,84 @@ +/** + * Copyright (C) 2021-2024 Saturneric <[email protected]> + * + * This file is part of GpgFrontend. + * + * GpgFrontend is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GpgFrontend is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GpgFrontend. If not, see <https://www.gnu.org/licenses/>. + * + * The initial version of the source code is inherited from + * the gpg4usb project, which is under GPL-3.0-or-later. + * + * All the source code of GpgFrontend was modified and released by + * Saturneric <[email protected]> starting on May 12, 2021. + * + * SPDX-License-Identifier: GPL-3.0-or-later + * + */ + +#include "KeyGenerateHelper.h" + +namespace GpgFrontend::UI { + +auto SearchAlgoByName(const QString& name, + const QContainer<KeyAlgo>& algos) -> QContainer<KeyAlgo> { + QContainer<KeyAlgo> res; + + for (const auto& algo : algos) { + if (algo.Name() != name) continue; + res.append(algo); + } + + return res; +} + +auto GetAlgoByNameAndKeyLength(const QString& name, int key_length, + const QContainer<KeyAlgo>& algos) + -> std::tuple<bool, KeyAlgo> { + for (const auto& algo : algos) { + if (algo.Name() != name) continue; + if (algo.KeyLength() != key_length) continue; + return {true, algo}; + } + + return {}; +} + +auto GetAlgoByName(const QString& name, const QContainer<KeyAlgo>& algos) + -> std::tuple<bool, KeyAlgo> { + for (const auto& algo : algos) { + if (algo.Name() != name) continue; + return {true, algo}; + } + + return {}; +} + +void SetKeyLengthComboxBoxByAlgo(QComboBox* combo, + const QContainer<KeyAlgo>& algos) { + combo->clear(); + + QContainer<KeyAlgo> sorted_algos(algos.begin(), algos.end()); + std::sort(sorted_algos.begin(), sorted_algos.end(), + [](const KeyAlgo& a, const KeyAlgo& b) { + return a.KeyLength() < b.KeyLength(); + }); + + QStringList key_lengths; + for (const auto& algo : sorted_algos) { + key_lengths.append(QString::number(algo.KeyLength())); + } + + combo->addItems(key_lengths); +} +} // namespace GpgFrontend::UI
\ No newline at end of file diff --git a/src/ui/function/KeyGenerateHelper.h b/src/ui/function/KeyGenerateHelper.h new file mode 100644 index 00000000..0641dbd8 --- /dev/null +++ b/src/ui/function/KeyGenerateHelper.h @@ -0,0 +1,47 @@ +/** + * Copyright (C) 2021-2024 Saturneric <[email protected]> + * + * This file is part of GpgFrontend. + * + * GpgFrontend is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GpgFrontend is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GpgFrontend. If not, see <https://www.gnu.org/licenses/>. + * + * The initial version of the source code is inherited from + * the gpg4usb project, which is under GPL-3.0-or-later. + * + * All the source code of GpgFrontend was modified and released by + * Saturneric <[email protected]> starting on May 12, 2021. + * + * SPDX-License-Identifier: GPL-3.0-or-later + * + */ + +#pragma once + +#include "core/model/GpgKeyGenerateInfo.h" + +namespace GpgFrontend::UI { + +auto SearchAlgoByName(const QString& name, + const QContainer<KeyAlgo>& algos) -> QContainer<KeyAlgo>; + +auto GetAlgoByNameAndKeyLength(const QString& name, int key_length, + const QContainer<KeyAlgo>& algos) + -> std::tuple<bool, KeyAlgo>; + +auto GetAlgoByName(const QString& name, const QContainer<KeyAlgo>& algos) + -> std::tuple<bool, KeyAlgo>; + +void SetKeyLengthComboxBoxByAlgo(QComboBox* combo, + const QContainer<KeyAlgo>& algos); +} // namespace GpgFrontend::UI diff --git a/src/ui/main_window/KeyMgmt.cpp b/src/ui/main_window/KeyMgmt.cpp index d6530c64..38a5399c 100644 --- a/src/ui/main_window/KeyMgmt.cpp +++ b/src/ui/main_window/KeyMgmt.cpp @@ -41,9 +41,10 @@ #include "ui/UserInterfaceUtils.h" #include "ui/dialog/import_export/ExportKeyPackageDialog.h" #include "ui/dialog/import_export/KeyImportDetailDialog.h" -#include "ui/dialog/key_generate/KeygenDialog.h" +#include "ui/dialog/key_generate/KeyGenerateDialog.h" #include "ui/dialog/key_generate/SubkeyGenerateDialog.h" #include "ui/dialog/keypair_details/KeyDetailsDialog.h" +#include "ui/function/GpgOperaHelper.h" #include "ui/main_window/MainWindow.h" #include "ui/widgets/KeyList.h" @@ -97,10 +98,6 @@ KeyMgmt::KeyMgmt(QWidget* parent) [](const GpgKey& key) -> bool { return key.IsExpired(); }); setCentralWidget(key_list_); - key_list_->SetDoubleClickedAction([this](const GpgKey& key, - QWidget* /*parent*/) { - new KeyDetailsDialog(key_list_->GetCurrentGpgContextChannel(), key, this); - }); key_list_->SlotRefresh(); @@ -183,8 +180,7 @@ void KeyMgmt::create_actions() { }); bool const forbid_all_gnupg_connection = - GlobalSettingStation::GetInstance() - .GetSettings() + GetSettings() .value("network/forbid_all_gnupg_connection", false) .toBool(); @@ -253,11 +249,11 @@ void KeyMgmt::create_actions() { set_owner_trust_of_key_act_->setData(QVariant("set_owner_trust_level")); connect(set_owner_trust_of_key_act_, &QAction::triggered, this, [this]() { auto keys_selected = key_list_->GetSelected(); - if (keys_selected->empty()) return; + if (keys_selected.empty()) return; auto* function = new SetOwnerTrustLevel(this); function->Exec(key_list_->GetCurrentGpgContextChannel(), - keys_selected->front()); + keys_selected.front()); function->deleteLater(); }); } @@ -324,15 +320,15 @@ void KeyMgmt::SlotDeleteCheckedKeys() { delete_keys_with_warning(key_list_->GetChecked()); } -void KeyMgmt::delete_keys_with_warning(KeyIdArgsListPtr uidList) { +void KeyMgmt::delete_keys_with_warning(KeyIdArgsList uid_list) { /** * TODO: Different Messages for private/public key, check if * more than one selected... compare to seahorse "delete-dialog" */ - if (uidList->empty()) return; + if (uid_list.empty()) return; QString keynames; - for (const auto& key_id : *uidList) { + for (const auto& key_id : uid_list) { auto key = GpgKeyGetter::GetInstance(key_list_->GetCurrentGpgContextChannel()) .GetKey(key_id); @@ -352,29 +348,21 @@ void KeyMgmt::delete_keys_with_warning(KeyIdArgsListPtr uidList) { if (ret == QMessageBox::Yes) { GpgKeyOpera::GetInstance(key_list_->GetCurrentGpgContextChannel()) - .DeleteKeys(std::move(uidList)); + .DeleteKeys(std::move(uid_list)); emit SignalKeyStatusUpdated(); } } void KeyMgmt::SlotShowKeyDetails() { - auto keys_selected = key_list_->GetSelected(); - if (keys_selected->empty()) return; - - auto key = GpgKeyGetter::GetInstance(key_list_->GetCurrentGpgContextChannel()) - .GetKey(keys_selected->front()); - - if (!key.IsGood()) { - QMessageBox::critical(this, tr("Error"), tr("Key Not Found.")); - return; - } + auto [succ, key] = key_list_->GetSelectedGpgKey(); + if (!succ) return; new KeyDetailsDialog(key_list_->GetCurrentGpgContextChannel(), key, this); } void KeyMgmt::SlotExportKeyToKeyPackage() { auto keys_checked = key_list_->GetChecked(); - if (keys_checked->empty()) { + if (keys_checked.empty()) { QMessageBox::critical( this, tr("Forbidden"), tr("Please check some keys before doing this operation.")); @@ -388,17 +376,17 @@ void KeyMgmt::SlotExportKeyToKeyPackage() { void KeyMgmt::SlotExportKeyToClipboard() { auto keys_checked = key_list_->GetChecked(); - if (keys_checked->empty()) { + if (keys_checked.empty()) { QMessageBox::critical( this, tr("Forbidden"), tr("Please check some keys before doing this operation.")); return; } - if (keys_checked->size() == 1) { + if (keys_checked.size() == 1) { auto key = GpgKeyGetter::GetInstance(key_list_->GetCurrentGpgContextChannel()) - .GetKey(keys_checked->front()); + .GetKey(keys_checked.front()); assert(key.IsGood()); auto [err, gf_buffer] = GpgKeyImportExporter::GetInstance( @@ -413,15 +401,15 @@ void KeyMgmt::SlotExportKeyToClipboard() { auto keys = GpgKeyGetter::GetInstance(key_list_->GetCurrentGpgContextChannel()) .GetKeys(keys_checked); - assert(std::all_of(keys->begin(), keys->end(), + assert(std::all_of(keys.begin(), keys.end(), [](const auto& key) { return key.IsGood(); })); - CommonUtils::WaitForOpera( + GpgOperaHelper::WaitForOpera( this, tr("Exporting"), [=](const OperaWaitingHd& op_hd) { GpgKeyImportExporter::GetInstance( key_list_->GetCurrentGpgContextChannel()) .ExportKeys( - *keys, false, true, false, false, + keys, false, true, false, false, [=](GpgError err, const DataObjectPtr& data_obj) { // stop waiting op_hd(); @@ -453,25 +441,14 @@ void KeyMgmt::SlotExportKeyToClipboard() { } void KeyMgmt::SlotGenerateKeyDialog() { - (new KeyGenDialog(key_list_->GetCurrentGpgContextChannel(), this))->exec(); + (new KeyGenerateDialog(key_list_->GetCurrentGpgContextChannel(), this))->exec(); this->raise(); } void KeyMgmt::SlotGenerateSubKey() { - auto keys_selected = key_list_->GetSelected(); - if (keys_selected->empty()) { - QMessageBox::information( - this, tr("Invalid Operation"), - tr("Please select one KeyPair before doing this operation.")); - return; - } - const auto key = - GpgKeyGetter::GetInstance(key_list_->GetCurrentGpgContextChannel()) - .GetKey(keys_selected->front()); - if (!key.IsGood()) { - QMessageBox::critical(this, tr("Error"), tr("Key Not Found.")); - return; - } + auto [succ, key] = key_list_->GetSelectedGpgKey(); + if (!succ) return; + if (!key.IsPrivateKey()) { QMessageBox::critical(this, tr("Invalid Operation"), tr("If a key pair does not have a private key then " @@ -487,14 +464,14 @@ void KeyMgmt::SlotGenerateSubKey() { void KeyMgmt::SlotExportAsOpenSSHFormat() { auto keys_checked = key_list_->GetChecked(); - if (keys_checked->empty()) { + if (keys_checked.empty()) { QMessageBox::critical( this, tr("Forbidden"), tr("Please check a key before performing this operation.")); return; } - if (keys_checked->size() > 1) { + if (keys_checked.size() > 1) { QMessageBox::critical(this, tr("Forbidden"), tr("This operation accepts just a single key.")); return; @@ -503,15 +480,15 @@ void KeyMgmt::SlotExportAsOpenSSHFormat() { auto keys = GpgKeyGetter::GetInstance(key_list_->GetCurrentGpgContextChannel()) .GetKeys(keys_checked); - assert(std::all_of(keys->begin(), keys->end(), + assert(std::all_of(keys.begin(), keys.end(), [](const auto& key) { return key.IsGood(); })); - CommonUtils::WaitForOpera( + GpgOperaHelper::WaitForOpera( this, tr("Exporting"), [this, keys](const OperaWaitingHd& op_hd) { GpgKeyImportExporter::GetInstance( key_list_->GetCurrentGpgContextChannel()) .ExportKeys( - *keys, false, true, false, true, + keys, false, true, false, true, [=](GpgError err, const DataObjectPtr& data_obj) { // stop waiting op_hd(); @@ -609,7 +586,7 @@ void KeyMgmt::SlotImportKeyPackage() { return; } - CommonUtils::WaitForOpera( + GpgOperaHelper::WaitForOpera( this, tr("Importing"), [=](const OperaWaitingHd& op_hd) { KeyPackageOperator::ImportKeyPackage( key_package_file_name, key_file_name, diff --git a/src/ui/main_window/KeyMgmt.h b/src/ui/main_window/KeyMgmt.h index 4cd87c22..c0c004af 100644 --- a/src/ui/main_window/KeyMgmt.h +++ b/src/ui/main_window/KeyMgmt.h @@ -144,7 +144,7 @@ class KeyMgmt : public GeneralMainWindow { * * @param uidList */ - void delete_keys_with_warning(KeyIdArgsListPtr uidList); + void delete_keys_with_warning(KeyIdArgsList uid_list); KeyList* key_list_; ///< QMenu* file_menu_{}; ///< diff --git a/src/ui/main_window/MainWindow.cpp b/src/ui/main_window/MainWindow.cpp index d191e268..319a1ad9 100644 --- a/src/ui/main_window/MainWindow.cpp +++ b/src/ui/main_window/MainWindow.cpp @@ -34,6 +34,7 @@ #include "core/module/ModuleManager.h" #include "ui/UISignalStation.h" #include "ui/main_window/GeneralMainWindow.h" +#include "ui/struct/settings_object/AppearanceSO.h" #include "ui/struct/settings_object/KeyServerSO.h" #include "ui/widgets/KeyList.h" #include "ui/widgets/TextEdit.h" @@ -104,7 +105,7 @@ void MainWindow::Init() noexcept { statusBar()->showMessage(message, timeout); }); connect(UISignalStation::GetInstance(), - &UISignalStation::SignalMainWindowlUpdateBasicalOperaMenu, this, + &UISignalStation::SignalMainWindowUpdateBasicOperaMenu, this, &MainWindow::SlotUpdateCryptoMenuStatus); connect(UISignalStation::GetInstance(), &UISignalStation::SignalMainWindowOpenFile, this, @@ -136,7 +137,7 @@ void MainWindow::Init() noexcept { Module::TriggerEvent("APPLICATION_LOADED"); // check version information - auto settings = GlobalSettingStation::GetInstance().GetSettings(); + auto settings = GetSettings(); auto prohibit_update_checking = settings.value("network/prohibit_update_checking").toBool(); if (!prohibit_update_checking) { @@ -173,16 +174,49 @@ void MainWindow::restore_settings() { if (key_server.server_list.empty()) key_server.ResetDefaultServerList(); if (key_server.default_server < 0) key_server.default_server = 0; - auto settings = GlobalSettingStation::GetInstance().GetSettings(); + auto settings = GetSettings(); if (!settings.contains("gnupg/non_ascii_at_file_operation")) { settings.setValue("gnupg/non_ascii_at_file_operation", true); } + prohibit_update_checking_ = + settings.value("network/prohibit_update_check").toBool(); + // set appearance + AppearanceSO const appearance(SettingsObject("general_settings_state")); + + crypt_tool_bar_->clear(); + + if ((appearance.tool_bar_crypto_operas_type & GpgOperation::kENCRYPT) != 0) { + crypt_tool_bar_->addAction(encrypt_act_); + } + if ((appearance.tool_bar_crypto_operas_type & GpgOperation::kDECRYPT) != 0) { + crypt_tool_bar_->addAction(decrypt_act_); + } + if ((appearance.tool_bar_crypto_operas_type & GpgOperation::kSIGN) != 0) { + crypt_tool_bar_->addAction(sign_act_); + } + if ((appearance.tool_bar_crypto_operas_type & GpgOperation::kVERIFY) != 0) { + crypt_tool_bar_->addAction(verify_act_); + } + if ((appearance.tool_bar_crypto_operas_type & GpgOperation::kENCRYPT_SIGN) != + 0) { + crypt_tool_bar_->addAction(encrypt_sign_act_); + } + if ((appearance.tool_bar_crypto_operas_type & + GpgOperation::kDECRYPT_VERIFY) != 0) { + crypt_tool_bar_->addAction(decrypt_verify_act_); + } + + icon_style_ = appearance.tool_bar_button_style; import_button_->setToolButtonStyle(icon_style_); + this->setToolButtonStyle(icon_style_); - prohibit_update_checking_ = - settings.value("network/prohibit_update_check").toBool(); + // icons ize + this->setIconSize( + QSize(appearance.tool_bar_icon_width, appearance.tool_bar_icon_height)); + import_button_->setIconSize( + QSize(appearance.tool_bar_icon_width, appearance.tool_bar_icon_height)); } void MainWindow::recover_editor_unsaved_pages_from_cache() { @@ -240,10 +274,6 @@ void MainWindow::closeEvent(QCloseEvent* event) { } if (event->isAccepted()) { - // clear cache of unsaved page - CacheManager::GetInstance().SaveDurableCache( - "editor_unsaved_pages", QJsonDocument(QJsonArray()), true); - // call parent GeneralMainWindow::closeEvent(event); } diff --git a/src/ui/main_window/MainWindow.h b/src/ui/main_window/MainWindow.h index f397b755..8ec6bffd 100644 --- a/src/ui/main_window/MainWindow.h +++ b/src/ui/main_window/MainWindow.h @@ -28,7 +28,10 @@ #pragma once +#include "core/typedef/CoreTypedef.h" +#include "core/typedef/GpgTypedef.h" #include "ui/main_window/GeneralMainWindow.h" +#include "ui/struct/GpgOperaResult.h" namespace GpgFrontend { class GpgPassphraseContext; @@ -41,6 +44,8 @@ namespace GpgFrontend::UI { class KeyList; class TextEdit; class InfoBoardWidget; +struct GpgOperaContext; +struct GpgOperaContextBasement; /** * @brief @@ -159,14 +164,6 @@ class MainWindow : public GeneralMainWindow { /** * @brief * - * @param raw_data - * @param signature - */ - void SlotVerify(const QByteArray& raw_data, const QByteArray& signature); - - /** - * @brief - * */ void SlotVerifyEML(); @@ -209,41 +206,28 @@ class MainWindow : public GeneralMainWindow { /** * @details Open dialog for encrypting file. */ - void SlotFileEncrypt(const QString&); - - /** - * @brief - * - */ - void SlotDirectoryEncrypt(const QString&); - - /** - * @brief - * - * @param path - */ - void SlotFileDecrypt(const QString& path); + void SlotFileEncrypt(const QStringList& paths, bool ascii); /** * @brief * * @param path */ - void SlotArchiveDecrypt(const QString& path); + void SlotFileDecrypt(const QStringList& paths); /** * @brief * * @param path */ - void SlotFileSign(const QString& path); + void SlotFileSign(const QStringList& paths, bool ascii); /** * @brief * * @param path */ - void SlotFileVerify(const QString& path); + void SlotFileVerify(const QStringList& paths); /** * @brief @@ -257,28 +241,14 @@ class MainWindow : public GeneralMainWindow { * * @param path */ - void SlotFileEncryptSign(const QString& path); - - /** - * @brief - * - * @param path - */ - void SlotDirectoryEncryptSign(const QString& path); + void SlotFileEncryptSign(const QStringList& paths, bool ascii); /** * @brief * * @param path */ - void SlotFileDecryptVerify(const QString& path); - - /** - * @brief - * - * @param path - */ - void SlotArchiveDecryptVerify(const QString& path); + void SlotFileDecryptVerify(const QStringList& paths); /** * @details get value of member restartNeeded to needed. @@ -477,7 +447,7 @@ class MainWindow : public GeneralMainWindow { * * @param result_analyse */ - void slot_verifying_unknown_signature_helper(const GpgVerifyResultAnalyse& r); + void slot_verifying_unknown_signature_helper(const QStringList& fprs); /** * @brief @@ -498,6 +468,14 @@ class MainWindow : public GeneralMainWindow { /** * @brief * + * @param opera_results + */ + void slot_result_analyse_show_helper( + const QContainer<GpgOperaResult>& opera_results); + + /** + * @brief + * * @param result_analyse */ void slot_eml_verify_show_helper(const QString& email_info, @@ -536,6 +514,14 @@ class MainWindow : public GeneralMainWindow { */ void slot_decrypt_email_by_eml_data(const QByteArray& buffer); + /** + * @brief + * + * @param results + */ + void slot_gpg_opera_buffer_show_helper( + const QContainer<GpgOperaResult>& results); + private: /** * @details Create actions for the main-menu and the context-menu of the @@ -611,6 +597,69 @@ class MainWindow : public GeneralMainWindow { */ auto handle_module_error(QMap<QString, QString> p) -> bool; + /** + * @brief + * + * @param paths + * @return true + * @return false + */ + auto check_read_file_paths_helper(const QStringList& paths) -> bool; + + /** + * @brief + * + * @param paths + * @return true + * @return false + */ + auto check_write_file_paths_helper(const QStringList& paths) -> bool; + + /** + * @brief + * + * @param key_ids + * @param capability_check + * @param capability_err_string + * @return GpgKeyList + */ + auto check_keys_helper( + const KeyIdArgsList& key_ids, + const std::function<bool(const GpgKey&)>& capability_check, + const QString& capability_err_string) -> GpgKeyList; + + /** + * @brief + * + * @param context + * @return auto + */ + void exec_operas_helper( + const QString& task, + const QSharedPointer<GpgOperaContextBasement>& contexts); + + /** + * @brief + * + * @param contexts + * @param key_ids + * @param keys + * @return true + * @return false + */ + auto encrypt_operation_key_validate( + const QSharedPointer<GpgOperaContextBasement>& contexts) -> bool; + + /** + * @brief + * + * @param contexts + * @return true + * @return false + */ + auto sign_operation_key_validate( + const QSharedPointer<GpgOperaContextBasement>& contexts) -> bool; + TextEdit* edit_{}; ///< Tabwidget holding the edit-windows QMenu* file_menu_{}; ///< Submenu for file-operations QMenu* edit_menu_{}; ///< Submenu for text-operations @@ -651,8 +700,8 @@ class MainWindow : public GeneralMainWindow { QAction* sign_act_{}; ///< Action to sign text QAction* verify_act_{}; ///< Action to verify text QAction* import_key_from_edit_act_{}; ///< Action to import key from edit - QAction* clean_double_line_breaks_act_{}; ///< Action to remove double line - ///< breaks + QAction* clean_double_line_breaks_act_{}; ///< Action to remove double + ///< line breaks QAction* gnupg_controller_open_act_{}; ///< QAction* module_controller_open_act_{}; ///< @@ -660,8 +709,8 @@ class MainWindow : public GeneralMainWindow { QAction* reload_components_act_{}; ///< QAction* restart_components_act_{}; ///< - QAction* - append_selected_keys_act_{}; ///< Action to append selected keys to edit + QAction* append_selected_keys_act_{}; ///< Action to append selected keys + ///< to edit QAction* append_key_fingerprint_to_editor_act_{}; ///< QAction* append_key_create_date_to_editor_act_{}; ///< QAction* append_key_expire_date_to_editor_act_{}; ///< diff --git a/src/ui/main_window/MainWindowFileSlotFunction.cpp b/src/ui/main_window/MainWindowFileSlotFunction.cpp deleted file mode 100644 index 184635a7..00000000 --- a/src/ui/main_window/MainWindowFileSlotFunction.cpp +++ /dev/null @@ -1,1007 +0,0 @@ -/** - * Copyright (C) 2021-2024 Saturneric <[email protected]> - * - * This file is part of GpgFrontend. - * - * GpgFrontend is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * GpgFrontend is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GpgFrontend. If not, see <https://www.gnu.org/licenses/>. - * - * The initial version of the source code is inherited from - * the gpg4usb project, which is under GPL-3.0-or-later. - * - * All the source code of GpgFrontend was modified and released by - * Saturneric <[email protected]> starting on May 12, 2021. - * - * SPDX-License-Identifier: GPL-3.0-or-later - * - */ - -#include "MainWindow.h" -#include "core/function/GlobalSettingStation.h" -#include "core/function/gpg/GpgFileOpera.h" -#include "core/function/gpg/GpgKeyGetter.h" -#include "core/function/result_analyse/GpgDecryptResultAnalyse.h" -#include "core/function/result_analyse/GpgEncryptResultAnalyse.h" -#include "core/function/result_analyse/GpgSignResultAnalyse.h" -#include "core/function/result_analyse/GpgVerifyResultAnalyse.h" -#include "core/module/ModuleManager.h" -#include "core/utils/GpgUtils.h" -#include "core/utils/IOUtils.h" -#include "ui/UserInterfaceUtils.h" -#include "ui/dialog/SignersPicker.h" -#include "ui/widgets/KeyList.h" - -namespace GpgFrontend::UI { - -void MainWindow::SlotFileEncrypt(const QString& path) { - auto check_result = TargetFilePreCheck(path, true); - if (!std::get<0>(check_result)) { - QMessageBox::critical( - this, tr("Error"), - tr("Cannot read from file: %1").arg(QFileInfo(path).fileName())); - return; - } - - bool const non_ascii_at_file_operation = - GlobalSettingStation::GetInstance() - .GetSettings() - .value("gnupg/non_ascii_at_file_operation", true) - .toBool(); - auto out_path = - SetExtensionOfOutputFile(path, kENCRYPT, !non_ascii_at_file_operation); - - if (QFile::exists(out_path)) { - auto out_file_name = tr("The target file %1 already exists, " - "do you need to overwrite it?") - .arg(out_path); - auto ret = QMessageBox::warning(this, tr("Warning"), out_file_name, - QMessageBox::Ok | QMessageBox::Cancel); - - if (ret == QMessageBox::Cancel) return; - } - - check_result = TargetFilePreCheck(out_path, false); - if (!std::get<0>(check_result)) { - QMessageBox::critical(this, tr("Error"), - tr("Cannot write to file: %1").arg(out_path)); - return; - } - - // check selected keys - auto key_ids = m_key_list_->GetChecked(); - if (key_ids->empty()) { - // Symmetric Encrypt - auto ret = QMessageBox::information( - this, tr("Symmetric Encryption"), - tr("No Key Selected. Do you want to encrypt with a " - "symmetric cipher using a passphrase?"), - QMessageBox::Ok | QMessageBox::Cancel); - if (ret == QMessageBox::Cancel) return; - - CommonUtils::WaitForOpera( - this, tr("Symmetrically Encrypting"), [=](const OperaWaitingHd& op_hd) { - GpgFileOpera::GetInstance(m_key_list_->GetCurrentGpgContextChannel()) - .EncryptFileSymmetric( - path, !non_ascii_at_file_operation, out_path, - [=](GpgError err, const DataObjectPtr& data_obj) { - // stop waiting - op_hd(); - - if (CheckGpgError(err) == GPG_ERR_USER_1 || - data_obj == nullptr || - !data_obj->Check<GpgEncryptResult>()) { - QMessageBox::critical(this, tr("Error"), - tr("Unknown error occurred")); - return; - } - - auto result = ExtractParams<GpgEncryptResult>(data_obj, 0); - auto result_analyse = GpgEncryptResultAnalyse( - m_key_list_->GetCurrentGpgContextChannel(), err, - result); - result_analyse.Analyse(); - - slot_result_analyse_show_helper(result_analyse); - this->slot_refresh_current_file_view(); - }); - }); - - return; - } - - auto p_keys = - GpgKeyGetter::GetInstance(m_key_list_->GetCurrentGpgContextChannel()) - .GetKeys(key_ids); - assert(std::all_of(p_keys->begin(), p_keys->end(), - [](const auto& key) { return key.IsGood(); })); - - // check key abilities - for (const auto& key : *p_keys) { - bool const key_can_encrypt = key.IsHasActualEncryptionCapability(); - - if (!key_can_encrypt) { - QMessageBox::critical( - nullptr, tr("Invalid KeyPair"), - tr("The selected keypair cannot be used for encryption.") + - "<br/><br/>" + tr("For example the Following Key:") + " <br/>" + - key.GetUIDs()->front().GetUID()); - return; - } - } - - CommonUtils::WaitForOpera( - this, tr("Encrypting"), [=](const OperaWaitingHd& op_hd) { - GpgFileOpera::GetInstance(m_key_list_->GetCurrentGpgContextChannel()) - .EncryptFile( - {p_keys->begin(), p_keys->end()}, path, - !non_ascii_at_file_operation, out_path, - [=](GpgError err, const DataObjectPtr& data_obj) { - // stop waiting - op_hd(); - - if (CheckGpgError(err) == GPG_ERR_USER_1 || - data_obj == nullptr || - !data_obj->Check<GpgEncryptResult>()) { - QMessageBox::critical(this, tr("Error"), - tr("Unknown error occurred")); - return; - } - - auto result = ExtractParams<GpgEncryptResult>(data_obj, 0); - auto result_analyse = GpgEncryptResultAnalyse( - m_key_list_->GetCurrentGpgContextChannel(), err, result); - result_analyse.Analyse(); - - slot_result_analyse_show_helper(result_analyse); - this->slot_refresh_current_file_view(); - }); - }); -} - -void MainWindow::SlotDirectoryEncrypt(const QString& path) { - auto check_result = TargetFilePreCheck(path, true); - if (!std::get<0>(check_result)) { - QMessageBox::critical( - this, tr("Error"), - tr("Cannot read from file: %1").arg(QFileInfo(path).fileName())); - return; - } - - bool const non_ascii_at_file_operation = - GlobalSettingStation::GetInstance() - .GetSettings() - .value("gnupg/non_ascii_at_file_operation", true) - .toBool(); - auto out_path = SetExtensionOfOutputFileForArchive( - path, kENCRYPT, !non_ascii_at_file_operation); - - if (QFile::exists(out_path)) { - auto out_file_name = tr("The target file %1 already exists, " - "do you need to overwrite it?") - .arg(out_path); - auto ret = QMessageBox::warning(this, tr("Warning"), out_file_name, - QMessageBox::Ok | QMessageBox::Cancel); - - if (ret == QMessageBox::Cancel) return; - } - - check_result = TargetFilePreCheck(out_path, false); - if (!std::get<0>(check_result)) { - QMessageBox::critical(this, tr("Error"), - tr("Cannot write to file: %1").arg(out_path)); - return; - } - - // check selected keys - auto key_ids = m_key_list_->GetChecked(); - // symmetric encrypt - if (key_ids->empty()) { - auto ret = QMessageBox::information( - this, tr("Symmetric Encryption"), - tr("No Key Selected. Do you want to encrypt with a " - "symmetric cipher using a passphrase?"), - QMessageBox::Ok | QMessageBox::Cancel); - if (ret == QMessageBox::Cancel) return; - - CommonUtils::WaitForOpera( - this, tr("Archiving & Symmetrically Encrypting"), - [=](const OperaWaitingHd& op_hd) { - GpgFileOpera::GetInstance(m_key_list_->GetCurrentGpgContextChannel()) - .EncryptDerectorySymmetric( - path, !non_ascii_at_file_operation, out_path, - [=](GpgError err, const DataObjectPtr& data_obj) { - // stop waiting - op_hd(); - - if (data_obj == nullptr || - !data_obj->Check<GpgEncryptResult>()) { - QMessageBox::critical(this, tr("Error"), - tr("Unknown error occurred")); - return; - } - - auto result = ExtractParams<GpgEncryptResult>(data_obj, 0); - auto result_analyse = GpgEncryptResultAnalyse( - m_key_list_->GetCurrentGpgContextChannel(), err, - result); - result_analyse.Analyse(); - - slot_result_analyse_show_helper(result_analyse); - this->slot_refresh_current_file_view(); - }); - }); - - return; - } - - auto p_keys = - GpgKeyGetter::GetInstance(m_key_list_->GetCurrentGpgContextChannel()) - .GetKeys(key_ids); - assert(std::all_of(p_keys->begin(), p_keys->end(), - [](const auto& key) { return key.IsGood(); })); - - // check key abilities - for (const auto& key : *p_keys) { - bool const key_can_encrypt = key.IsHasActualEncryptionCapability(); - - if (!key_can_encrypt) { - QMessageBox::critical( - nullptr, tr("Invalid KeyPair"), - tr("The selected keypair cannot be used for encryption.") + - "<br/><br/>" + tr("For example the Following Key:") + " <br/>" + - key.GetUIDs()->front().GetUID()); - return; - } - } - - CommonUtils::WaitForOpera( - this, tr("Archiving & Encrypting"), [=](const OperaWaitingHd& op_hd) { - GpgFileOpera::GetInstance(m_key_list_->GetCurrentGpgContextChannel()) - .EncryptDirectory( - {p_keys->begin(), p_keys->end()}, path, - !non_ascii_at_file_operation, out_path, - [=](GpgError err, const DataObjectPtr& data_obj) { - // stop waiting - op_hd(); - - if (CheckGpgError(err) == GPG_ERR_USER_1 || - data_obj == nullptr || - !data_obj->Check<GpgEncryptResult>()) { - QMessageBox::critical(this, tr("Error"), - tr("Unknown error occurred")); - return; - } - - auto result = ExtractParams<GpgEncryptResult>(data_obj, 0); - auto result_analyse = GpgEncryptResultAnalyse( - m_key_list_->GetCurrentGpgContextChannel(), err, result); - result_analyse.Analyse(); - - slot_result_analyse_show_helper(result_analyse); - this->slot_refresh_current_file_view(); - }); - }); -} - -void MainWindow::SlotFileDecrypt(const QString& path) { - auto check_result = TargetFilePreCheck(path, true); - if (!std::get<0>(check_result)) { - QMessageBox::critical( - this, tr("Error"), - tr("Cannot read from file: %1").arg(QFileInfo(path).fileName())); - return; - } - - auto out_path = SetExtensionOfOutputFile(path, kDECRYPT, true); - if (QFileInfo(out_path).exists()) { - auto ret = QMessageBox::warning( - this, tr("Warning"), - tr("The target file already exists, do you need to overwrite it?"), - QMessageBox::Ok | QMessageBox::Cancel); - - if (ret == QMessageBox::Cancel) return; - } - - check_result = TargetFilePreCheck(out_path, false); - if (!std::get<0>(check_result)) { - QMessageBox::critical(this, tr("Error"), - tr("Cannot write to file: %1").arg(out_path)); - return; - } - - CommonUtils::WaitForOpera( - this, tr("Decrypting"), [=](const OperaWaitingHd& op_hd) { - GpgFileOpera::GetInstance(m_key_list_->GetCurrentGpgContextChannel()) - .DecryptFile( - path, out_path, - [=](GpgError err, const DataObjectPtr& data_obj) { - // stop waiting - op_hd(); - - if (CheckGpgError(err) == GPG_ERR_USER_1 || - data_obj == nullptr || - !data_obj->Check<GpgDecryptResult>()) { - QMessageBox::critical(this, tr("Error"), - tr("Unknown error occurred")); - return; - } - - auto result = ExtractParams<GpgDecryptResult>(data_obj, 0); - auto result_analyse = GpgDecryptResultAnalyse( - m_key_list_->GetCurrentGpgContextChannel(), err, result); - result_analyse.Analyse(); - - slot_result_analyse_show_helper(result_analyse); - this->slot_refresh_current_file_view(); - }); - }); -} - -void MainWindow::SlotArchiveDecrypt(const QString& path) { - auto check_result = TargetFilePreCheck(path, true); - if (!std::get<0>(check_result)) { - QMessageBox::critical(this, tr("Error"), - tr("Cannot read from file: %1").arg(path)); - return; - } - - auto out_path = SetExtensionOfOutputFileForArchive(path, kDECRYPT, true); - if (QFileInfo(out_path).exists()) { - auto ret = QMessageBox::warning( - this, tr("Warning"), - tr("The target file already exists, do you need to overwrite it?"), - QMessageBox::Ok | QMessageBox::Cancel); - - if (ret == QMessageBox::Cancel) return; - } - - check_result = TargetFilePreCheck(out_path, false); - if (!std::get<0>(check_result)) { - QMessageBox::critical(this, tr("Error"), - tr("Cannot write to file: %1").arg(out_path)); - return; - } - - CommonUtils::WaitForOpera( - this, tr("Decrypting & Extrating"), [=](const OperaWaitingHd& op_hd) { - GpgFileOpera::GetInstance(m_key_list_->GetCurrentGpgContextChannel()) - .DecryptArchive( - path, out_path, - [=](GpgError err, const DataObjectPtr& data_obj) { - // stop waiting - op_hd(); - - if (CheckGpgError(err) == GPG_ERR_USER_1 || - data_obj == nullptr || - !data_obj->Check<GpgDecryptResult>()) { - QMessageBox::critical(this, tr("Error"), - tr("Unknown error occurred")); - return; - } - - auto result = ExtractParams<GpgDecryptResult>(data_obj, 0); - auto result_analyse = GpgDecryptResultAnalyse( - m_key_list_->GetCurrentGpgContextChannel(), err, result); - result_analyse.Analyse(); - - slot_result_analyse_show_helper(result_analyse); - this->slot_refresh_current_file_view(); - }); - }); -} - -void MainWindow::SlotFileSign(const QString& path) { - auto check_result = TargetFilePreCheck(path, true); - if (!std::get<0>(check_result)) { - QMessageBox::critical( - this, tr("Error"), - tr("Cannot read from file: %1").arg(QFileInfo(path).fileName())); - return; - } - - auto key_ids = m_key_list_->GetChecked(); - auto keys = - GpgKeyGetter::GetInstance(m_key_list_->GetCurrentGpgContextChannel()) - .GetKeys(key_ids); - assert(std::all_of(keys->begin(), keys->end(), - [](const auto& key) { return key.IsGood(); })); - - if (keys->empty()) { - QMessageBox::critical( - this, tr("No Key Checked"), - tr("Please check the key in the key toolbox on the right.")); - return; - } - - for (const auto& key : *keys) { - if (!key.IsHasActualSigningCapability()) { - QMessageBox::information( - this, tr("Invalid Operation"), - tr("The selected key contains a key that does not actually " - "have a sign usage.") + - "<br/><br/>" + tr("for example the Following Key:") + " <br/>" + - key.GetUIDs()->front().GetUID()); - return; - } - } - - bool const non_ascii_at_file_operation = - GlobalSettingStation::GetInstance() - .GetSettings() - .value("gnupg/non_ascii_at_file_operation", true) - .toBool(); - auto sig_file_path = - SetExtensionOfOutputFile(path, kSIGN, !non_ascii_at_file_operation); - - if (QFileInfo(sig_file_path).exists()) { - auto ret = QMessageBox::warning(this, tr("Warning"), - tr("The signature file \"%1\" exists, " - "do you need to overwrite it?") - .arg(sig_file_path), - QMessageBox::Ok | QMessageBox::Cancel); - - if (ret == QMessageBox::Cancel) return; - } - - CommonUtils::WaitForOpera( - this, tr("Signing"), [=](const OperaWaitingHd& op_hd) { - GpgFileOpera::GetInstance(m_key_list_->GetCurrentGpgContextChannel()) - .SignFile({keys->begin(), keys->end()}, path, - !non_ascii_at_file_operation, sig_file_path, - [=](GpgError err, const DataObjectPtr& data_obj) { - // stop waiting - op_hd(); - - if (CheckGpgError(err) == GPG_ERR_USER_1 || - data_obj == nullptr || - !data_obj->Check<GpgSignResult>()) { - QMessageBox::critical(this, tr("Error"), - tr("Unknown error occurred")); - return; - } - - auto result = ExtractParams<GpgSignResult>(data_obj, 0); - auto result_analyse = GpgSignResultAnalyse( - m_key_list_->GetCurrentGpgContextChannel(), err, - result); - result_analyse.Analyse(); - - slot_result_analyse_show_helper(result_analyse); - this->slot_refresh_current_file_view(); - }); - }); -} - -void MainWindow::SlotFileVerify(const QString& path) { - auto check_result = TargetFilePreCheck(path, true); - if (!std::get<0>(check_result)) { - QMessageBox::critical( - this, tr("Error"), - tr("Cannot read from file: %1").arg(QFileInfo(path).fileName())); - return; - } - - auto file_info = QFileInfo(path); - QString sign_file_path = path; - QString data_file_path; - - bool const prossible_singleton_target = - file_info.suffix() == "gpg" || file_info.suffix() == "pgp"; - if (prossible_singleton_target) { - swap(data_file_path, sign_file_path); - } else { - data_file_path = file_info.path() + "/" + file_info.completeBaseName(); - } - - auto data_file_info = QFileInfo(data_file_path); - if (!prossible_singleton_target && !data_file_info.exists()) { - bool ok; - QString const text = QInputDialog::getText( - this, tr("File to be Verified"), - tr("Please provide An ABSOLUTE Path \n" - "If Data And Signature is COMBINED within a single file, " - "KEEP THIS EMPTY: "), - QLineEdit::Normal, data_file_path, &ok); - - if (!ok) return; - - data_file_path = text.isEmpty() ? data_file_path : text; - data_file_info = QFileInfo(data_file_path); - } - - if (!data_file_info.isFile() || - (!sign_file_path.isEmpty() && !QFileInfo(sign_file_path).isFile())) { - QMessageBox::critical( - this, tr("Error"), - tr("Please select the appropriate origin file or signature file. " - "Ensure that both are in this directory.")); - return; - } - - CommonUtils::WaitForOpera( - this, tr("Verifying"), [=](const OperaWaitingHd& op_hd) { - GpgFileOpera::GetInstance(m_key_list_->GetCurrentGpgContextChannel()) - .VerifyFile( - data_file_path, sign_file_path, - [=](GpgError err, const DataObjectPtr& data_obj) { - // stop waiting - op_hd(); - - if (CheckGpgError(err) == GPG_ERR_USER_1 || - data_obj == nullptr || - !data_obj->Check<GpgVerifyResult>()) { - QMessageBox::critical(this, tr("Error"), - tr("Unknown error occurred")); - return; - } - - auto result = ExtractParams<GpgVerifyResult>(data_obj, 0); - auto result_analyse = GpgVerifyResultAnalyse( - m_key_list_->GetCurrentGpgContextChannel(), err, result); - result_analyse.Analyse(); - - slot_result_analyse_show_helper(result_analyse); - - if (!result_analyse.GetUnknownSignatures().isEmpty() && - Module::IsModuleActivate(kKeyServerSyncModuleID)) { - slot_verifying_unknown_signature_helper(result_analyse); - } - - this->slot_refresh_current_file_view(); - }); - }); -} - -void MainWindow::SlotFileEncryptSign(const QString& path) { - auto check_result = TargetFilePreCheck(path, true); - if (!std::get<0>(check_result)) { - QMessageBox::critical(this, tr("Error"), - tr("Cannot read from file: %1").arg(path)); - return; - } - - // check selected keys - auto key_ids = m_key_list_->GetChecked(); - auto p_keys = - GpgKeyGetter::GetInstance(m_key_list_->GetCurrentGpgContextChannel()) - .GetKeys(key_ids); - assert(std::all_of(p_keys->begin(), p_keys->end(), - [](const auto& key) { return key.IsGood(); })); - - if (p_keys->empty()) { - QMessageBox::critical( - this, tr("No Key Checked"), - tr("Please check the key in the key toolbox on the right.")); - return; - } - - // check key abilities - for (const auto& key : *p_keys) { - bool const key_can_encrypt = key.IsHasActualEncryptionCapability(); - - if (!key_can_encrypt) { - QMessageBox::critical( - nullptr, tr("Invalid KeyPair"), - tr("The selected keypair cannot be used for encryption.") + - "<br/><br/>" + tr("For example the Following Key:") + " <br/>" + - key.GetUIDs()->front().GetUID()); - return; - } - } - - bool const non_ascii_at_file_operation = - GlobalSettingStation::GetInstance() - .GetSettings() - .value("gnupg/non_ascii_at_file_operation", true) - .toBool(); - auto out_path = SetExtensionOfOutputFile(path, kENCRYPT_SIGN, - !non_ascii_at_file_operation); - - check_result = TargetFilePreCheck(out_path, false); - if (!std::get<0>(check_result)) { - QMessageBox::critical(this, tr("Error"), - tr("Cannot write to file: %1").arg(out_path)); - return; - } - - if (QFile::exists(out_path)) { - auto ret = QMessageBox::warning( - this, tr("Warning"), - tr("The target file already exists, do you need to overwrite it?"), - QMessageBox::Ok | QMessageBox::Cancel); - - if (ret == QMessageBox::Cancel) return; - } - - auto* signers_picker = - new SignersPicker(m_key_list_->GetCurrentGpgContextChannel(), this); - QEventLoop loop; - connect(signers_picker, &SignersPicker::finished, &loop, &QEventLoop::quit); - loop.exec(); - - // return when canceled - if (!signers_picker->GetStatus()) return; - - auto signer_key_ids = signers_picker->GetCheckedSigners(); - auto p_signer_keys = - GpgKeyGetter::GetInstance(m_key_list_->GetCurrentGpgContextChannel()) - .GetKeys(signer_key_ids); - assert(std::all_of(p_signer_keys->begin(), p_signer_keys->end(), - [](const auto& key) { return key.IsGood(); })); - - CommonUtils::WaitForOpera( - this, tr("Encrypting and Signing"), [=](const OperaWaitingHd& op_hd) { - GpgFileOpera::GetInstance(m_key_list_->GetCurrentGpgContextChannel()) - .EncryptSignFile( - {p_keys->begin(), p_keys->end()}, - {p_signer_keys->begin(), p_signer_keys->end()}, path, - !non_ascii_at_file_operation, out_path, - [=](GpgError err, const DataObjectPtr& data_obj) { - // stop waiting - op_hd(); - - if (CheckGpgError(err) == GPG_ERR_USER_1 || - data_obj == nullptr || - !data_obj->Check<GpgEncryptResult, GpgSignResult>()) { - QMessageBox::critical(this, tr("Error"), - tr("Unknown error occurred")); - return; - } - auto encrypt_result = - ExtractParams<GpgEncryptResult>(data_obj, 0); - auto sign_result = ExtractParams<GpgSignResult>(data_obj, 1); - - auto encrypt_result_analyse = GpgEncryptResultAnalyse( - m_key_list_->GetCurrentGpgContextChannel(), err, - encrypt_result); - encrypt_result_analyse.Analyse(); - - auto sign_result_analyse = GpgSignResultAnalyse( - m_key_list_->GetCurrentGpgContextChannel(), err, - sign_result); - sign_result_analyse.Analyse(); - - slot_result_analyse_show_helper(encrypt_result_analyse, - sign_result_analyse); - - this->slot_refresh_current_file_view(); - }); - }); -} - -void MainWindow::SlotDirectoryEncryptSign(const QString& path) { - auto check_result = TargetFilePreCheck(path, true); - if (!std::get<0>(check_result)) { - QMessageBox::critical(this, tr("Error"), - tr("Cannot read from file: %1").arg(path)); - return; - } - - // check selected keys - auto key_ids = m_key_list_->GetChecked(); - auto p_keys = - GpgKeyGetter::GetInstance(m_key_list_->GetCurrentGpgContextChannel()) - .GetKeys(key_ids); - assert(std::all_of(p_keys->begin(), p_keys->end(), - [](const auto& key) { return key.IsGood(); })); - - if (p_keys->empty()) { - QMessageBox::critical( - this, tr("No Key Checked"), - tr("Please check the key in the key toolbox on the right.")); - return; - } - - // check key abilities - for (const auto& key : *p_keys) { - bool const key_can_encrypt = key.IsHasActualEncryptionCapability(); - - if (!key_can_encrypt) { - QMessageBox::critical( - nullptr, tr("Invalid KeyPair"), - tr("The selected keypair cannot be used for encryption.") + - "<br/><br/>" + tr("For example the Following Key:") + " <br/>" + - key.GetUIDs()->front().GetUID()); - return; - } - } - - bool const non_ascii_at_file_operation = - GlobalSettingStation::GetInstance() - .GetSettings() - .value("gnupg/non_ascii_at_file_operation", true) - .toBool(); - auto out_path = SetExtensionOfOutputFileForArchive( - path, kENCRYPT_SIGN, !non_ascii_at_file_operation); - - check_result = TargetFilePreCheck(out_path, false); - if (!std::get<0>(check_result)) { - QMessageBox::critical(this, tr("Error"), - tr("Cannot write to file: %1").arg(out_path)); - return; - } - - if (QFile::exists(out_path)) { - auto ret = QMessageBox::warning( - this, tr("Warning"), - tr("The target file already exists, do you need to overwrite it?"), - QMessageBox::Ok | QMessageBox::Cancel); - - if (ret == QMessageBox::Cancel) return; - } - - auto* signers_picker = - new SignersPicker(m_key_list_->GetCurrentGpgContextChannel(), this); - QEventLoop loop; - connect(signers_picker, &SignersPicker::finished, &loop, &QEventLoop::quit); - loop.exec(); - - // return when canceled - if (!signers_picker->GetStatus()) return; - - auto signer_key_ids = signers_picker->GetCheckedSigners(); - auto p_signer_keys = - GpgKeyGetter::GetInstance(m_key_list_->GetCurrentGpgContextChannel()) - .GetKeys(signer_key_ids); -#ifndef NDEBUG - for (const auto& key : *p_signer_keys) { - assert(key.IsGood()); - } -#endif - - CommonUtils::WaitForOpera( - this, tr("Archiving & Encrypting & Signing"), - [=](const OperaWaitingHd& op_hd) { - GpgFileOpera::GetInstance(m_key_list_->GetCurrentGpgContextChannel()) - .EncryptSignDirectory( - {p_keys->begin(), p_keys->end()}, - {p_signer_keys->begin(), p_signer_keys->end()}, path, - !non_ascii_at_file_operation, out_path, - [=](GpgError err, const DataObjectPtr& data_obj) { - // stop waiting - op_hd(); - - if (CheckGpgError(err) == GPG_ERR_USER_1 || - data_obj == nullptr || - !data_obj->Check<GpgEncryptResult, GpgSignResult>()) { - QMessageBox::critical(this, tr("Error"), - tr("Unknown error occurred")); - return; - } - auto encrypt_result = - ExtractParams<GpgEncryptResult>(data_obj, 0); - auto sign_result = ExtractParams<GpgSignResult>(data_obj, 1); - - auto encrypt_result_analyse = GpgEncryptResultAnalyse( - m_key_list_->GetCurrentGpgContextChannel(), err, - encrypt_result); - encrypt_result_analyse.Analyse(); - - auto sign_result_analyse = GpgSignResultAnalyse( - m_key_list_->GetCurrentGpgContextChannel(), err, - sign_result); - sign_result_analyse.Analyse(); - - slot_result_analyse_show_helper(encrypt_result_analyse, - sign_result_analyse); - - this->slot_refresh_current_file_view(); - }); - }); -} - -void MainWindow::SlotFileDecryptVerify(const QString& path) { - auto check_result = TargetFilePreCheck(path, true); - if (!std::get<0>(check_result)) { - QMessageBox::critical(this, tr("Error"), - tr("Cannot read from file: %1").arg(path)); - return; - } - - auto out_path = SetExtensionOfOutputFile(path, kDECRYPT_VERIFY, true); - check_result = TargetFilePreCheck(out_path, false); - if (!std::get<0>(check_result)) { - QMessageBox::critical(this, tr("Error"), - tr("Cannot write to file: %1").arg(out_path)); - return; - } - - if (QFile::exists(out_path)) { - auto ret = QMessageBox::warning(this, tr("Warning"), - tr("The output file %1 already exists, do " - "you need to overwrite it?") - .arg(out_path), - QMessageBox::Ok | QMessageBox::Cancel); - - if (ret == QMessageBox::Cancel) return; - } - - CommonUtils::WaitForOpera( - this, tr("Decrypting and Verifying"), [=](const OperaWaitingHd& op_hd) { - GpgFileOpera::GetInstance(m_key_list_->GetCurrentGpgContextChannel()) - .DecryptVerifyFile( - path, out_path, - [=](GpgError err, const DataObjectPtr& data_obj) { - // stop waiting - op_hd(); - - if (CheckGpgError(err) == GPG_ERR_USER_1 || - data_obj == nullptr || - !data_obj->Check<GpgDecryptResult, GpgVerifyResult>()) { - QMessageBox::critical(this, tr("Error"), - tr("Unknown error occurred")); - return; - } - auto decrypt_result = - ExtractParams<GpgDecryptResult>(data_obj, 0); - auto verify_result = - ExtractParams<GpgVerifyResult>(data_obj, 1); - - auto decrypt_result_analyse = GpgDecryptResultAnalyse( - m_key_list_->GetCurrentGpgContextChannel(), err, - decrypt_result); - decrypt_result_analyse.Analyse(); - - auto verify_result_analyse = GpgVerifyResultAnalyse( - m_key_list_->GetCurrentGpgContextChannel(), err, - verify_result); - verify_result_analyse.Analyse(); - - slot_result_analyse_show_helper(decrypt_result_analyse, - verify_result_analyse); - - this->slot_refresh_current_file_view(); - - if (!verify_result_analyse.GetUnknownSignatures().isEmpty() && - Module::IsModuleActivate(kKeyServerSyncModuleID)) { - LOG_D() << "try to sync missing key info from server" - << verify_result_analyse.GetUnknownSignatures(); - - QString fingerprint_list; - for (const auto& fingerprint : - verify_result_analyse.GetUnknownSignatures()) { - fingerprint_list += fingerprint + "\n"; - } - - // Interaction with user - auto user_response = QMessageBox::question( - this, tr("Missing Keys"), - tr("Some signatures cannot be verified because the " - "corresponding keys are missing.\n\n" - "The following fingerprints are missing:\n%1\n\n" - "Would you like to fetch these keys from the key " - "server?") - .arg(fingerprint_list), - QMessageBox::Yes | QMessageBox::No); - - if (user_response == QMessageBox::Yes) { - CommonUtils::GetInstance() - ->ImportKeyByKeyServerSyncModule( - this, m_key_list_->GetCurrentGpgContextChannel(), - verify_result_analyse.GetUnknownSignatures()); - } else { - QMessageBox::information( - this, tr("Verification Incomplete"), - tr("Verification was incomplete due to missing " - "keys. You can manually import the keys later.")); - } - } - }); - }); -} - -void MainWindow::SlotArchiveDecryptVerify(const QString& path) { - auto check_result = TargetFilePreCheck(path, true); - if (!std::get<0>(check_result)) { - QMessageBox::critical(this, tr("Error"), - tr("Cannot read from file: %1").arg(path)); - return; - } - - auto out_path = - SetExtensionOfOutputFileForArchive(path, kDECRYPT_VERIFY, true); - check_result = TargetFilePreCheck(out_path, false); - if (!std::get<0>(check_result)) { - QMessageBox::critical(this, tr("Error"), - tr("Cannot write to file: %1").arg(out_path)); - return; - } - - if (QFile::exists(out_path)) { - auto ret = QMessageBox::warning(this, tr("Warning"), - tr("The output file %1 already exists, do " - "you need to overwrite it?") - .arg(out_path), - QMessageBox::Ok | QMessageBox::Cancel); - - if (ret == QMessageBox::Cancel) return; - } - - CommonUtils::WaitForOpera( - this, tr("Decrypting & Verifying & Extracting"), - [=](const OperaWaitingHd& op_hd) { - GpgFileOpera::GetInstance(m_key_list_->GetCurrentGpgContextChannel()) - .DecryptVerifyArchive( - path, out_path, - [=](GpgError err, const DataObjectPtr& data_obj) { - // stop waiting - op_hd(); - - if (CheckGpgError(err) == GPG_ERR_USER_1 || - data_obj == nullptr || - !data_obj->Check<GpgDecryptResult, GpgVerifyResult>()) { - QMessageBox::critical(this, tr("Error"), - tr("Unknown error occurred")); - return; - } - auto decrypt_result = - ExtractParams<GpgDecryptResult>(data_obj, 0); - auto verify_result = - ExtractParams<GpgVerifyResult>(data_obj, 1); - - auto decrypt_result_analyse = GpgDecryptResultAnalyse( - m_key_list_->GetCurrentGpgContextChannel(), err, - decrypt_result); - decrypt_result_analyse.Analyse(); - - auto verify_result_analyse = GpgVerifyResultAnalyse( - m_key_list_->GetCurrentGpgContextChannel(), err, - verify_result); - verify_result_analyse.Analyse(); - - slot_result_analyse_show_helper(decrypt_result_analyse, - verify_result_analyse); - - // pause this feature - // if (verify_result_analyse.GetStatus() == -2) { - // import_unknown_key_from_keyserver(this, - // verify_result_analyse); - // } - // pause this feature - // if (verify_result_analyse.GetStatus() >= 0) { - // show_verify_details(this, info_board_, err, - // verify_result); - // } - - this->slot_refresh_current_file_view(); - }); - }); -} - -void MainWindow::SlotFileVerifyEML(const QString& path) { - auto check_result = TargetFilePreCheck(path, true); - if (!std::get<0>(check_result)) { - QMessageBox::critical(this, tr("Error"), - tr("Cannot read from file: %1").arg(path)); - return; - } - - QFileInfo file_info(path); - if (file_info.size() > static_cast<qint64>(1024 * 1024 * 32)) { - QMessageBox::warning( - this, tr("EML File Too Large"), - tr("The EML file \"%1\" is larger than 32MB and will not be opened.") - .arg(file_info.fileName())); - return; - } - - QFile eml_file(path); - if (!eml_file.open(QIODevice::ReadOnly)) return; - auto buffer = eml_file.readAll(); - - // LOG_D() << "EML BUFFER (FILE): " << buffer; - - slot_verify_email_by_eml_data(buffer); -} - -} // namespace GpgFrontend::UI diff --git a/src/ui/main_window/MainWindowGpgOperaFunction.cpp b/src/ui/main_window/MainWindowGpgOperaFunction.cpp index a9a65797..7632fdd6 100644 --- a/src/ui/main_window/MainWindowGpgOperaFunction.cpp +++ b/src/ui/main_window/MainWindowGpgOperaFunction.cpp @@ -27,528 +27,519 @@ */ #include "MainWindow.h" -#include "core/function/gpg/GpgBasicOperator.h" +#include "core/function/GlobalSettingStation.h" #include "core/function/gpg/GpgKeyGetter.h" -#include "core/function/result_analyse/GpgDecryptResultAnalyse.h" -#include "core/function/result_analyse/GpgEncryptResultAnalyse.h" -#include "core/function/result_analyse/GpgSignResultAnalyse.h" -#include "core/function/result_analyse/GpgVerifyResultAnalyse.h" -#include "core/model/DataObject.h" -#include "core/model/GpgEncryptResult.h" -#include "core/module/ModuleManager.h" #include "core/utils/GpgUtils.h" +#include "core/utils/IOUtils.h" #include "ui/UserInterfaceUtils.h" #include "ui/dialog/SignersPicker.h" +#include "ui/function/GpgOperaHelper.h" +#include "ui/struct/GpgOperaResultContext.h" #include "ui/widgets/KeyList.h" #include "ui/widgets/TextEdit.h" namespace GpgFrontend::UI { -void MainWindow::SlotEncrypt() { - if (edit_->CurPageTextEdit() == nullptr) return; - +auto MainWindow::encrypt_operation_key_validate( + const QSharedPointer<GpgOperaContextBasement>& contexts) -> bool { auto key_ids = m_key_list_->GetChecked(); - if (key_ids->empty()) { - // Symmetric Encrypt + // symmetric encryption + if (key_ids.isEmpty()) { auto ret = QMessageBox::information( this, tr("Symmetric Encryption"), - tr("No Key Checked. Do you want to encrypt with a " + tr("No Key Selected. Do you want to encrypt with a " "symmetric cipher using a passphrase?"), QMessageBox::Ok | QMessageBox::Cancel); + if (ret == QMessageBox::Cancel) return false; + + contexts->keys = {}; + } else { + contexts->keys = check_keys_helper( + key_ids, [](const GpgKey& key) { return key.IsHasActualEncrCap(); }, + tr("The selected keypair cannot be used for encryption.")); + if (contexts->keys.empty()) return false; + } - if (ret == QMessageBox::Cancel) return; - - auto buffer = GFBuffer(edit_->CurPlainText()); - CommonUtils::WaitForOpera( - this, tr("Symmetrically Encrypting"), - [this, buffer](const OperaWaitingHd& op_hd) { - GpgFrontend::GpgBasicOperator::GetInstance( - m_key_list_->GetCurrentGpgContextChannel()) - .EncryptSymmetric( - buffer, true, - [this, op_hd](GpgError err, const DataObjectPtr& data_obj) { - // stop waiting - op_hd(); - - if (CheckGpgError(err) == GPG_ERR_USER_1 || - data_obj == nullptr || - !data_obj->Check<GpgEncryptResult, GFBuffer>()) { - QMessageBox::critical(this, tr("Error"), - tr("Unknown error occurred")); - return; - } - - auto result = ExtractParams<GpgEncryptResult>(data_obj, 0); - auto buffer = ExtractParams<GFBuffer>(data_obj, 1); - - auto result_analyse = GpgEncryptResultAnalyse( - m_key_list_->GetCurrentGpgContextChannel(), err, - result); - result_analyse.Analyse(); - slot_result_analyse_show_helper(result_analyse); - - if (CheckGpgError(err) == GPG_ERR_NO_ERROR) { - edit_->SlotFillTextEditWithText( - buffer.ConvertToQByteArray()); - } - info_board_->ResetOptionActionsMenu(); - }); - }); + return true; +} - return; - } +auto MainWindow::sign_operation_key_validate( + const QSharedPointer<GpgOperaContextBasement>& contexts) -> bool { + auto* signers_picker = + new SignersPicker(m_key_list_->GetCurrentGpgContextChannel(), this); + QEventLoop loop; + connect(signers_picker, &SignersPicker::finished, &loop, &QEventLoop::quit); + loop.exec(); - auto keys = + // return when canceled + if (!signers_picker->GetStatus()) return false; + + auto signer_key_ids = signers_picker->GetCheckedSigners(); + auto signer_keys = GpgKeyGetter::GetInstance(m_key_list_->GetCurrentGpgContextChannel()) - .GetKeys(key_ids); - assert(std::all_of(keys->begin(), keys->end(), + .GetKeys(signer_key_ids); + assert(std::all_of(signer_keys.begin(), signer_keys.end(), [](const auto& key) { return key.IsGood(); })); - for (const auto& key : *keys) { - if (!key.IsHasActualEncryptionCapability()) { - QMessageBox::information( - this, tr("Invalid Operation"), - tr("The selected key contains a key that does not actually have a " - "encrypt usage.") + - "<br/><br/>" + tr("For example the Following Key:") + " <br/>" + - key.GetUIDs()->front().GetUID()); - return; + contexts->singer_keys = signer_keys; + + return true; +} + +auto MainWindow::check_read_file_paths_helper(const QStringList& paths) + -> bool { + QStringList invalid_files; + for (const auto& path : paths) { + auto result = TargetFilePreCheck(path, true); + if (!std::get<0>(result)) { + invalid_files.append(path); + } + } + + if (!invalid_files.empty()) { + QString error_file_names; + for (const auto& file_path : invalid_files) { + error_file_names += QFileInfo(file_path).fileName() + "\n"; } + + QMessageBox::critical(this, tr("Error"), + tr("Cannot read from the following files:\n\n%1") + .arg(error_file_names.trimmed())); + return false; } - auto buffer = GFBuffer(edit_->CurPlainText()); - CommonUtils::WaitForOpera( - this, tr("Encrypting"), - [this, keys, buffer](const OperaWaitingHd& op_hd) { - GpgFrontend::GpgBasicOperator::GetInstance( - m_key_list_->GetCurrentGpgContextChannel()) - .Encrypt( - {keys->begin(), keys->end()}, buffer, true, - [this, op_hd](GpgError err, const DataObjectPtr& data_obj) { - // stop waiting - op_hd(); - - if (data_obj == nullptr || - !data_obj->Check<GpgEncryptResult, GFBuffer>()) { - QMessageBox::critical(this, tr("Error"), - tr("Unknown error occurred")); - return; - } - - auto result = ExtractParams<GpgEncryptResult>(data_obj, 0); - auto buffer = ExtractParams<GFBuffer>(data_obj, 1); - - auto result_analyse = GpgEncryptResultAnalyse( - m_key_list_->GetCurrentGpgContextChannel(), err, result); - result_analyse.Analyse(); - slot_result_analyse_show_helper(result_analyse); - - if (CheckGpgError(err) == GPG_ERR_NO_ERROR) { - edit_->SlotFillTextEditWithText( - buffer.ConvertToQByteArray()); - } - info_board_->ResetOptionActionsMenu(); - }); - }); + return true; } -void MainWindow::SlotSign() { - if (edit_->CurPageTextEdit() == nullptr) return; +auto MainWindow::check_write_file_paths_helper(const QStringList& o_paths) + -> bool { + for (const auto& o_path : o_paths) { + if (QFile::exists(o_path)) { + auto out_file_name = tr("The target file %1 already exists, " + "do you need to overwrite it?") + .arg(QFileInfo(o_path).fileName()); + auto ret = QMessageBox::warning(this, tr("Warning"), out_file_name, + QMessageBox::Ok | QMessageBox::Cancel); + + if (ret == QMessageBox::Cancel) return false; + } + } - auto key_ids = m_key_list_->GetCheckedPrivateKey(); - if (key_ids->empty()) { + QStringList invalid_output_files; + for (const auto& path : o_paths) { + auto result = TargetFilePreCheck(path, false); + if (!std::get<0>(result)) { + invalid_output_files.append(path); + } + } + + if (!invalid_output_files.empty()) { + QString error_file_names; + for (const auto& file_path : invalid_output_files) { + error_file_names += QFileInfo(file_path).fileName() + "\n"; + } + + QMessageBox::critical(this, tr("Error"), + tr("Cannot write to the following files:\n\n%1") + .arg(error_file_names.trimmed())); + return false; + } + + return true; +} + +auto MainWindow::check_keys_helper( + const KeyIdArgsList& key_ids, + const std::function<bool(const GpgKey&)>& capability_check, + const QString& capability_err_string) -> GpgKeyList { + if (key_ids.empty()) { QMessageBox::critical( this, tr("No Key Checked"), tr("Please check the key in the key toolbox on the right.")); - return; + return {}; } auto keys = GpgKeyGetter::GetInstance(m_key_list_->GetCurrentGpgContextChannel()) .GetKeys(key_ids); - assert(std::all_of(keys->begin(), keys->end(), + assert(std::all_of(keys.begin(), keys.end(), [](const auto& key) { return key.IsGood(); })); - for (const auto& key : *keys) { - if (!key.IsHasActualSigningCapability()) { - QMessageBox::information( - this, tr("Invalid Operation"), - tr("The selected key contains a key that does not actually have a " - "signature usage.") + - "<br/><br/>" + tr("For example the Following Key:") + "<br/>" + - key.GetUIDs()->front().GetUID()); - return; + // check key abilities + for (const auto& key : keys) { + if (!capability_check(key)) { + QMessageBox::critical(nullptr, tr("Invalid KeyPair"), + capability_err_string + "<br/><br/>" + + tr("For example the Following Key:") + + " <br/>" + key.GetUIDs()->front().GetUID()); + return {}; } } - // set input buffer - auto buffer = GFBuffer(edit_->CurPlainText()); - CommonUtils::WaitForOpera( - this, tr("Signing"), [this, keys, buffer](const OperaWaitingHd& hd) { - GpgFrontend::GpgBasicOperator::GetInstance( - m_key_list_->GetCurrentGpgContextChannel()) - .Sign( - {keys->begin(), keys->end()}, buffer, GPGME_SIG_MODE_CLEAR, - true, [this, hd](GpgError err, const DataObjectPtr& data_obj) { - // stop waiting - hd(); - - if (CheckGpgError(err) == GPG_ERR_USER_1 || - data_obj == nullptr || - !data_obj->Check<GpgSignResult, GFBuffer>()) { - QMessageBox::critical(this, tr("Error"), - tr("Unknown error occurred")); - return; - } - auto sign_result = ExtractParams<GpgSignResult>(data_obj, 0); - auto sign_out_buffer = ExtractParams<GFBuffer>(data_obj, 1); - auto result_analyse = GpgSignResultAnalyse( - m_key_list_->GetCurrentGpgContextChannel(), err, - sign_result); - result_analyse.Analyse(); - slot_result_analyse_show_helper(result_analyse); - - if (CheckGpgError(err) == GPG_ERR_NO_ERROR) { - edit_->SlotFillTextEditWithText( - sign_out_buffer.ConvertToQByteArray()); - } - }); - }); + return keys; +} + +void MainWindow::SlotEncrypt() { + if (edit_->CurPageTextEdit() == nullptr) return; + + auto contexts = QSharedPointer<GpgOperaContextBasement>::create(); + contexts->ascii = true; + + if (!encrypt_operation_key_validate(contexts)) return; + + contexts->GetContextBuffer(0).append(GFBuffer(edit_->CurPlainText())); + GpgOperaHelper::BuildOperas(contexts, 0, + m_key_list_->GetCurrentGpgContextChannel(), + GpgOperaHelper::BuildOperasEncrypt); + + exec_operas_helper(tr("Encrypting"), contexts); +} + +void MainWindow::SlotSign() { + if (edit_->CurPageTextEdit() == nullptr) return; + + auto contexts = QSharedPointer<GpgOperaContextBasement>::create(); + contexts->ascii = true; + + auto key_ids = m_key_list_->GetChecked(); + contexts->keys = check_keys_helper( + key_ids, [](const GpgKey& key) { return key.IsHasActualSignCap(); }, + tr("The selected key contains a key that does not actually have a " + "sign usage.")); + if (contexts->keys.empty()) return; + + contexts->GetContextBuffer(0).append(GFBuffer(edit_->CurPlainText())); + GpgOperaHelper::BuildOperas(contexts, 0, + m_key_list_->GetCurrentGpgContextChannel(), + GpgOperaHelper::BuildOperasSign); + + exec_operas_helper(tr("Signing"), contexts); } void MainWindow::SlotDecrypt() { if (edit_->CurPageTextEdit() == nullptr) return; - // data to transfer into task - auto buffer = GFBuffer(edit_->CurPlainText()); - - CommonUtils::WaitForOpera( - this, tr("Decrypting"), [this, buffer](const OperaWaitingHd& hd) { - GpgFrontend::GpgBasicOperator::GetInstance( - m_key_list_->GetCurrentGpgContextChannel()) - .Decrypt(buffer, [this, hd](GpgError err, - const DataObjectPtr& data_obj) { - // stop waiting - hd(); - - if (CheckGpgError(err) == GPG_ERR_USER_1 || data_obj == nullptr || - !data_obj->Check<GpgDecryptResult, GFBuffer>()) { - QMessageBox::critical(this, tr("Error"), - tr("Unknown error occurred")); - return; - } - auto decrypt_result = - ExtractParams<GpgDecryptResult>(data_obj, 0); - auto out_buffer = ExtractParams<GFBuffer>(data_obj, 1); - auto result_analyse = GpgDecryptResultAnalyse( - m_key_list_->GetCurrentGpgContextChannel(), err, - decrypt_result); - result_analyse.Analyse(); - slot_result_analyse_show_helper(result_analyse); - - if (CheckGpgError(err) == GPG_ERR_NO_ERROR) { - edit_->SlotFillTextEditWithText( - out_buffer.ConvertToQByteArray()); - } - }); - }); + auto contexts = QSharedPointer<GpgOperaContextBasement>::create(); + contexts->ascii = true; + + contexts->GetContextBuffer(0).append(GFBuffer(edit_->CurPlainText())); + GpgOperaHelper::BuildOperas(contexts, 0, + m_key_list_->GetCurrentGpgContextChannel(), + GpgOperaHelper::BuildOperasDecrypt); + + exec_operas_helper(tr("Decrypting"), contexts); } void MainWindow::SlotVerify() { if (edit_->CurPageTextEdit() == nullptr) return; - // set input buffer - auto buffer = GFBuffer(edit_->CurPlainText()); - - CommonUtils::WaitForOpera( - this, tr("Verifying"), [this, buffer](const OperaWaitingHd& hd) { - GpgFrontend::GpgBasicOperator::GetInstance( - m_key_list_->GetCurrentGpgContextChannel()) - .Verify(buffer, GFBuffer(), - [this, hd](GpgError err, const DataObjectPtr& data_obj) { - // stop waiting - hd(); - - if (CheckGpgError(err) == GPG_ERR_USER_1 || - data_obj == nullptr || - !data_obj->Check<GpgVerifyResult>()) { - QMessageBox::critical(this, tr("Error"), - tr("Unknown error occurred")); - return; - } - auto verify_result = - ExtractParams<GpgVerifyResult>(data_obj, 0); - - // analyse result - auto result_analyse = GpgVerifyResultAnalyse( - m_key_list_->GetCurrentGpgContextChannel(), err, - verify_result); - result_analyse.Analyse(); - slot_result_analyse_show_helper(result_analyse); - - if (!result_analyse.GetUnknownSignatures().isEmpty() && - Module::IsModuleActivate(kKeyServerSyncModuleID)) { - slot_verifying_unknown_signature_helper(result_analyse); - } - }); - }); -} + auto contexts = QSharedPointer<GpgOperaContextBasement>::create(); + contexts->ascii = true; + + contexts->GetContextBuffer(0).append(GFBuffer(edit_->CurPlainText())); + GpgOperaHelper::BuildOperas(contexts, 0, + m_key_list_->GetCurrentGpgContextChannel(), + GpgOperaHelper::BuildOperasVerify); + + exec_operas_helper(tr("Verifying"), contexts); -void MainWindow::SlotVerify(const QByteArray& raw_data, - const QByteArray& signature) { - // set input buffer - auto raw_data_buffer = GFBuffer(raw_data); - auto signature_buffer = GFBuffer(signature); - - CommonUtils::WaitForOpera( - this, tr("Verifying"), - [this, raw_data_buffer, signature_buffer](const OperaWaitingHd& hd) { - GpgFrontend::GpgBasicOperator::GetInstance( - m_key_list_->GetCurrentGpgContextChannel()) - .Verify( - raw_data_buffer, signature_buffer, - [this, hd](GpgError err, const DataObjectPtr& data_obj) { - // stop waiting - hd(); - - if (CheckGpgError(err) == GPG_ERR_USER_1 || - data_obj == nullptr || - !data_obj->Check<GpgVerifyResult>()) { - QMessageBox::critical(this, tr("Error"), - tr("Unknown error occurred")); - return; - } - auto verify_result = - ExtractParams<GpgVerifyResult>(data_obj, 0); - - // analyse result - auto result_analyse = GpgVerifyResultAnalyse( - m_key_list_->GetCurrentGpgContextChannel(), err, - verify_result); - result_analyse.Analyse(); - slot_result_analyse_show_helper(result_analyse); - - if (!result_analyse.GetUnknownSignatures().isEmpty() && - Module::IsModuleActivate(kKeyServerSyncModuleID)) { - LOG_D() << "try to sync missing key info from server" - << result_analyse.GetUnknownSignatures(); - - QString fingerprint_list; - for (const auto& fingerprint : - result_analyse.GetUnknownSignatures()) { - fingerprint_list += fingerprint + "\n"; - } - - // Interaction with user - auto user_response = QMessageBox::question( - this, tr("Missing Keys"), - tr("Some signatures cannot be verified because the " - "corresponding keys are missing.\n\n" - "The following fingerprints are missing:\n%1\n\n" - "Would you like to fetch these keys from the key " - "server?") - .arg(fingerprint_list), - QMessageBox::Yes | QMessageBox::No); - - if (user_response == QMessageBox::Yes) { - CommonUtils::GetInstance() - ->ImportKeyByKeyServerSyncModule( - this, m_key_list_->GetCurrentGpgContextChannel(), - result_analyse.GetUnknownSignatures()); - } else { - QMessageBox::information( - this, tr("Verification Incomplete"), - tr("Verification was incomplete due to missing " - "keys. You can manually import the keys later.")); - } - } - }); - }); + if (!contexts->unknown_fprs.isEmpty()) { + slot_verifying_unknown_signature_helper(contexts->unknown_fprs); + } } void MainWindow::SlotEncryptSign() { if (edit_->CurPageTextEdit() == nullptr) return; + auto contexts = QSharedPointer<GpgOperaContextBasement>::create(); + contexts->ascii = true; + auto key_ids = m_key_list_->GetChecked(); + contexts->keys = check_keys_helper( + key_ids, [](const GpgKey& key) { return key.IsHasActualEncrCap(); }, + tr("The selected keypair cannot be used for encryption.")); + if (contexts->keys.empty()) return; - if (key_ids->empty()) { - QMessageBox::critical( - this, tr("No Key Checked"), - tr("Please check some key in the key toolbox on the right.")); - return; + if (!sign_operation_key_validate(contexts)) return; + + contexts->GetContextBuffer(0).append(GFBuffer(edit_->CurPlainText())); + GpgOperaHelper::BuildOperas(contexts, 0, + m_key_list_->GetCurrentGpgContextChannel(), + GpgOperaHelper::BuildOperasEncryptSign); + + exec_operas_helper(tr("Encrypting and Signing"), contexts); +} + +void MainWindow::SlotDecryptVerify() { + if (edit_->CurPageTextEdit() == nullptr) return; + + auto contexts = QSharedPointer<GpgOperaContextBasement>::create(); + contexts->ascii = true; + + contexts->GetContextBuffer(0).append(GFBuffer(edit_->CurPlainText())); + GpgOperaHelper::BuildOperas(contexts, 0, + m_key_list_->GetCurrentGpgContextChannel(), + GpgOperaHelper::BuildOperasDecryptVerify); + + exec_operas_helper(tr("Decrypting and Verifying"), contexts); + + if (!contexts->unknown_fprs.isEmpty()) { + slot_verifying_unknown_signature_helper(contexts->unknown_fprs); } +} - auto keys = - GpgKeyGetter::GetInstance(m_key_list_->GetCurrentGpgContextChannel()) - .GetKeys(key_ids); - assert(std::all_of(keys->begin(), keys->end(), - [](const auto& key) { return key.IsGood(); })); +void MainWindow::SlotFileEncrypt(const QStringList& paths, bool ascii) { + auto contexts = QSharedPointer<GpgOperaContextBasement>::create(); + contexts->ascii = ascii; - for (const auto& key : *keys) { - bool key_can_encrypt = key.IsHasActualEncryptionCapability(); + if (!encrypt_operation_key_validate(contexts)) return; - if (!key_can_encrypt) { - QMessageBox::critical( - this, tr("Invalid KeyPair"), - tr("The selected keypair cannot be used for encryption.") + - "<br/><br/>" + tr("For example the Following Key:") + " <br/>" + - key.GetUIDs()->front().GetUID()); - return; + if (!check_read_file_paths_helper(paths)) return; + + for (const auto& path : paths) { + QFileInfo info(path); + if (info.isDir()) { + contexts->GetContextPath(1).append(path); + contexts->GetContextOutPath(1).append( + SetExtensionOfOutputFileForArchive(path, kENCRYPT, contexts->ascii)); + } else { + contexts->GetContextPath(0).append(path); + contexts->GetContextOutPath(0).append( + SetExtensionOfOutputFile(path, kENCRYPT, contexts->ascii)); } } - auto* signers_picker = - new SignersPicker(m_key_list_->GetCurrentGpgContextChannel(), this); - QEventLoop loop; - connect(signers_picker, &SignersPicker::finished, &loop, &QEventLoop::quit); - loop.exec(); + if (!check_write_file_paths_helper(contexts->GetAllOutPath())) return; - // return when canceled - if (!signers_picker->GetStatus()) return; + GpgOperaHelper::BuildOperas(contexts, 0, + m_key_list_->GetCurrentGpgContextChannel(), + GpgOperaHelper::BuildOperasFileEncrypt); - auto signer_key_ids = signers_picker->GetCheckedSigners(); - auto signer_keys = - GpgKeyGetter::GetInstance(m_key_list_->GetCurrentGpgContextChannel()) - .GetKeys(signer_key_ids); - for (const auto& key : *signer_keys) { - assert(key.IsGood()); + GpgOperaHelper::BuildOperas(contexts, 1, + m_key_list_->GetCurrentGpgContextChannel(), + GpgOperaHelper::BuildOperasDirectoryEncrypt); + + exec_operas_helper(tr("Encrypting"), contexts); +} + +void MainWindow::SlotFileDecrypt(const QStringList& paths) { + auto contexts = QSharedPointer<GpgOperaContextBasement>::create(); + + contexts->ascii = true; + + if (!check_read_file_paths_helper(paths)) return; + + for (const auto& path : paths) { + QFileInfo info(path); + const auto extension = info.completeSuffix(); + + if (extension == "tar.gpg" || extension == "tar.asc") { + contexts->GetContextPath(1).append(path); + contexts->GetContextOutPath(1).append( + SetExtensionOfOutputFileForArchive(path, kDECRYPT, contexts->ascii)); + } else { + contexts->GetContextPath(0).append(path); + contexts->GetContextOutPath(0).append( + SetExtensionOfOutputFile(path, kDECRYPT, contexts->ascii)); + } + } + + if (!check_write_file_paths_helper(contexts->GetAllOutPath())) return; + + GpgOperaHelper::BuildOperas(contexts, 0, + m_key_list_->GetCurrentGpgContextChannel(), + GpgOperaHelper::BuildOperasFileDecrypt); + + GpgOperaHelper::BuildOperas(contexts, 1, + m_key_list_->GetCurrentGpgContextChannel(), + GpgOperaHelper::BuildOperasArchiveDecrypt); + + exec_operas_helper(tr("Decrypting"), contexts); +} + +void MainWindow::SlotFileSign(const QStringList& paths, bool ascii) { + auto contexts = QSharedPointer<GpgOperaContextBasement>::create(); + + contexts->ascii = ascii; + + auto key_ids = m_key_list_->GetChecked(); + contexts->keys = check_keys_helper( + key_ids, [](const GpgKey& key) { return key.IsHasActualSignCap(); }, + tr("The selected key contains a key that does not actually have a " + "sign usage.")); + if (contexts->keys.empty()) return; + + if (!check_read_file_paths_helper(paths)) return; + + for (const auto& path : paths) { + QFileInfo info(path); + contexts->GetContextPath(0).append(path); + contexts->GetContextOutPath(0).append( + SetExtensionOfOutputFile(path, kSIGN, contexts->ascii)); } - // data to transfer into task - auto buffer = GFBuffer(edit_->CurPlainText()); - - CommonUtils::WaitForOpera( - this, tr("Encrypting and Signing"), - [this, keys, signer_keys, buffer](const OperaWaitingHd& hd) { - GpgFrontend::GpgBasicOperator::GetInstance( - m_key_list_->GetCurrentGpgContextChannel()) - .EncryptSign( - {keys->begin(), keys->end()}, - {signer_keys->begin(), signer_keys->end()}, buffer, true, - [this, hd](GpgError err, const DataObjectPtr& data_obj) { - // stop waiting - hd(); - - if (CheckGpgError(err) == GPG_ERR_USER_1 || - data_obj == nullptr || - !data_obj->Check<GpgEncryptResult, GpgSignResult, - GFBuffer>()) { - QMessageBox::critical(this, tr("Error"), - tr("Unknown error occurred")); - return; - } - auto encrypt_result = - ExtractParams<GpgEncryptResult>(data_obj, 0); - auto sign_result = ExtractParams<GpgSignResult>(data_obj, 1); - auto out_buffer = ExtractParams<GFBuffer>(data_obj, 2); - - // analyse result - auto encrypt_result_analyse = GpgEncryptResultAnalyse( - m_key_list_->GetCurrentGpgContextChannel(), err, - encrypt_result); - encrypt_result_analyse.Analyse(); - - auto sign_result_analyse = GpgSignResultAnalyse( - m_key_list_->GetCurrentGpgContextChannel(), err, - sign_result); - sign_result_analyse.Analyse(); - - // show analyse result - slot_result_analyse_show_helper(encrypt_result_analyse, - sign_result_analyse); - - if (CheckGpgError(err) == GPG_ERR_NO_ERROR) { - edit_->SlotFillTextEditWithText( - out_buffer.ConvertToQByteArray()); - } - }); - }); + if (!check_write_file_paths_helper(contexts->GetAllOutPath())) return; + + GpgOperaHelper::BuildOperas(contexts, 0, + m_key_list_->GetCurrentGpgContextChannel(), + GpgOperaHelper::BuildOperasFileSign); + + exec_operas_helper(tr("Signing"), contexts); } -void MainWindow::SlotDecryptVerify() { - if (edit_->CurPageTextEdit() == nullptr) return; +void MainWindow::SlotFileVerify(const QStringList& paths) { + auto contexts = QSharedPointer<GpgOperaContextBasement>::create(); + + if (!check_read_file_paths_helper(paths)) return; + + for (const auto& path : paths) { + QFileInfo info(path); + + QString sign_file_path = path; + QString data_file_path; + + bool const possible_singleton_target = + info.suffix() == "gpg" || info.suffix() == "pgp"; + if (possible_singleton_target) { + swap(data_file_path, sign_file_path); + } else { + data_file_path = info.path() + "/" + info.completeBaseName(); + } + + auto data_file_info = QFileInfo(data_file_path); + if (!possible_singleton_target && !data_file_info.exists()) { + bool ok; + QString const text = QInputDialog::getText( + this, tr("File to be Verified"), + tr("Please provide An ABSOLUTE Path \n" + "If Data And Signature is COMBINED within a single file, " + "KEEP THIS EMPTY: "), + QLineEdit::Normal, data_file_path, &ok); + + if (!ok) return; + + data_file_path = text.isEmpty() ? data_file_path : text; + data_file_info = QFileInfo(data_file_path); + } + + contexts->GetContextPath(0).append(sign_file_path); + contexts->GetContextOutPath(0).append(data_file_path); + } + + GpgOperaHelper::BuildOperas(contexts, 0, + m_key_list_->GetCurrentGpgContextChannel(), + GpgOperaHelper::BuildOperasFileVerify); + + exec_operas_helper(tr("Verifying"), contexts); + + if (!contexts->unknown_fprs.isEmpty()) { + slot_verifying_unknown_signature_helper(contexts->unknown_fprs); + } +} + +void MainWindow::SlotFileEncryptSign(const QStringList& paths, bool ascii) { + auto contexts = QSharedPointer<GpgOperaContextBasement>::create(); + contexts->ascii = ascii; + + auto key_ids = m_key_list_->GetChecked(); + contexts->keys = check_keys_helper( + key_ids, [](const GpgKey& key) { return key.IsHasActualEncrCap(); }, + tr("The selected keypair cannot be used for encryption.")); + if (contexts->keys.empty()) return; + + if (!sign_operation_key_validate(contexts)) return; + + if (!check_read_file_paths_helper(paths)) return; + + for (const auto& path : paths) { + QFileInfo info(path); + if (info.isDir()) { + contexts->GetContextPath(1).append(path); + contexts->GetContextOutPath(1).append( + SetExtensionOfOutputFileForArchive(path, kENCRYPT, contexts->ascii)); + } else { + contexts->GetContextPath(0).append(path); + contexts->GetContextOutPath(0).append( + SetExtensionOfOutputFile(path, kENCRYPT, contexts->ascii)); + } + } + + if (!check_write_file_paths_helper(contexts->GetAllOutPath())) return; + + GpgOperaHelper::BuildOperas(contexts, 0, + m_key_list_->GetCurrentGpgContextChannel(), + GpgOperaHelper::BuildOperasFileEncryptSign); + + GpgOperaHelper::BuildOperas(contexts, 1, + m_key_list_->GetCurrentGpgContextChannel(), + GpgOperaHelper::BuildOperasDirectoryEncryptSign); + + exec_operas_helper(tr("Encrypting and Signing"), contexts); +} + +void MainWindow::SlotFileDecryptVerify(const QStringList& paths) { + auto contexts = QSharedPointer<GpgOperaContextBasement>::create(); + contexts->ascii = true; + + if (!check_read_file_paths_helper(paths)) return; + + for (const auto& path : paths) { + QFileInfo info(path); + const auto extension = info.completeSuffix(); + + if (extension == "tar.gpg" || extension == "tar.asc") { + contexts->GetContextPath(1).append(path); + contexts->GetContextOutPath(1).append( + SetExtensionOfOutputFileForArchive(path, kDECRYPT, contexts->ascii)); + } else { + contexts->GetContextPath(0).append(path); + contexts->GetContextOutPath(0).append( + SetExtensionOfOutputFile(path, kDECRYPT, contexts->ascii)); + } + } + + if (!check_write_file_paths_helper(contexts->GetAllOutPath())) return; + + GpgOperaHelper::BuildOperas(contexts, 0, + m_key_list_->GetCurrentGpgContextChannel(), + GpgOperaHelper::BuildOperasFileDecryptVerify); + + GpgOperaHelper::BuildOperas(contexts, 1, + m_key_list_->GetCurrentGpgContextChannel(), + GpgOperaHelper::BuildOperasArchiveDecryptVerify); + + exec_operas_helper(tr("Decrypting and Verifying"), contexts); + + if (!contexts->unknown_fprs.isEmpty()) { + slot_verifying_unknown_signature_helper(contexts->unknown_fprs); + } +}; + +void MainWindow::SlotFileVerifyEML(const QString& path) { + auto check_result = TargetFilePreCheck(path, true); + if (!std::get<0>(check_result)) { + QMessageBox::critical(this, tr("Error"), + tr("Cannot read from file: %1").arg(path)); + return; + } + + QFileInfo file_info(path); + if (file_info.size() > static_cast<qint64>(1024 * 1024 * 32)) { + QMessageBox::warning(this, tr("EML File Too Large"), + tr("The EML file \"%1\" is larger than 32MB and " + "will not be opened.") + .arg(file_info.fileName())); + return; + } + + QFile eml_file(path); + if (!eml_file.open(QIODevice::ReadOnly)) return; + auto buffer = eml_file.readAll(); + + // LOG_D() << "EML BUFFER (FILE): " << buffer; - // data to transfer into task - auto buffer = GFBuffer(edit_->CurPlainText()); - - CommonUtils::WaitForOpera( - this, tr("Decrypting and Verifying"), - [this, buffer](const OperaWaitingHd& hd) { - GpgFrontend::GpgBasicOperator::GetInstance( - m_key_list_->GetCurrentGpgContextChannel()) - .DecryptVerify(buffer, [this, hd](GpgError err, - const DataObjectPtr& data_obj) { - // stop waiting - hd(); - - if (CheckGpgError(err) == GPG_ERR_USER_1 || data_obj == nullptr || - !data_obj - ->Check<GpgDecryptResult, GpgVerifyResult, GFBuffer>()) { - QMessageBox::critical(this, tr("Error"), - tr("Unknown error occurred")); - return; - } - auto decrypt_result = - ExtractParams<GpgDecryptResult>(data_obj, 0); - auto verify_result = ExtractParams<GpgVerifyResult>(data_obj, 1); - auto out_buffer = ExtractParams<GFBuffer>(data_obj, 2); - - // analyse result - auto decrypt_result_analyse = GpgDecryptResultAnalyse( - m_key_list_->GetCurrentGpgContextChannel(), err, - decrypt_result); - decrypt_result_analyse.Analyse(); - - auto verify_result_analyse = GpgVerifyResultAnalyse( - m_key_list_->GetCurrentGpgContextChannel(), err, - verify_result); - verify_result_analyse.Analyse(); - - // show analyse result - slot_result_analyse_show_helper(decrypt_result_analyse, - verify_result_analyse); - - if (CheckGpgError(err) == GPG_ERR_NO_ERROR) { - edit_->SlotFillTextEditWithText( - out_buffer.ConvertToQByteArray()); - } - - if (!verify_result_analyse.GetUnknownSignatures().isEmpty() && - Module::IsModuleActivate(kKeyServerSyncModuleID)) { - LOG_D() << "try to sync missing key info from server" - << verify_result_analyse.GetUnknownSignatures(); - - QString fingerprint_list; - for (const auto& fingerprint : - verify_result_analyse.GetUnknownSignatures()) { - fingerprint_list += fingerprint + "\n"; - } - - // Interaction with user - auto user_response = QMessageBox::question( - this, tr("Missing Keys"), - tr("Some signatures cannot be verified because the " - "corresponding keys are missing.\n\n" - "The following fingerprints are missing:\n%1\n\n" - "Would you like to fetch these keys from the key " - "server?") - .arg(fingerprint_list), - QMessageBox::Yes | QMessageBox::No); - - if (user_response == QMessageBox::Yes) { - CommonUtils::GetInstance()->ImportKeyByKeyServerSyncModule( - this, m_key_list_->GetCurrentGpgContextChannel(), - verify_result_analyse.GetUnknownSignatures()); - } else { - QMessageBox::information( - this, tr("Verification Incomplete"), - tr("Verification was incomplete due to missing " - "keys. You can manually import the keys later.")); - } - } - }); - }); + slot_verify_email_by_eml_data(buffer); } } // namespace GpgFrontend::UI
\ No newline at end of file diff --git a/src/ui/main_window/MainWindowSlotFunction.cpp b/src/ui/main_window/MainWindowSlotFunction.cpp index 19760e0f..8743c937 100644 --- a/src/ui/main_window/MainWindowSlotFunction.cpp +++ b/src/ui/main_window/MainWindowSlotFunction.cpp @@ -27,7 +27,6 @@ */ #include "MainWindow.h" -#include "core/function/gpg/GpgBasicOperator.h" #include "core/function/gpg/GpgKeyGetter.h" #include "core/function/gpg/GpgKeyImportExporter.h" #include "core/function/result_analyse/GpgDecryptResultAnalyse.h" @@ -47,7 +46,9 @@ #include "ui/dialog/help/AboutDialog.h" #include "ui/dialog/import_export/KeyUploadDialog.h" #include "ui/dialog/keypair_details/KeyDetailsDialog.h" +#include "ui/function/GpgOperaHelper.h" #include "ui/function/SetOwnerTrustLevel.h" +#include "ui/struct/GpgOperaResult.h" #include "ui/widgets/FindWidget.h" #include "ui/widgets/KeyList.h" #include "ui/widgets/TextEdit.h" @@ -72,17 +73,17 @@ void MainWindow::slot_find() { void MainWindow::slot_append_selected_keys() { auto key_ids = m_key_list_->GetSelected(); - if (key_ids->empty()) { + if (key_ids.empty()) { FLOG_W("no key is selected to export"); return; } auto key = GpgKeyGetter::GetInstance(m_key_list_->GetCurrentGpgContextChannel()) - .GetKey(key_ids->front()); + .GetKey(key_ids.front()); if (!key.IsGood()) { LOG_W() << "selected key for exporting is invalid, key id: " - << key_ids->front(); + << key_ids.front(); return; } @@ -98,20 +99,8 @@ void MainWindow::slot_append_selected_keys() { } void MainWindow::slot_append_keys_create_datetime() { - auto key_ids = m_key_list_->GetSelected(); - - if (key_ids->empty()) { - FLOG_W("no key is selected"); - return; - } - - auto key = - GpgKeyGetter::GetInstance(m_key_list_->GetCurrentGpgContextChannel()) - .GetKey(key_ids->front()); - if (!key.IsGood()) { - QMessageBox::critical(this, tr("Error"), tr("Key Not Found.")); - return; - } + auto [succ, key] = m_key_list_->GetSelectedGpgKey(); + if (!succ) return; auto create_datetime_format_str_local = QLocale().toString(key.GetCreateTime()) + " (" + tr("Localize") + ") " + @@ -124,20 +113,8 @@ void MainWindow::slot_append_keys_create_datetime() { } void MainWindow::slot_append_keys_expire_datetime() { - auto key_ids = m_key_list_->GetSelected(); - - if (key_ids->empty()) { - FLOG_W("no key is selected"); - return; - } - - auto key = - GpgKeyGetter::GetInstance(m_key_list_->GetCurrentGpgContextChannel()) - .GetKey(key_ids->front()); - if (!key.IsGood()) { - QMessageBox::critical(this, tr("Error"), tr("Key Not Found.")); - return; - } + auto [succ, key] = m_key_list_->GetSelectedGpgKey(); + if (!succ) return; auto expire_datetime_format_str_local = QLocale().toString(key.GetExpireTime()) + " (" + tr("Local Time") + ") " + @@ -150,16 +127,8 @@ void MainWindow::slot_append_keys_expire_datetime() { } void MainWindow::slot_append_keys_fingerprint() { - auto key_ids = m_key_list_->GetSelected(); - if (key_ids->empty()) return; - - auto key = - GpgKeyGetter::GetInstance(m_key_list_->GetCurrentGpgContextChannel()) - .GetKey(key_ids->front()); - if (!key.IsGood()) { - QMessageBox::critical(this, tr("Error"), tr("Key Not Found.")); - return; - } + auto [succ, key] = m_key_list_->GetSelectedGpgKey(); + if (!succ) return; auto fingerprint_format_str = BeautifyFingerprint(key.GetFingerprint()) + "\n"; @@ -168,72 +137,39 @@ void MainWindow::slot_append_keys_fingerprint() { } void MainWindow::slot_copy_mail_address_to_clipboard() { - auto key_ids = m_key_list_->GetSelected(); - if (key_ids->empty()) return; + auto [succ, key] = m_key_list_->GetSelectedGpgKey(); + if (!succ) return; - auto key = - GpgKeyGetter::GetInstance(m_key_list_->GetCurrentGpgContextChannel()) - .GetKey(key_ids->front()); - if (!key.IsGood()) { - QMessageBox::critical(this, tr("Error"), tr("Key Not Found.")); - return; - } QClipboard* cb = QApplication::clipboard(); cb->setText(key.GetEmail()); } void MainWindow::slot_copy_default_uid_to_clipboard() { - auto key_ids = m_key_list_->GetSelected(); - if (key_ids->empty()) return; + auto [succ, key] = m_key_list_->GetSelectedGpgKey(); + if (!succ) return; - auto key = - GpgKeyGetter::GetInstance(m_key_list_->GetCurrentGpgContextChannel()) - .GetKey(key_ids->front()); - if (!key.IsGood()) { - QMessageBox::critical(this, tr("Error"), tr("Key Not Found.")); - return; - } QClipboard* cb = QApplication::clipboard(); cb->setText(key.GetUIDs()->front().GetUID()); } void MainWindow::slot_copy_key_id_to_clipboard() { - auto key_ids = m_key_list_->GetSelected(); - if (key_ids->empty()) return; + auto [succ, key] = m_key_list_->GetSelectedGpgKey(); + if (!succ) return; - auto key = - GpgKeyGetter::GetInstance(m_key_list_->GetCurrentGpgContextChannel()) - .GetKey(key_ids->front()); - if (!key.IsGood()) { - QMessageBox::critical(this, tr("Error"), tr("Key Not Found.")); - return; - } QClipboard* cb = QApplication::clipboard(); cb->setText(key.GetId()); } void MainWindow::slot_show_key_details() { - auto key_ids = m_key_list_->GetSelected(); - if (key_ids->empty()) return; + auto [succ, key] = m_key_list_->GetSelectedGpgKey(); + if (!succ) return; - auto key = - GpgKeyGetter::GetInstance(m_key_list_->GetCurrentGpgContextChannel()) - .GetKey(key_ids->front()); - if (key.IsGood()) { - new KeyDetailsDialog(m_key_list_->GetCurrentGpgContextChannel(), key, this); - } else { - QMessageBox::critical(this, tr("Error"), tr("Key Not Found.")); - } + new KeyDetailsDialog(m_key_list_->GetCurrentGpgContextChannel(), key, this); } void MainWindow::slot_add_key_2_favorite() { - auto key_ids = m_key_list_->GetSelected(); - if (key_ids->empty()) return; - - auto key = - GpgKeyGetter::GetInstance(m_key_list_->GetCurrentGpgContextChannel()) - .GetKey(key_ids->front()); - if (!key.IsGood()) return; + auto [succ, key] = m_key_list_->GetSelectedGpgKey(); + if (!succ) return; auto key_db_name = GetGpgKeyDatabaseName(m_key_list_->GetCurrentGpgContextChannel()); @@ -246,11 +182,11 @@ void MainWindow::slot_add_key_2_favorite() { void MainWindow::slot_remove_key_from_favorite() { auto key_ids = m_key_list_->GetSelected(); - if (key_ids->empty()) return; + if (key_ids.empty()) return; auto key = GpgKeyGetter::GetInstance(m_key_list_->GetCurrentGpgContextChannel()) - .GetKey(key_ids->front()); + .GetKey(key_ids.front()); assert(key.IsGood()); auto key_db_name = @@ -263,17 +199,17 @@ void MainWindow::slot_remove_key_from_favorite() { void MainWindow::refresh_keys_from_key_server() { auto key_ids = m_key_list_->GetSelected(); - if (key_ids->empty()) return; + if (key_ids.empty()) return; CommonUtils::GetInstance()->ImportKeyFromKeyServer( - m_key_list_->GetCurrentGpgContextChannel(), *key_ids); + m_key_list_->GetCurrentGpgContextChannel(), key_ids); } void MainWindow::slot_set_owner_trust_level_of_key() { auto key_ids = m_key_list_->GetSelected(); - if (key_ids->empty()) return; + if (key_ids.empty()) return; auto* function = new SetOwnerTrustLevel(this); - function->Exec(m_key_list_->GetCurrentGpgContextChannel(), key_ids->front()); + function->Exec(m_key_list_->GetCurrentGpgContextChannel(), key_ids.front()); function->deleteLater(); } @@ -386,7 +322,7 @@ void MainWindow::slot_import_key_from_edit() { } void MainWindow::slot_verify_email_by_eml_data(const QByteArray& buffer) { - CommonUtils::WaitForOpera( + GpgOperaHelper::WaitForOpera( this, tr("Verifying"), [this, buffer](const OperaWaitingHd& hd) { Module::TriggerEvent( "EMAIL_VERIFY_EML_DATA", @@ -449,41 +385,39 @@ void MainWindow::SlotVerifyEML() { } void MainWindow::slot_verifying_unknown_signature_helper( - const GpgVerifyResultAnalyse& result_analyse) { - if (!Module::IsModuleActivate(kKeyServerSyncModuleID)) return; + const QStringList& fprs) { + if (!Module::IsModuleActivate(kKeyServerSyncModuleID) || fprs.empty()) return; - LOG_D() << "try to sync missing key info from server: " - << result_analyse.GetUnknownSignatures(); + auto fpr_set = QSet<QString>(fprs.begin(), fprs.end()); - QString fingerprint_list; - for (const auto& fingerprint : result_analyse.GetUnknownSignatures()) { - fingerprint_list += fingerprint + "\n"; + QString fpr_list; + for (const auto& fpr : fpr_set) { + fpr_list += fpr + "\n"; } + LOG_D() << "try to sync missing key info from server: " << fpr_set; + // Interaction with user auto user_response = QMessageBox::question(this, tr("Missing Keys"), tr("Some signatures cannot be verified because " - "the " - "corresponding keys are missing.\n\n" + "the corresponding keys are missing.\n\n" "The following fingerprints are " "missing:\n%1\n\n" "Would you like to fetch these keys from " - "the key " - "server?") - .arg(fingerprint_list), + "the key server?") + .arg(fpr_list), QMessageBox::Yes | QMessageBox::No); if (user_response == QMessageBox::Yes) { CommonUtils::GetInstance()->ImportKeyByKeyServerSyncModule( - this, m_key_list_->GetCurrentGpgContextChannel(), - result_analyse.GetUnknownSignatures()); + this, m_key_list_->GetCurrentGpgContextChannel(), fpr_set.values()); } else { - QMessageBox::information(this, tr("Verification Incomplete"), - tr("Verification was incomplete due to " - "missing " - "keys. You can manually import the keys " - "later.")); + QMessageBox::information( + this, tr("Verification Incomplete"), + tr("Verification was incomplete due to " + "missing keys. You can manually import the keys " + "later.")); } } @@ -556,6 +490,74 @@ void MainWindow::slot_result_analyse_show_helper( result_analyse.GetResultReport()); } +void MainWindow::slot_result_analyse_show_helper( + const QContainer<GpgOperaResult>& opera_results) { + if (opera_results.empty()) { + slot_refresh_info_board(0, ""); + return; + } + + int overall_status = 1; // Initialize to OK + QStringList report; + QStringList summary; + + QStringList failed_tags; + QStringList warning_tags; + + int success_count = 0; + int fail_count = 0; + int warn_count = 0; + + for (const auto& opera_result : opera_results) { + // Update overall status + overall_status = std::min(overall_status, opera_result.status); + + QString status_text; + if (opera_result.status < 0) { + status_text = tr("FAIL"); + failed_tags << opera_result.tag; + fail_count++; + } else if (opera_result.status > 0) { + status_text = tr("OK"); + success_count++; + } else { + status_text = tr("WARN"); + warning_tags << opera_result.tag; + warn_count++; + } + + // Append detailed report for each operation + report.append(QString("[ %1 ] %2\n\n%3\n") + .arg(status_text, opera_result.tag, opera_result.report)); + } + + // Prepare summary section + summary.append("# " + tr("Summary Report") + "\n\n"); + summary.append("- " + tr("Total Operations: %1\n").arg(opera_results.size())); + summary.append("- " + tr("Successful: %1\n").arg(success_count)); + summary.append("- " + tr("Warnings: %1\n").arg(warn_count)); + summary.append("- " + tr("Failures: %1\n").arg(fail_count)); + + if (!failed_tags.isEmpty()) { + summary.append("- " + + tr("Failed Objects: %1\n").arg(failed_tags.join(", "))); + } + + if (!warning_tags.isEmpty()) { + summary.append("- " + + tr("Warning Objects: %1\n").arg(warning_tags.join(", "))); + } + + // Display the final report in the info board + if (opera_results.size() == 1) { + slot_refresh_info_board(overall_status, report.join("")); + + } else { + slot_refresh_info_board(overall_status, + summary.join("") + "\n\n" + report.join("")); + } +} + void MainWindow::slot_refresh_info_board(int status, const QString& text) { info_board_->SlotReset(); @@ -648,7 +650,7 @@ void MainWindow::SlotEncryptEML() { } auto buffer = edit_->CurPlainText().toUtf8(); - CommonUtils::WaitForOpera( + GpgOperaHelper::WaitForOpera( this, tr("Encrypting"), [this, buffer, checked_keys](const OperaWaitingHd& hd) { Module::TriggerEvent( @@ -692,7 +694,7 @@ void MainWindow::SlotEncryptEML() { } } - LOG_E() << "mime or signature data is missing"; + return 0; }); }); } @@ -715,7 +717,7 @@ void MainWindow::SlotSignEML() { auto buffer = edit_->CurPlainText().toUtf8(); - CommonUtils::WaitForOpera( + GpgOperaHelper::WaitForOpera( this, tr("Signing"), [this, buffer, checked_keys](const OperaWaitingHd& hd) { Module::TriggerEvent( @@ -798,7 +800,7 @@ void MainWindow::SlotEncryptSignEML() { auto buffer = edit_->CurPlainText().toUtf8(); - CommonUtils::WaitForOpera( + GpgOperaHelper::WaitForOpera( this, tr("Encrypting and Signing"), [this, buffer, checked_keys, signer_keys](const OperaWaitingHd& hd) { Module::TriggerEvent( @@ -862,7 +864,7 @@ void MainWindow::SlotDecryptVerifyEML() { auto buffer = edit_->CurPlainText().toUtf8(); - CommonUtils::WaitForOpera( + GpgOperaHelper::WaitForOpera( this, tr("Decrypting and Verifying"), [this, buffer](const OperaWaitingHd& hd) { Module::TriggerEvent( @@ -1027,4 +1029,20 @@ auto MainWindow::handle_module_error(QMap<QString, QString> p) -> bool { return false; } +void MainWindow::slot_gpg_opera_buffer_show_helper( + const QContainer<GpgOperaResult>& results) { + for (const auto& result : results) { + if (result.o_buffer.Empty()) continue; + edit_->SlotFillTextEditWithText(result.o_buffer.ConvertToQByteArray()); + } +} + +void MainWindow::exec_operas_helper( + const QString& task, + const QSharedPointer<GpgOperaContextBasement>& contexts) { + GpgOperaHelper::WaitForMultipleOperas(this, task, contexts->operas); + slot_gpg_opera_buffer_show_helper(contexts->opera_results); + slot_result_analyse_show_helper(contexts->opera_results); +} + } // namespace GpgFrontend::UI diff --git a/src/ui/main_window/MainWindowSlotUI.cpp b/src/ui/main_window/MainWindowSlotUI.cpp index d3ba32b6..fd5c0d8f 100644 --- a/src/ui/main_window/MainWindowSlotUI.cpp +++ b/src/ui/main_window/MainWindowSlotUI.cpp @@ -31,12 +31,13 @@ #include "core/function/CacheManager.h" #include "core/function/gpg/GpgAdvancedOperator.h" #include "core/model/SettingsObject.h" -#include "core/module/ModuleManager.h" #include "ui/UserInterfaceUtils.h" #include "ui/dialog/Wizard.h" +#include "ui/dialog/settings/SettingsDialog.h" #include "ui/main_window/KeyMgmt.h" #include "ui/struct/settings_object/AppearanceSO.h" #include "ui/widgets/TextEdit.h" + namespace GpgFrontend::UI { void MainWindow::SlotSetStatusBarText(const QString& text) { @@ -103,15 +104,7 @@ void MainWindow::slot_open_settings_dialog() { connect(dialog, &SettingsDialog::finished, this, [&]() -> void { AppearanceSO appearance(SettingsObject("general_settings_state")); - this->setToolButtonStyle(appearance.tool_bar_button_style); - import_button_->setToolButtonStyle(appearance.tool_bar_button_style); - - // icons ize - this->setIconSize( - QSize(appearance.tool_bar_icon_width, appearance.tool_bar_icon_height)); - import_button_->setIconSize( - QSize(appearance.tool_bar_icon_width, appearance.tool_bar_icon_height)); - + restore_settings(); // restart main window if necessary if (restart_mode_ != kNonRestartCode) { if (edit_->MaybeSaveAnyTab()) { @@ -207,15 +200,10 @@ void MainWindow::SlotUpdateCryptoMenuStatus(unsigned int type) { void MainWindow::SlotGeneralEncrypt(bool) { if (edit_->CurPageFileTreeView() != nullptr) { - const auto* file_tree_view = edit_->CurPageFileTreeView(); - const auto path = file_tree_view->GetSelected(); - - const auto file_info = QFileInfo(path); - if (file_info.isFile()) { - this->SlotFileEncrypt(path); - } else if (file_info.isDir()) { - this->SlotDirectoryEncrypt(path); - } + const auto* file_page = edit_->CurPageFileTreeView(); + const auto paths = file_page->GetSelected(); + this->SlotFileEncrypt(paths, file_page->IsASCIIMode()); + return; } if (edit_->CurEMailPage() != nullptr) { @@ -231,18 +219,9 @@ void MainWindow::SlotGeneralEncrypt(bool) { void MainWindow::SlotGeneralDecrypt(bool) { if (edit_->CurPageFileTreeView() != nullptr) { const auto* file_tree_view = edit_->CurPageFileTreeView(); - const auto path = file_tree_view->GetSelected(); - - const auto file_info = QFileInfo(path); - if (file_info.isFile()) { - const QString extension = file_info.completeSuffix(); + const auto paths = file_tree_view->GetSelected(); - if (extension == "tar.gpg" || extension == "tar.asc") { - this->SlotArchiveDecrypt(path); - } else { - this->SlotFileDecrypt(path); - } - } + this->SlotFileDecrypt(paths); } if (edit_->CurEMailPage() != nullptr) { @@ -257,11 +236,10 @@ void MainWindow::SlotGeneralDecrypt(bool) { void MainWindow::SlotGeneralSign(bool) { if (edit_->CurPageFileTreeView() != nullptr) { - const auto* file_tree_view = edit_->CurPageFileTreeView(); - const auto path = file_tree_view->GetSelected(); - - const auto file_info = QFileInfo(path); - if (file_info.isFile()) this->SlotFileSign(path); + const auto* file_page = edit_->CurPageFileTreeView(); + const auto paths = file_page->GetSelected(); + this->SlotFileSign(paths, file_page->IsASCIIMode()); + return; } if (edit_->CurEMailPage() != nullptr) { @@ -275,10 +253,9 @@ void MainWindow::SlotGeneralSign(bool) { void MainWindow::SlotGeneralVerify(bool) { if (edit_->CurPageFileTreeView() != nullptr) { const auto* file_tree_view = edit_->CurPageFileTreeView(); - const auto path = file_tree_view->GetSelected(); + const auto paths = file_tree_view->GetSelected(); - const auto file_info = QFileInfo(path); - if (file_info.isFile()) this->SlotFileVerify(path); + this->SlotFileVerify(paths); } if (edit_->CurEMailPage() != nullptr) { @@ -291,15 +268,10 @@ void MainWindow::SlotGeneralVerify(bool) { void MainWindow::SlotGeneralEncryptSign(bool) { if (edit_->CurPageFileTreeView() != nullptr) { - const auto* file_tree_view = edit_->CurPageFileTreeView(); - const auto path = file_tree_view->GetSelected(); - - const auto file_info = QFileInfo(path); - if (file_info.isFile()) { - this->SlotFileEncryptSign(path); - } else if (file_info.isDir()) { - this->SlotDirectoryEncryptSign(path); - } + const auto* file_page = edit_->CurPageFileTreeView(); + const auto paths = file_page->GetSelected(); + this->SlotFileEncryptSign(paths, file_page->IsASCIIMode()); + return; } if (edit_->CurEMailPage() != nullptr) { @@ -315,18 +287,9 @@ void MainWindow::SlotGeneralEncryptSign(bool) { void MainWindow::SlotGeneralDecryptVerify(bool) { if (edit_->CurPageFileTreeView() != nullptr) { const auto* file_tree_view = edit_->CurPageFileTreeView(); - const auto path = file_tree_view->GetSelected(); + const auto paths = file_tree_view->GetSelected(); - const auto file_info = QFileInfo(path); - if (file_info.isFile()) { - const QString extension = file_info.completeSuffix(); - - if (extension == "tar.gpg" || extension == "tar.asc") { - this->SlotArchiveDecryptVerify(path); - } else { - this->SlotFileDecryptVerify(path); - } - } + this->SlotFileDecryptVerify(paths); } if (edit_->CurEMailPage() != nullptr) { @@ -368,12 +331,9 @@ void MainWindow::slot_reload_gpg_components(bool) { } void MainWindow::slot_restart_gpg_components(bool) { - GpgFrontend::GpgAdvancedOperator::RestartGpgComponents(); - Module::ListenRTPublishEvent( - this, "core", "gpg_advanced_operator.restart_gpg_components", - [=](Module::Namespace, Module::Key, int, std::any value) { - bool success_state = std::any_cast<bool>(value); - if (success_state) { + GpgFrontend::GpgAdvancedOperator::RestartGpgComponents( + [=](int err, DataObjectPtr) { + if (err >= 0) { QMessageBox::information( this, tr("Successful Operation"), tr("Restart all the GnuPG's components successfully")); diff --git a/src/ui/main_window/MainWindowUI.cpp b/src/ui/main_window/MainWindowUI.cpp index 59ad8401..a586a43b 100644 --- a/src/ui/main_window/MainWindowUI.cpp +++ b/src/ui/main_window/MainWindowUI.cpp @@ -148,7 +148,7 @@ void MainWindow::create_actions() { &MainWindow::SlotGeneralEncrypt); encrypt_sign_act_ = - create_action("encrypt_sign", tr("Encrypt Sign"), ":/icons/compress.png", + create_action("encrypt_sign", tr("Encrypt Sign"), ":/icons/encr-sign.png", tr("Encrypt and Sign Message"), {QKeySequence(Qt::CTRL | Qt::SHIFT | Qt::Key_E)}); connect(encrypt_sign_act_, &QAction::triggered, this, @@ -162,7 +162,7 @@ void MainWindow::create_actions() { decrypt_verify_act_ = create_action("decrypt_verify", tr("Decrypt Verify"), - ":/icons/expand.png", tr("Decrypt and Verify Message"), + ":/icons/decr-verify.png", tr("Decrypt and Verify Message"), {QKeySequence(Qt::CTRL | Qt::SHIFT | Qt::Key_D)}); connect(decrypt_verify_act_, &QAction::triggered, this, &MainWindow::SlotGeneralDecryptVerify); @@ -199,8 +199,7 @@ void MainWindow::create_actions() { }); bool forbid_all_gnupg_connection = - GlobalSettingStation::GetInstance() - .GetSettings() + GetSettings() .value("network/forbid_all_gnupg_connection", false) .toBool(); @@ -498,12 +497,7 @@ void MainWindow::create_tool_bars() { crypt_tool_bar_ = addToolBar(tr("Operations")); crypt_tool_bar_->setObjectName("cryptToolBar"); - crypt_tool_bar_->addAction(encrypt_act_); - // crypt_tool_bar_->addAction(encrypt_sign_act_); - crypt_tool_bar_->addAction(decrypt_act_); - // crypt_tool_bar_->addAction(decrypt_verify_act_); - crypt_tool_bar_->addAction(sign_act_); - crypt_tool_bar_->addAction(verify_act_); + view_menu_->addAction(crypt_tool_bar_->toggleViewAction()); key_tool_bar_ = addToolBar(tr("Key")); diff --git a/src/core/model/GpgKeyTableProxyModel.cpp b/src/ui/model/GpgKeyTableProxyModel.cpp index 9e23b707..9dc98bcd 100644 --- a/src/core/model/GpgKeyTableProxyModel.cpp +++ b/src/ui/model/GpgKeyTableProxyModel.cpp @@ -28,15 +28,13 @@ #include "GpgKeyTableProxyModel.h" -#include <utility> - #include "core/function/gpg/GpgKeyGetter.h" #include "core/model/CacheObject.h" #include "core/model/GpgKey.h" #include "core/struct/cache_object/AllFavoriteKeyPairsCO.h" #include "core/utils/GpgUtils.h" -namespace GpgFrontend { +namespace GpgFrontend::UI { GpgKeyTableProxyModel::GpgKeyTableProxyModel( QSharedPointer<GpgKeyTableModel> model, GpgKeyTableDisplayMode display_mode, @@ -45,7 +43,9 @@ GpgKeyTableProxyModel::GpgKeyTableProxyModel( model_(std::move(model)), display_mode_(display_mode), filter_columns_(columns), - custom_filter_(std::move(filter)) { + custom_filter_(std::move(filter)), + default_font_("Arial", 14), + default_metrics_(default_font_) { setSourceModel(model_.get()); connect(this, &GpgKeyTableProxyModel::SignalFavoritesChanged, this, @@ -197,4 +197,5 @@ void GpgKeyTableProxyModel::slot_update_favorites_cache() { favorite_key_ids_ = cache_obj.key_dbs[key_db_name].key_ids; } } -} // namespace GpgFrontend
\ No newline at end of file + +} // namespace GpgFrontend::UI
\ No newline at end of file diff --git a/src/core/model/GpgKeyTableProxyModel.h b/src/ui/model/GpgKeyTableProxyModel.h index 573d938b..bad1aa97 100644 --- a/src/core/model/GpgKeyTableProxyModel.h +++ b/src/ui/model/GpgKeyTableProxyModel.h @@ -28,14 +28,14 @@ #pragma once -#include <utility> +#include <QFont> +#include <QFontMetrics> #include "core/model/GpgKeyTableModel.h" -namespace GpgFrontend { +namespace GpgFrontend::UI { -class GPGFRONTEND_CORE_EXPORT GpgKeyTableProxyModel - : public QSortFilterProxyModel { +class GpgKeyTableProxyModel : public QSortFilterProxyModel { Q_OBJECT public: using KeyFilter = std::function<bool(const GpgKey &)>; @@ -95,8 +95,11 @@ class GPGFRONTEND_CORE_EXPORT GpgKeyTableProxyModel GpgKeyTableDisplayMode display_mode_; GpgKeyTableColumn filter_columns_; QString filter_keywords_; - QList<QString> favorite_key_ids_; + QStringList favorite_key_ids_; KeyFilter custom_filter_; + + QFont default_font_; + QFontMetrics default_metrics_; }; -} // namespace GpgFrontend
\ No newline at end of file +} // namespace GpgFrontend::UI
\ No newline at end of file diff --git a/src/ui/struct/GpgOperaResult.cpp b/src/ui/struct/GpgOperaResult.cpp new file mode 100644 index 00000000..9d612cc3 --- /dev/null +++ b/src/ui/struct/GpgOperaResult.cpp @@ -0,0 +1,36 @@ +/** + * Copyright (C) 2021-2024 Saturneric <[email protected]> + * + * This file is part of GpgFrontend. + * + * GpgFrontend is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GpgFrontend is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GpgFrontend. If not, see <https://www.gnu.org/licenses/>. + * + * The initial version of the source code is inherited from + * the gpg4usb project, which is under GPL-3.0-or-later. + * + * All the source code of GpgFrontend was modified and released by + * Saturneric <[email protected]> starting on May 12, 2021. + * + * SPDX-License-Identifier: GPL-3.0-or-later + * + */ + +#include "GpgOperaResult.h" + +namespace GpgFrontend::UI { + +GpgOperaResult::GpgOperaResult(int status, QString report, QString tag) + : status(status), report(std::move(report)), tag(std::move(tag)) {} + +} // namespace GpgFrontend::UI
\ No newline at end of file diff --git a/src/ui/struct/GpgOperaResult.h b/src/ui/struct/GpgOperaResult.h new file mode 100644 index 00000000..1f385736 --- /dev/null +++ b/src/ui/struct/GpgOperaResult.h @@ -0,0 +1,44 @@ +/** + * Copyright (C) 2021-2024 Saturneric <[email protected]> + * + * This file is part of GpgFrontend. + * + * GpgFrontend is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GpgFrontend is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GpgFrontend. If not, see <https://www.gnu.org/licenses/>. + * + * The initial version of the source code is inherited from + * the gpg4usb project, which is under GPL-3.0-or-later. + * + * All the source code of GpgFrontend was modified and released by + * Saturneric <[email protected]> starting on May 12, 2021. + * + * SPDX-License-Identifier: GPL-3.0-or-later + * + */ + +#pragma once + +#include "core/model/GFBuffer.h" + +namespace GpgFrontend::UI { + +struct GpgOperaResult { + int status; + QString report; + QString tag; + GFBuffer o_buffer; + + GpgOperaResult(int status, QString report, QString tag); +}; + +} // namespace GpgFrontend::UI
\ No newline at end of file diff --git a/src/ui/struct/GpgOperaResultContext.cpp b/src/ui/struct/GpgOperaResultContext.cpp new file mode 100644 index 00000000..b01f8788 --- /dev/null +++ b/src/ui/struct/GpgOperaResultContext.cpp @@ -0,0 +1,92 @@ +/** + * Copyright (C) 2021-2024 Saturneric <[email protected]> + * + * This file is part of GpgFrontend. + * + * GpgFrontend is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GpgFrontend is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GpgFrontend. If not, see <https://www.gnu.org/licenses/>. + * + * The initial version of the source code is inherited from + * the gpg4usb project, which is under GPL-3.0-or-later. + * + * All the source code of GpgFrontend was modified and released by + * Saturneric <[email protected]> starting on May 12, 2021. + * + * SPDX-License-Identifier: GPL-3.0-or-later + * + */ + +#include "GpgOperaResultContext.h" + +#include <utility> + +namespace GpgFrontend::UI { + +GpgOperaContext::GpgOperaContext(QSharedPointer<GpgOperaContextBasement> base) + : base(std::move(base)) {} + +auto GpgOperaContextBasement::GetContextPath(int category) -> QStringList& { + if (!categories.contains(category)) categories[category] = {}; + return categories[category].paths; +} + +auto GpgOperaContextBasement::GetContextOutPath(int category) -> QStringList& { + if (!categories.contains(category)) categories[category] = {}; + return categories[category].o_paths; +} + +auto GpgOperaContextBasement::GetContextBuffer(int category) + -> QContainer<GFBuffer>& { + if (!categories.contains(category)) categories[category] = {}; + return categories[category].buffers; +} + +auto GpgOperaContextBasement::GetAllPath() -> QStringList { + QStringList res; + + for (auto& category : categories) { + res.append(category.paths); + } + return res; +} + +auto GpgOperaContextBasement::GetAllOutPath() -> QStringList { + QStringList res; + + for (auto& category : categories) { + res.append(category.o_paths); + } + return res; +} + +auto GetGpgOperaContextFromBasement( + const QSharedPointer<GpgOperaContextBasement>& base, + int category) -> QSharedPointer<GpgOperaContext> { + if (!base->GetContextPath(category).isEmpty()) { + auto context = QSharedPointer<GpgOperaContext>::create(base); + + context->paths = base->GetContextPath(category); + context->o_paths = base->GetContextOutPath(category); + return context; + } + + if (!base->GetContextBuffer(category).isEmpty()) { + auto context = QSharedPointer<GpgOperaContext>::create(base); + + context->buffers = base->GetContextBuffer(category); + return context; + } + + return nullptr; +} +} // namespace GpgFrontend::UI
\ No newline at end of file diff --git a/src/ui/struct/GpgOperaResultContext.h b/src/ui/struct/GpgOperaResultContext.h new file mode 100644 index 00000000..58da0dc8 --- /dev/null +++ b/src/ui/struct/GpgOperaResultContext.h @@ -0,0 +1,83 @@ +/** + * Copyright (C) 2021-2024 Saturneric <[email protected]> + * + * This file is part of GpgFrontend. + * + * GpgFrontend is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GpgFrontend is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GpgFrontend. If not, see <https://www.gnu.org/licenses/>. + * + * The initial version of the source code is inherited from + * the gpg4usb project, which is under GPL-3.0-or-later. + * + * All the source code of GpgFrontend was modified and released by + * Saturneric <[email protected]> starting on May 12, 2021. + * + * SPDX-License-Identifier: GPL-3.0-or-later + * + */ + +#pragma once + +#include "core/typedef/CoreTypedef.h" +#include "core/typedef/GpgTypedef.h" +#include "ui/struct/GpgOperaResult.h" + +namespace GpgFrontend::UI { + +using OperaWaitingHd = std::function<void()>; +using OperaWaitingCb = std::function<void(OperaWaitingHd)>; + +struct GpgOperaCategory { + QStringList paths; + QStringList o_paths; + QContainer<GFBuffer> buffers; +}; + +struct GpgOperaContext; + +struct GpgOperaContextBasement { + QContainer<OperaWaitingCb> operas; + QContainer<GpgOperaResult> opera_results; + GpgKeyList keys; + GpgKeyList singer_keys; + QStringList unknown_fprs; + bool ascii; + + QMap<int, GpgOperaCategory> categories; + + auto GetContextPath(int category) -> QStringList&; + + auto GetContextOutPath(int category) -> QStringList&; + + auto GetContextBuffer(int category) -> QContainer<GFBuffer>&; + + auto GetAllPath() -> QStringList; + + auto GetAllOutPath() -> QStringList; +}; + +struct GpgOperaContext { + QSharedPointer<GpgOperaContextBasement> base; + + QStringList paths; + QStringList o_paths; + QContainer<GFBuffer> buffers; + + explicit GpgOperaContext(QSharedPointer<GpgOperaContextBasement> base); +}; + +auto GetGpgOperaContextFromBasement( + const QSharedPointer<GpgOperaContextBasement>& base, + int category) -> QSharedPointer<GpgOperaContext>; + +} // namespace GpgFrontend::UI
\ No newline at end of file diff --git a/src/ui/struct/settings_object/AppearanceSO.h b/src/ui/struct/settings_object/AppearanceSO.h index 4722ebd3..5f20d1fe 100644 --- a/src/ui/struct/settings_object/AppearanceSO.h +++ b/src/ui/struct/settings_object/AppearanceSO.h @@ -28,6 +28,8 @@ #pragma once +#include "core/typedef/GpgTypedef.h" + namespace GpgFrontend::UI { struct AppearanceSO { @@ -36,6 +38,9 @@ struct AppearanceSO { int tool_bar_icon_width = 24; int tool_bar_icon_height = 24; Qt::ToolButtonStyle tool_bar_button_style = Qt::ToolButtonTextUnderIcon; + int tool_bar_crypto_operas_type = GpgOperation::kENCRYPT | + GpgOperation::kDECRYPT | + GpgOperation::kSIGN | GpgOperation::kVERIFY; bool save_window_state; @@ -55,6 +60,9 @@ struct AppearanceSO { if (const auto v = j["tool_bar_button_style"]; v.isDouble()) { tool_bar_button_style = static_cast<Qt::ToolButtonStyle>(v.toInt()); } + if (const auto v = j["tool_bar_crypto_operas_type"]; v.isDouble()) { + tool_bar_crypto_operas_type = static_cast<int>(v.toInt()); + } if (const auto v = j["save_window_state"]; v.isBool()) { save_window_state = v.toBool(); @@ -68,6 +76,7 @@ struct AppearanceSO { j["tool_bar_icon_width"] = tool_bar_icon_width; j["tool_bar_icon_height"] = tool_bar_icon_height; j["tool_bar_button_style"] = tool_bar_button_style; + j["tool_bar_crypto_operas_type"] = tool_bar_crypto_operas_type; j["save_window_state"] = save_window_state; return j; diff --git a/src/ui/thread/KeyServerImportTask.cpp b/src/ui/thread/KeyServerImportTask.cpp index 2811919e..a7e0c339 100644 --- a/src/ui/thread/KeyServerImportTask.cpp +++ b/src/ui/thread/KeyServerImportTask.cpp @@ -28,17 +28,20 @@ #include "ui/thread/KeyServerImportTask.h" +#include <utility> + #include "core/function/gpg/GpgKeyImportExporter.h" #include "core/model/SettingsObject.h" #include "core/utils/BuildInfoUtils.h" #include "ui/struct/settings_object/KeyServerSO.h" -GpgFrontend::UI::KeyServerImportTask::KeyServerImportTask( - QString keyserver_url, int channel, std::vector<QString> keyids) +GpgFrontend::UI::KeyServerImportTask::KeyServerImportTask(QString keyserver_url, + int channel, + KeyIdArgsList key_ids) : Task("key_server_import_task"), keyserver_url_(std::move(keyserver_url)), current_gpg_context_channel_(channel), - keyids_(std::move(keyids)), + keyids_(std::move(key_ids)), manager_(new QNetworkAccessManager(this)) { HoldOnLifeCycle(true); diff --git a/src/ui/thread/KeyServerImportTask.h b/src/ui/thread/KeyServerImportTask.h index f5a3fcdb..4e98a43a 100644 --- a/src/ui/thread/KeyServerImportTask.h +++ b/src/ui/thread/KeyServerImportTask.h @@ -32,6 +32,7 @@ #include <qnetworkreply.h> #include "core/thread/Task.h" +#include "core/typedef/GpgTypedef.h" namespace GpgFrontend { class GpgImportInformation; @@ -48,8 +49,7 @@ class KeyServerImportTask : public Thread::Task { * @param keyserver_url * @param search_string */ - KeyServerImportTask(QString keyserver_url, int channel, - std::vector<QString> keyid); + KeyServerImportTask(QString keyserver_url, int channel, KeyIdArgsList keyids); /** * @brief @@ -78,7 +78,7 @@ class KeyServerImportTask : public Thread::Task { private: QString keyserver_url_; ///< int current_gpg_context_channel_; ///< - std::vector<QString> keyids_; ///< + KeyIdArgsList keyids_; ///< int result_count_ = 0; QNetworkAccessManager *manager_; ///< diff --git a/src/ui/thread/ListedKeyServerTestTask.cpp b/src/ui/thread/ListedKeyServerTestTask.cpp index 77c624dd..624e2b8b 100644 --- a/src/ui/thread/ListedKeyServerTestTask.cpp +++ b/src/ui/thread/ListedKeyServerTestTask.cpp @@ -40,8 +40,8 @@ GpgFrontend::UI::ListedKeyServerTestTask::ListedKeyServerTestTask( network_manager_(new QNetworkAccessManager(this)), timeout_(timeout) { HoldOnLifeCycle(true); - qRegisterMetaType<std::vector<KeyServerTestResultType>>( - "std::vector<KeyServerTestResultType>"); + qRegisterMetaType<QContainer<KeyServerTestResultType>>( + "QContainer<KeyServerTestResultType>"); } auto GpgFrontend::UI::ListedKeyServerTestTask::Run() -> int { diff --git a/src/ui/thread/ListedKeyServerTestTask.h b/src/ui/thread/ListedKeyServerTestTask.h index 4fff114a..b9a6700d 100644 --- a/src/ui/thread/ListedKeyServerTestTask.h +++ b/src/ui/thread/ListedKeyServerTestTask.h @@ -65,14 +65,14 @@ class ListedKeyServerTestTask : public Thread::Task { * @param result */ void SignalKeyServerListTestResult( - std::vector<KeyServerTestResultType> result); + QContainer<KeyServerTestResultType> result); private: - QStringList urls_; ///< - std::vector<KeyServerTestResultType> result_; ///< - QNetworkAccessManager* network_manager_; ///< - int timeout_ = 500; ///< - int result_count_ = 0; ///< + QStringList urls_; ///< + QContainer<KeyServerTestResultType> result_; ///< + QNetworkAccessManager* network_manager_; ///< + int timeout_ = 500; ///< + int result_count_ = 0; ///< /** * @brief diff --git a/src/ui/widgets/FilePage.cpp b/src/ui/widgets/FilePage.cpp index 998b4245..605ae1d2 100644 --- a/src/ui/widgets/FilePage.cpp +++ b/src/ui/widgets/FilePage.cpp @@ -29,6 +29,7 @@ #include "ui/widgets/FilePage.h" #include "core/GpgModel.h" +#include "core/function/GlobalSettingStation.h" #include "ui/UISignalStation.h" #include "ui/main_window/MainWindow.h" #include "ui_FilePage.h" @@ -42,6 +43,8 @@ FilePage::FilePage(QWidget* parent, const QString& target_path) ui_->setupUi(this); ui_->trewViewLayout->addWidget(file_tree_view_); + ui_->batchModeButton->setToolTip(tr("Switch Batch Mode")); + connect(ui_->upPathButton, &QPushButton::clicked, file_tree_view_, &FileTreeView::SlotUpLevel); connect(ui_->refreshButton, &QPushButton::clicked, this, @@ -71,8 +74,19 @@ FilePage::FilePage(QWidget* parent, const QString& target_path) connect(show_system_act, &QAction::triggered, file_tree_view_, &FileTreeView::SlotShowSystemFile); option_popup_menu_->addAction(show_system_act); + + auto* switch_asc_mode_act = new QAction(tr("ASCII Mode"), this); + switch_asc_mode_act->setCheckable(true); + connect(switch_asc_mode_act, &QAction::triggered, this, + [=](bool on) { ascii_mode_ = on; }); + option_popup_menu_->addAction(switch_asc_mode_act); + ui_->optionsButton->setMenu(option_popup_menu_); + ascii_mode_ = !( + GetSettings().value("gnupg/non_ascii_at_file_operation", true).toBool()); + switch_asc_mode_act->setChecked(ascii_mode_); + connect(ui_->pathEdit, &QLineEdit::textChanged, [=]() { auto path = ui_->pathEdit->text(); auto dir = QDir(path); @@ -100,16 +114,18 @@ FilePage::FilePage(QWidget* parent, const QString& target_path) UISignalStation::GetInstance(), &UISignalStation::SignalMainWindowOpenFile); connect(file_tree_view_, &FileTreeView::SignalSelectedChanged, this, - &FilePage::update_main_basical_opera_menu); + &FilePage::update_main_basic_opera_menu); connect(this, &FilePage::SignalCurrentTabChanged, this, - [this]() { update_main_basical_opera_menu(GetSelected()); }); - connect(this, &FilePage::SignalMainWindowlUpdateBasicalOperaMenu, + [this]() { update_main_basic_opera_menu(GetSelected()); }); + connect(this, &FilePage::SignalMainWindowUpdateBasicOperaMenu, UISignalStation::GetInstance(), - &UISignalStation::SignalMainWindowlUpdateBasicalOperaMenu); + &UISignalStation::SignalMainWindowUpdateBasicOperaMenu); + connect(ui_->batchModeButton, &QToolButton::toggled, file_tree_view_, + &FileTreeView::SlotSwitchBatchMode); } -auto FilePage::GetSelected() const -> QString { - return file_tree_view_->GetSelectedPath(); +auto FilePage::GetSelected() const -> QStringList { + return file_tree_view_->GetSelectedPaths(); } void FilePage::SlotGoPath() { @@ -123,43 +139,72 @@ void FilePage::keyPressEvent(QKeyEvent* event) { } } -void FilePage::update_main_basical_opera_menu(const QString& selected_path) { +void FilePage::update_main_basic_opera_menu(const QStringList& selected_paths) { + if (selected_paths.isEmpty()) { + emit SignalMainWindowUpdateBasicOperaMenu(MainWindow::OperationMenu::kNone); + return; + } + MainWindow::OperationMenu::OperationType operation_type = MainWindow::OperationMenu::kNone; - // abort... - if (selected_path.isEmpty()) return; + LOG_D() << "selected path size: " << selected_paths.size(); + LOG_D() << "selected paths: " << selected_paths; - QFileInfo const info(selected_path); + QContainer<QFileInfo> infos; - if ((info.isDir() || info.isFile()) && - (info.suffix() != "gpg" && info.suffix() != "pgp" && - info.suffix() != "sig" && info.suffix() != "asc")) { - operation_type |= MainWindow::OperationMenu::kEncrypt; + for (const auto& path : selected_paths) { + infos.append(QFileInfo(path)); } - if ((info.isDir() || info.isFile()) && - (info.suffix() != "gpg" && info.suffix() != "pgp" && - info.suffix() != "sig" && info.suffix() != "asc")) { - operation_type |= MainWindow::OperationMenu::kEncryptAndSign; - } + bool c_encr = + std::all_of(infos.cbegin(), infos.cend(), [](const QFileInfo& info) { + return (info.isDir() || info.isFile()) && + (info.suffix() != "gpg" && info.suffix() != "pgp" && + info.suffix() != "sig" && info.suffix() != "asc"); + }); - if (info.isFile() && (info.suffix() == "gpg" || info.suffix() == "pgp" || - info.suffix() == "asc")) { - operation_type |= MainWindow::OperationMenu::kDecrypt; - operation_type |= MainWindow::OperationMenu::kDecryptAndVerify; + if (c_encr) { + operation_type |= MainWindow::OperationMenu::kEncrypt | + MainWindow::OperationMenu::kEncryptAndSign; } - if (info.isFile() && (info.suffix() != "gpg" && info.suffix() != "pgp" && - info.suffix() != "sig" && info.suffix() != "asc")) { - operation_type |= MainWindow::OperationMenu::kSign; - } + bool c_decr = + std::all_of(infos.cbegin(), infos.cend(), [](const QFileInfo& info) { + return info.isFile() && + (info.suffix() == "gpg" || info.suffix() == "pgp" || + info.suffix() == "asc"); + }); - if (info.isFile() && (info.suffix() == "sig" || info.suffix() == "gpg" || - info.suffix() == "pgp" || info.suffix() == "asc")) { - operation_type |= MainWindow::OperationMenu::kVerify; + if (c_decr) { + operation_type |= MainWindow::OperationMenu::kDecrypt | + MainWindow::OperationMenu::kDecryptAndVerify; } - emit SignalMainWindowlUpdateBasicalOperaMenu(operation_type); + bool c_sign = + std::all_of(infos.cbegin(), infos.cend(), [](const QFileInfo& info) { + return info.isFile() && + (info.suffix() != "gpg" && info.suffix() != "pgp" && + info.suffix() != "sig" && info.suffix() != "asc"); + }); + + if (c_sign) operation_type |= MainWindow::OperationMenu::kSign; + + bool c_verify = + std::all_of(infos.cbegin(), infos.cend(), [](const QFileInfo& info) { + return info.isFile() && + (info.suffix() == "sig" || info.suffix() == "gpg" || + info.suffix() == "pgp" || info.suffix() == "asc"); + }); + + if (c_verify) operation_type |= MainWindow::OperationMenu::kVerify; + + emit SignalMainWindowUpdateBasicOperaMenu(operation_type); } + +auto FilePage::IsBatchMode() const -> bool { + return ui_->batchModeButton->isChecked(); +} + +auto FilePage::IsASCIIMode() const -> bool { return ascii_mode_; } } // namespace GpgFrontend::UI diff --git a/src/ui/widgets/FilePage.h b/src/ui/widgets/FilePage.h index aaa61589..7c90b62f 100644 --- a/src/ui/widgets/FilePage.h +++ b/src/ui/widgets/FilePage.h @@ -55,7 +55,23 @@ class FilePage : public QWidget { * * @return QString */ - [[nodiscard]] auto GetSelected() const -> QString; + [[nodiscard]] auto GetSelected() const -> QStringList; + + /** + * @brief + * + * @return true + * @return false + */ + [[nodiscard]] auto IsBatchMode() const -> bool; + + /** + * @brief + * + * @return true + * @return false + */ + [[nodiscard]] auto IsASCIIMode() const -> bool; public slots: /** @@ -92,7 +108,7 @@ class FilePage : public QWidget { * * @param int */ - void SignalMainWindowlUpdateBasicalOperaMenu(unsigned int); + void SignalMainWindowUpdateBasicOperaMenu(unsigned int); protected: /** @@ -111,6 +127,7 @@ class FilePage : public QWidget { QMenu* popup_menu_{}; ///< QMenu* option_popup_menu_{}; ///< FileTreeView* file_tree_view_; + bool ascii_mode_; private slots: @@ -118,7 +135,7 @@ class FilePage : public QWidget { * @brief * */ - void update_main_basical_opera_menu(const QString&); + void update_main_basic_opera_menu(const QStringList&); }; } // namespace GpgFrontend::UI diff --git a/src/ui/widgets/FileTreeView.cpp b/src/ui/widgets/FileTreeView.cpp index 500d9787..86411d79 100644 --- a/src/ui/widgets/FileTreeView.cpp +++ b/src/ui/widgets/FileTreeView.cpp @@ -31,13 +31,13 @@ #include "core/utils/AsyncUtils.h" #include "core/utils/IOUtils.h" #include "ui/UISignalStation.h" -#include "ui/UserInterfaceUtils.h" +#include "ui/function/GpgOperaHelper.h" namespace GpgFrontend::UI { FileTreeView::FileTreeView(QWidget* parent, const QString& target_path) : QTreeView(parent) { - dir_model_ = new QFileSystemModel(); + dir_model_ = new QFileSystemModel(this); dir_model_->setRootPath(target_path.isEmpty() ? QDir::currentPath() : target_path); dir_model_->setFilter(QDir::AllDirs | QDir::Files | QDir::NoDotAndDotDot); @@ -45,10 +45,12 @@ FileTreeView::FileTreeView(QWidget* parent, const QString& target_path) this->setModel(dir_model_); this->setColumnWidth(0, 320); this->sortByColumn(0, Qt::AscendingOrder); + this->setSortingEnabled(true); current_path_ = dir_model_->rootPath(); slot_create_popup_menu(); this->setContextMenuPolicy(Qt::CustomContextMenu); + this->setSelectionMode(QAbstractItemView::SingleSelection); connect(this, &QWidget::customContextMenuRequested, this, &FileTreeView::slot_show_custom_context_menu); @@ -64,16 +66,19 @@ void FileTreeView::selectionChanged(const QItemSelection& selected, const QItemSelection& deselected) { QTreeView::selectionChanged(selected, deselected); - if (!selected.indexes().empty()) { - selected_path_ = dir_model_->filePath(selected.indexes().first()); - emit SignalSelectedChanged(selected_path_); - } else { - selected_path_ = QString(); - if (!this->selectedIndexes().isEmpty()) { - selected_path_ = dir_model_->filePath(this->selectedIndexes().front()); - emit SignalSelectedChanged(selected_path_); + selected_paths_.clear(); + if (!this->selectedIndexes().isEmpty()) { + QSet<QString> paths; + for (const auto& index : this->selectedIndexes()) { + const auto path = dir_model_->filePath(index); + if (path == current_path_) continue; + + paths.insert(path); } + selected_paths_.append(paths.values()); } + + emit SignalSelectedChanged(selected_paths_); } void FileTreeView::SlotGoPath(const QString& target_path) { @@ -143,7 +148,7 @@ auto FileTreeView::GetPathByClickPoint(const QPoint& point) -> QString { return dir_model_->fileInfo(index).absoluteFilePath(); } -auto FileTreeView::GetSelectedPath() -> QString { return selected_path_; } +auto FileTreeView::GetSelectedPaths() -> QStringList { return selected_paths_; } auto FileTreeView::SlotDeleteSelectedItem() -> void { QModelIndex const index = this->currentIndex(); @@ -209,7 +214,9 @@ void FileTreeView::SlotTouch() { } void FileTreeView::SlotTouchBelowAtSelectedItem() { - auto root_path(selected_path_); + if (selected_paths_.size() != 1) return; + + auto root_path(selected_paths_.front()); if (root_path.isEmpty()) root_path = dir_model_->rootPath(); QString new_file_name; @@ -243,23 +250,29 @@ void FileTreeView::keyPressEvent(QKeyEvent* event) { } void FileTreeView::SlotOpenSelectedItemBySystemApplication() { - QFileInfo const info(selected_path_); + if (selected_paths_.size() != 1) return; + + auto selected_path = selected_paths_.front(); + QFileInfo const info(selected_path); if (info.isDir()) { const auto file_path = info.filePath().toUtf8(); - QDesktopServices::openUrl(QUrl::fromLocalFile(selected_path_)); + QDesktopServices::openUrl(QUrl::fromLocalFile(selected_path)); } else { - QDesktopServices::openUrl(QUrl::fromLocalFile(selected_path_)); + QDesktopServices::openUrl(QUrl::fromLocalFile(selected_path)); } } void FileTreeView::SlotRenameSelectedItem() { + if (selected_paths_.size() != 1) return; + bool ok; + auto selected_path = selected_paths_.front(); auto text = QInputDialog::getText(this, tr("Rename"), tr("New Filename"), QLineEdit::Normal, - QFileInfo(selected_path_).fileName(), &ok); + QFileInfo(selected_path).fileName(), &ok); if (ok && !text.isEmpty()) { - auto file_info = QFileInfo(selected_path_); + auto file_info = QFileInfo(selected_path); auto new_name_path = file_info.absolutePath() + "/" + text; if (!QDir().rename(file_info.absoluteFilePath(), new_name_path)) { @@ -282,8 +295,9 @@ void FileTreeView::slot_create_popup_menu() { action_open_file_ = new QAction(this); action_open_file_->setText(tr("Open")); - connect(action_open_file_, &QAction::triggered, this, - [this](bool) { emit SignalOpenFile(GetSelectedPath()); }); + connect(action_open_file_, &QAction::triggered, this, [this](bool) { + for (const auto& path : GetSelectedPaths()) emit SignalOpenFile(path); + }); action_rename_file_ = new QAction(this); action_rename_file_->setText(tr("Rename")); @@ -342,8 +356,11 @@ void FileTreeView::slot_create_popup_menu() { void FileTreeView::slot_show_custom_context_menu(const QPoint& point) { auto target_path = this->GetPathByClickPoint(point); - auto select_path = GetSelectedPath(); + auto select_paths = GetSelectedPaths(); + + if (select_paths.size() != 1) return; + auto select_path = select_paths.front(); if (target_path.isEmpty() && !select_path.isEmpty()) { target_path = select_path; } @@ -378,11 +395,14 @@ void FileTreeView::slot_show_custom_context_menu(const QPoint& point) { } void FileTreeView::slot_calculate_hash() { - CommonUtils::WaitForOpera( + if (GetSelectedPaths().empty()) return; + auto selected_path = GetSelectedPaths().front(); + + GpgOperaHelper::WaitForOpera( this->parentWidget(), tr("Calculating"), [=](const OperaWaitingHd& hd) { RunOperaAsync( [=](const DataObjectPtr& data_object) { - data_object->Swap({CalculateHash(this->GetSelectedPath())}); + data_object->Swap({CalculateHash(selected_path)}); return 0; }, [hd](int rtn, const DataObjectPtr& data_object) { @@ -420,4 +440,10 @@ void FileTreeView::slot_adjust_column_widths() { } } +void FileTreeView::SlotSwitchBatchMode(bool batch) { + this->setSelectionMode(batch ? QAbstractItemView::MultiSelection + : QAbstractItemView::SingleSelection); + selectionModel()->clearSelection(); +} + } // namespace GpgFrontend::UI diff --git a/src/ui/widgets/FileTreeView.h b/src/ui/widgets/FileTreeView.h index d99ff605..333e06bc 100644 --- a/src/ui/widgets/FileTreeView.h +++ b/src/ui/widgets/FileTreeView.h @@ -28,6 +28,8 @@ #pragma once +#include "core/typedef/CoreTypedef.h" + namespace GpgFrontend::UI { class FileTreeView : public QTreeView { @@ -53,7 +55,7 @@ class FileTreeView : public QTreeView { * * @return QString */ - auto GetSelectedPath() -> QString; + auto GetSelectedPaths() -> QStringList; /** * @brief Get the Path By Click Point object @@ -114,7 +116,7 @@ class FileTreeView : public QTreeView { * @brief * */ - void SignalSelectedChanged(const QString&); + void SignalSelectedChanged(const QStringList&); /** * @brief @@ -191,6 +193,12 @@ class FileTreeView : public QTreeView { */ void SlotOpenSelectedItemBySystemApplication(); + /** + * @brief + * + */ + void SlotSwitchBatchMode(bool); + private slots: /** @@ -234,7 +242,7 @@ class FileTreeView : public QTreeView { private: QFileSystemModel* dir_model_; ///< QString current_path_; ///< - QString selected_path_; ///< + QStringList selected_paths_; ///< QMenu* popup_menu_; QMenu* new_item_action_menu_; diff --git a/src/ui/widgets/HelpPage.cpp b/src/ui/widgets/HelpPage.cpp index 314f6093..6d6b857d 100644 --- a/src/ui/widgets/HelpPage.cpp +++ b/src/ui/widgets/HelpPage.cpp @@ -66,10 +66,7 @@ auto HelpPage::localized_help(const QUrl& url) -> QUrl { QStringList fileparts = filename.split("."); // QSettings settings; - QString lang = GlobalSettingStation::GetInstance() - .GetSettings() - .value("int/lang", QLocale().name()) - .toString(); + QString lang = GetSettings().value("int/lang", QLocale().name()).toString(); if (lang.isEmpty()) { lang = QLocale().name(); } diff --git a/src/ui/widgets/KeyList.cpp b/src/ui/widgets/KeyList.cpp index 9498480e..4e581d81 100644 --- a/src/ui/widgets/KeyList.cpp +++ b/src/ui/widgets/KeyList.cpp @@ -33,7 +33,6 @@ #include "core/function/GlobalSettingStation.h" #include "core/function/gpg/GpgKeyGetter.h" -#include "core/module/ModuleManager.h" #include "core/utils/GpgUtils.h" #include "ui/UISignalStation.h" #include "ui/UserInterfaceUtils.h" @@ -51,8 +50,7 @@ KeyList::KeyList(int channel, KeyMenuAbility menu_ability, model_(GpgKeyGetter::GetInstance(channel).GetGpgKeyTableModel()), fixed_columns_filter_(fixed_columns_filter), global_column_filter_(static_cast<GpgKeyTableColumn>( - GlobalSettingStation::GetInstance() - .GetSettings() + GetSettings() .value("keys/global_columns_filter", static_cast<unsigned int>(GpgKeyTableColumn::kALL)) .toUInt())) { @@ -211,8 +209,7 @@ void KeyList::init() { popup_menu_ = new QMenu(this); auto forbid_all_gnupg_connection = - GlobalSettingStation::GetInstance() - .GetSettings() + GetSettings() .value("network/forbid_all_gnupg_connection", false) .toBool(); @@ -244,9 +241,8 @@ void KeyList::init() { UISignalStation::GetInstance(), &UISignalStation::SignalRefreshStatusBar); connect(this, &KeyList::SignalColumnTypeChange, this, [=]() { - GlobalSettingStation::GetInstance().GetSettings().setValue( - "keys/global_columns_filter", - static_cast<unsigned int>(global_column_filter_)); + GetSettings().setValue("keys/global_columns_filter", + static_cast<unsigned int>(global_column_filter_)); }); setAcceptDrops(true); @@ -307,22 +303,22 @@ void KeyList::SlotRefreshUI() { ui_->syncButton->setDisabled(false); } -auto KeyList::GetChecked(const KeyTable& key_table) -> KeyIdArgsListPtr { - auto ret = std::make_unique<KeyIdArgsList>(); +auto KeyList::GetChecked(const KeyTable& key_table) -> KeyIdArgsList { + auto ret = KeyIdArgsList{}; for (int i = 0; i < key_table.GetRowCount(); i++) { if (key_table.IsRowChecked(i)) { - ret->push_back(key_table.GetKeyIdByRow(i)); + ret.push_back(key_table.GetKeyIdByRow(i)); } } return ret; } -auto KeyList::GetChecked() -> KeyIdArgsListPtr { +auto KeyList::GetChecked() -> KeyIdArgsList { auto* key_table = qobject_cast<KeyTable*>(ui_->keyGroupTab->currentWidget()); - auto ret = std::make_unique<KeyIdArgsList>(); + auto ret = KeyIdArgsList{}; for (int i = 0; i < key_table->GetRowCount(); i++) { if (key_table->IsRowChecked(i)) { - ret->push_back(key_table->GetKeyIdByRow(i)); + ret.push_back(key_table->GetKeyIdByRow(i)); } } return ret; @@ -339,59 +335,59 @@ auto KeyList::GetCheckedKeys() -> QStringList { return key_id_list; } -auto KeyList::GetAllPrivateKeys() -> KeyIdArgsListPtr { +auto KeyList::GetAllPrivateKeys() -> KeyIdArgsList { auto* key_table = qobject_cast<KeyTable*>(ui_->keyGroupTab->currentWidget()); - auto ret = std::make_unique<KeyIdArgsList>(); + auto ret = KeyIdArgsList{}; for (int i = 0; i < key_table->GetRowCount(); i++) { if (key_table->IsPrivateKeyByRow(i)) { - ret->push_back(key_table->GetKeyIdByRow(i)); + ret.push_back(key_table->GetKeyIdByRow(i)); } } return ret; } -auto KeyList::GetCheckedPrivateKey() -> KeyIdArgsListPtr { - auto ret = std::make_unique<KeyIdArgsList>(); +auto KeyList::GetCheckedPrivateKey() -> KeyIdArgsList { + auto ret = KeyIdArgsList{}; if (ui_->keyGroupTab->size().isEmpty()) return ret; auto* key_table = qobject_cast<KeyTable*>(ui_->keyGroupTab->currentWidget()); for (int i = 0; i < key_table->GetRowCount(); i++) { if (key_table->IsRowChecked(i) && key_table->IsPrivateKeyByRow(i)) { - ret->push_back(key_table->GetKeyIdByRow(i)); + ret.push_back(key_table->GetKeyIdByRow(i)); } } return ret; } -auto KeyList::GetCheckedPublicKey() -> KeyIdArgsListPtr { - auto ret = std::make_unique<KeyIdArgsList>(); +auto KeyList::GetCheckedPublicKey() -> KeyIdArgsList { + auto ret = KeyIdArgsList{}; if (ui_->keyGroupTab->size().isEmpty()) return ret; auto* key_table = qobject_cast<KeyTable*>(ui_->keyGroupTab->currentWidget()); for (int i = 0; i < key_table->GetRowCount(); i++) { if (key_table->IsRowChecked(i) && key_table->IsPublicKeyByRow(i)) { - ret->push_back(key_table->GetKeyIdByRow(i)); + ret.push_back(key_table->GetKeyIdByRow(i)); } } return ret; } -void KeyList::SetChecked(const KeyIdArgsListPtr& keyIds, +void KeyList::SetChecked(const KeyIdArgsList& keyIds, const KeyTable& key_table) { - if (!keyIds->empty()) { + if (!keyIds.empty()) { for (int i = 0; i < key_table.GetRowCount(); i++) { - if (std::find(keyIds->begin(), keyIds->end(), - key_table.GetKeyIdByRow(i)) != keyIds->end()) { + if (std::find(keyIds.begin(), keyIds.end(), key_table.GetKeyIdByRow(i)) != + keyIds.end()) { key_table.SetRowChecked(i); } } } } -auto KeyList::GetSelected() -> KeyIdArgsListPtr { - auto ret = std::make_unique<KeyIdArgsList>(); +auto KeyList::GetSelected() -> KeyIdArgsList { + auto ret = KeyIdArgsList{}; if (ui_->keyGroupTab->size().isEmpty()) return ret; auto* key_table = qobject_cast<KeyTable*>(ui_->keyGroupTab->currentWidget()); @@ -402,10 +398,10 @@ auto KeyList::GetSelected() -> KeyIdArgsListPtr { QItemSelectionModel* select = key_table->selectionModel(); for (auto index : select->selectedRows()) { - ret->push_back(key_table->GetKeyIdByRow(index.row())); + ret.push_back(key_table->GetKeyIdByRow(index.row())); } - if (ret->empty()) { + if (ret.empty()) { FLOG_W("nothing is selected at key list"); } return ret; @@ -482,10 +478,8 @@ void KeyList::dropEvent(QDropEvent* event) { // "always import keys"-CheckBox auto* check_box = new QCheckBox(tr("Always import without bothering.")); - auto confirm_import_keys = GlobalSettingStation::GetInstance() - .GetSettings() - .value("basic/confirm_import_keys", true) - .toBool(); + auto confirm_import_keys = + GetSettings().value("basic/confirm_import_keys", true).toBool(); if (confirm_import_keys) check_box->setCheckState(Qt::Checked); // Buttons for ok and cancel @@ -505,7 +499,7 @@ void KeyList::dropEvent(QDropEvent* event) { dialog->exec(); if (dialog->result() == QDialog::Rejected) return; - auto settings = GlobalSettingStation::GetInstance().GetSettings(); + auto settings = GetSettings(); settings.setValue("basic/confirm_import_keys", check_box->isChecked()); } @@ -539,23 +533,6 @@ void KeyList::import_keys(const QByteArray& in_buffer) { (new KeyImportDetailDialog(current_gpg_context_channel_, result, this)); } -void KeyList::slot_double_clicked(const QModelIndex& index) { - if (ui_->keyGroupTab->size().isEmpty()) return; - - auto* key_table = qobject_cast<KeyTable*>(ui_->keyGroupTab->currentWidget()); - if (m_action_ != nullptr) { - const auto key = GpgKeyGetter::GetInstance(current_gpg_context_channel_) - .GetKey(key_table->GetKeyIdByRow(index.row())); - assert(key.IsGood()); - m_action_(key, this); - } -} - -void KeyList::SetDoubleClickedAction( - std::function<void(const GpgKey&, QWidget*)> action) { - this->m_action_ = std::move(action); -} - auto KeyList::GetSelectedKey() -> QString { if (ui_->keyGroupTab->size().isEmpty()) return {}; @@ -573,7 +550,7 @@ void KeyList::slot_sync_with_key_server() { auto checked_public_keys = GetCheckedPublicKey(); KeyIdArgsList key_ids; - if (checked_public_keys->empty()) { + if (checked_public_keys.empty()) { QMessageBox::StandardButton const reply = QMessageBox::question( this, QCoreApplication::tr("Sync All Public Key"), QCoreApplication::tr("You have not checked any public keys that you " @@ -589,7 +566,7 @@ void KeyList::slot_sync_with_key_server() { } } else { - key_ids = *checked_public_keys; + key_ids = checked_public_keys; } if (key_ids.empty()) return; @@ -656,4 +633,19 @@ void KeyList::UpdateKeyTableColumnType(GpgKeyTableColumn column_type) { auto KeyList::GetCurrentGpgContextChannel() const -> int { return current_gpg_context_channel_; } + +auto KeyList::GetSelectedGpgKey() -> std::tuple<bool, GpgKey> { + auto key_ids = GetSelected(); + if (key_ids.empty()) return {false, GpgKey()}; + + auto key = GpgKeyGetter::GetInstance(GetCurrentGpgContextChannel()) + .GetKey(key_ids.front()); + + if (!key.IsGood()) { + QMessageBox::critical(this, tr("Error"), tr("Key Not Found.")); + return {false, GpgKey()}; + } + + return {true, key}; +} } // namespace GpgFrontend::UI diff --git a/src/ui/widgets/KeyList.h b/src/ui/widgets/KeyList.h index 4216eba8..868c5b07 100644 --- a/src/ui/widgets/KeyList.h +++ b/src/ui/widgets/KeyList.h @@ -109,14 +109,6 @@ class KeyList : public QWidget { GpgKeyTableColumn custom_columns_filter = GpgKeyTableColumn::kALL); /** - * @brief Set the Double Clicked Action object - * - * @param action - */ - void SetDoubleClickedAction( - std::function<void(const GpgKey&, QWidget*)> action); - - /** * @brief Set the Column Width object * * @param row @@ -142,7 +134,7 @@ class KeyList : public QWidget { * * @return KeyIdArgsListPtr */ - auto GetChecked() -> KeyIdArgsListPtr; + auto GetChecked() -> KeyIdArgsList; /** * @brief Get the Checked Keys object @@ -157,28 +149,28 @@ class KeyList : public QWidget { * @param key_table * @return KeyIdArgsListPtr */ - static auto GetChecked(const KeyTable& key_table) -> KeyIdArgsListPtr; + static auto GetChecked(const KeyTable& key_table) -> KeyIdArgsList; /** * @brief Get the Private Checked object * * @return KeyIdArgsListPtr */ - auto GetCheckedPrivateKey() -> KeyIdArgsListPtr; + auto GetCheckedPrivateKey() -> KeyIdArgsList; /** * @brief * * @return KeyIdArgsListPtr */ - auto GetCheckedPublicKey() -> KeyIdArgsListPtr; + auto GetCheckedPublicKey() -> KeyIdArgsList; /** * @brief Get the All Private Keys object * * @return KeyIdArgsListPtr */ - auto GetAllPrivateKeys() -> KeyIdArgsListPtr; + auto GetAllPrivateKeys() -> KeyIdArgsList; /** * @brief Set the Checked object @@ -186,7 +178,7 @@ class KeyList : public QWidget { * @param keyIds * @param key_table */ - static void SetChecked(const KeyIdArgsListPtr& key_ids, + static void SetChecked(const KeyIdArgsList& key_ids, const KeyTable& key_table); /** @@ -194,7 +186,7 @@ class KeyList : public QWidget { * * @return KeyIdArgsListPtr */ - auto GetSelected() -> KeyIdArgsListPtr; + auto GetSelected() -> KeyIdArgsList; /** * @brief Get the Selected Key object @@ -204,6 +196,13 @@ class KeyList : public QWidget { auto GetSelectedKey() -> QString; /** + * @brief Get the Selected Gpg Key object + * + * @return GpgKey + */ + auto GetSelectedGpgKey() -> std::tuple<bool, GpgKey>; + + /** * @brief * * @return true @@ -239,8 +238,6 @@ class KeyList : public QWidget { */ void SignalRefreshDatabase(); - signals: - /** * @brief * @@ -314,13 +311,6 @@ class KeyList : public QWidget { /** * @brief * - * @param index - */ - void slot_double_clicked(const QModelIndex& index); - - /** - * @brief - * */ void slot_sync_with_key_server(); diff --git a/src/ui/widgets/KeyTable.cpp b/src/ui/widgets/KeyTable.cpp index bda294a4..10ebe6eb 100644 --- a/src/ui/widgets/KeyTable.cpp +++ b/src/ui/widgets/KeyTable.cpp @@ -34,10 +34,10 @@ namespace GpgFrontend::UI { -auto KeyTable::GetChecked() const -> KeyIdArgsListPtr { - auto ret = std::make_unique<KeyIdArgsList>(); +auto KeyTable::GetChecked() const -> KeyIdArgsList { + auto ret = KeyIdArgsList{}; for (decltype(GetRowCount()) i = 0; i < GetRowCount(); i++) { - if (IsRowChecked(i)) ret->push_back(GetKeyIdByRow(i)); + if (IsRowChecked(i)) ret.push_back(GetKeyIdByRow(i)); } return ret; } @@ -54,8 +54,7 @@ KeyTable::KeyTable(QWidget* parent, QSharedPointer<GpgKeyTableModel> model, verticalHeader()->hide(); horizontalHeader()->setStretchLastSection(false); - setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred); - + horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents); setShowGrid(false); sortByColumn(2, Qt::AscendingOrder); setSelectionBehavior(QAbstractItemView::SelectRows); @@ -77,6 +76,8 @@ KeyTable::KeyTable(QWidget* parent, QSharedPointer<GpgKeyTableModel> model, }); connect(this, &QTableView::doubleClicked, this, [this](const QModelIndex& index) { + if (!index.isValid() || index.column() == 0) return; + auto key = GpgKeyGetter::GetInstance(model_->GetGpgContextChannel()) .GetKey(GetKeyIdByRow(index.row())); if (!key.IsGood()) { @@ -146,4 +147,5 @@ void KeyTable::UncheckAll() { return selected_indexes.first().row(); } + } // namespace GpgFrontend::UI
\ No newline at end of file diff --git a/src/ui/widgets/KeyTable.h b/src/ui/widgets/KeyTable.h index a03a1c83..fe73bc98 100644 --- a/src/ui/widgets/KeyTable.h +++ b/src/ui/widgets/KeyTable.h @@ -30,7 +30,7 @@ #include "core/model/GpgKey.h" #include "core/model/GpgKeyTableModel.h" -#include "core/model/GpgKeyTableProxyModel.h" +#include "ui/model/GpgKeyTableProxyModel.h" namespace GpgFrontend::UI { @@ -70,7 +70,7 @@ struct KeyTable : public QTableView { * * @return KeyIdArgsListPtr& */ - [[nodiscard]] auto GetChecked() const -> KeyIdArgsListPtr; + [[nodiscard]] auto GetChecked() const -> KeyIdArgsList; /** * @brief @@ -175,7 +175,6 @@ struct KeyTable : public QTableView { private: QSharedPointer<GpgKeyTableModel> model_; GpgKeyTableProxyModel proxy_model_; - GpgKeyTableColumn column_filter_; }; diff --git a/src/ui/widgets/TextEditTabWidget.cpp b/src/ui/widgets/TextEditTabWidget.cpp index 4377a424..0427a6e8 100644 --- a/src/ui/widgets/TextEditTabWidget.cpp +++ b/src/ui/widgets/TextEditTabWidget.cpp @@ -201,7 +201,7 @@ auto TextEditTabWidget::stripped_name(const QString& full_file_name) void TextEditTabWidget::slot_save_status_to_cache_for_recovery() { if (this->text_page_data_modified_count_++ % 8 != 0) return; - auto settings = GlobalSettingStation::GetInstance().GetSettings(); + auto settings = GetSettings(); bool restore_text_editor_page = settings.value("basic/restore_text_editor_page", false).toBool(); @@ -211,7 +211,7 @@ void TextEditTabWidget::slot_save_status_to_cache_for_recovery() { } int tab_count = this->count(); - std::vector<std::tuple<int, QString, QString>> unsaved_pages; + QContainer<std::tuple<int, QString, QString>> unsaved_pages; for (int i = 0; i < tab_count; i++) { auto* target_page = qobject_cast<PlainTextEditorPage*>(this->widget(i)); @@ -324,8 +324,8 @@ void TextEditTabWidget::slot_file_page_path_changed(const QString& path) { } this->setTabText(index, m_path); - emit UISignalStation::GetInstance() - -> SignalMainWindowlUpdateBasicalOperaMenu(0); + emit UISignalStation::GetInstance() -> SignalMainWindowUpdateBasicOperaMenu( + 0); } } // namespace GpgFrontend::UI diff --git a/src/ui/widgets/VerifyKeyDetailBox.cpp b/src/ui/widgets/VerifyKeyDetailBox.cpp index 387fd36e..079c0e9d 100644 --- a/src/ui/widgets/VerifyKeyDetailBox.cpp +++ b/src/ui/widgets/VerifyKeyDetailBox.cpp @@ -49,8 +49,7 @@ VerifyKeyDetailBox::VerifyKeyDetailBox(int channel, this->setTitle("A Error Signature"); bool forbid_all_gnupg_connection = - GlobalSettingStation::GetInstance() - .GetSettings() + GetSettings() .value("network/forbid_all_gnupg_connection", false) .toBool(); diff --git a/ui/AppearanceSettings.ui b/ui/AppearanceSettings.ui index aed30461..ed6acea6 100644 --- a/ui/AppearanceSettings.ui +++ b/ui/AppearanceSettings.ui @@ -173,13 +173,82 @@ </item> </layout> </item> + <item row="2" column="0"> + <layout class="QHBoxLayout" name="horizontalLayout_6"> + <item> + <widget class="QLabel" name="label"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>Crypto Operations</string> + </property> + <property name="alignment"> + <set>Qt::AlignmentFlag::AlignLeading|Qt::AlignmentFlag::AlignLeft|Qt::AlignmentFlag::AlignTop</set> + </property> + </widget> + </item> + <item> + <layout class="QGridLayout" name="gridLayout_3" rowstretch="0,0,0,0,0,0,0" columnstretch="0,0" rowminimumheight="0,0,0,0,0,0,0"> + <property name="sizeConstraint"> + <enum>QLayout::SizeConstraint::SetDefaultConstraint</enum> + </property> + <item row="3" column="1"> + <widget class="QCheckBox" name="verifyCheckBox"> + <property name="text"> + <string>Verify</string> + </property> + </widget> + </item> + <item row="6" column="0" colspan="2"> + <widget class="QCheckBox" name="decrVerifyCheckBox"> + <property name="text"> + <string>Decrypt Verify</string> + </property> + </widget> + </item> + <item row="5" column="0" colspan="2"> + <widget class="QCheckBox" name="encrSignCheckBox"> + <property name="text"> + <string>Encrypt Sign</string> + </property> + </widget> + </item> + <item row="0" column="0"> + <widget class="QCheckBox" name="encrCheckBox"> + <property name="text"> + <string>Encrypt</string> + </property> + </widget> + </item> + <item row="3" column="0"> + <widget class="QCheckBox" name="signCheckBox"> + <property name="text"> + <string>Sign</string> + </property> + </widget> + </item> + <item row="0" column="1"> + <widget class="QCheckBox" name="decrCheckBox"> + <property name="text"> + <string>Decrypt</string> + </property> + </widget> + </item> + </layout> + </item> + </layout> + </item> </layout> </widget> </item> <item> <spacer name="verticalSpacer"> <property name="orientation"> - <enum>Qt::Vertical</enum> + <enum>Qt::Orientation::Vertical</enum> </property> <property name="sizeHint" stdset="0"> <size> diff --git a/ui/FilePage.ui b/ui/FilePage.ui index 5ee3058e..b9ae7043 100644 --- a/ui/FilePage.ui +++ b/ui/FilePage.ui @@ -44,20 +44,20 @@ <item row="0" column="0"> <layout class="QVBoxLayout" name="verticalLayout"> <property name="sizeConstraint"> - <enum>QLayout::SetMaximumSize</enum> + <enum>QLayout::SizeConstraint::SetMaximumSize</enum> </property> <item> <layout class="QVBoxLayout" name="verticalLayout_2"> <property name="sizeConstraint"> - <enum>QLayout::SetMaximumSize</enum> + <enum>QLayout::SizeConstraint::SetMaximumSize</enum> </property> <item> - <layout class="QHBoxLayout" name="horizontalLayout_2" stretch="0,0,0,0,0"> + <layout class="QHBoxLayout" name="horizontalLayout_2" stretch="0,0,0,0,0,0"> <property name="spacing"> <number>5</number> </property> <property name="sizeConstraint"> - <enum>QLayout::SetDefaultConstraint</enum> + <enum>QLayout::SizeConstraint::SetDefaultConstraint</enum> </property> <property name="leftMargin"> <number>5</number> @@ -142,6 +142,29 @@ </widget> </item> <item> + <widget class="QToolButton" name="batchModeButton"> + <property name="toolTip"> + <string>Switch Batch Mode</string> + </property> + <property name="text"> + <string>...</string> + </property> + <property name="icon"> + <iconset resource="../gpgfrontend.qrc"> + <normaloff>:/icons/batch.png</normaloff>:/icons/batch.png</iconset> + </property> + <property name="checkable"> + <bool>true</bool> + </property> + <property name="popupMode"> + <enum>QToolButton::ToolButtonPopupMode::InstantPopup</enum> + </property> + <property name="autoRaise"> + <bool>false</bool> + </property> + </widget> + </item> + <item> <widget class="QToolButton" name="optionsButton"> <property name="sizePolicy"> <sizepolicy hsizetype="Minimum" vsizetype="Fixed"> @@ -157,10 +180,10 @@ <normaloff>:/icons/configure.png</normaloff>:/icons/configure.png</iconset> </property> <property name="popupMode"> - <enum>QToolButton::InstantPopup</enum> + <enum>QToolButton::ToolButtonPopupMode::InstantPopup</enum> </property> <property name="toolButtonStyle"> - <enum>Qt::ToolButtonIconOnly</enum> + <enum>Qt::ToolButtonStyle::ToolButtonIconOnly</enum> </property> </widget> </item> diff --git a/ui/GeneralSettings.ui b/ui/GeneralSettings.ui index 78f3bb6a..dde687b9 100644 --- a/ui/GeneralSettings.ui +++ b/ui/GeneralSettings.ui @@ -59,13 +59,6 @@ </widget> </item> <item> - <widget class="QCheckBox" name="longerKeyExpirationDateCheckBox"> - <property name="text"> - <string>Enable to use longer key expiration date.</string> - </property> - </widget> - </item> - <item> <widget class="QCheckBox" name="disableLoadingModulesCheckBox"> <property name="text"> <string>Disable loading of all modules (including integrated modules)</string> @@ -88,7 +81,7 @@ <item> <widget class="QComboBox" name="langSelectBox"> <property name="sizeAdjustPolicy"> - <enum>QComboBox::AdjustToContents</enum> + <enum>QComboBox::SizeAdjustPolicy::AdjustToContents</enum> </property> </widget> </item> @@ -141,7 +134,7 @@ <item> <spacer name="verticalSpacer"> <property name="orientation"> - <enum>Qt::Vertical</enum> + <enum>Qt::Orientation::Vertical</enum> </property> <property name="sizeHint" stdset="0"> <size> diff --git a/ui/KeyDatabaseEditDialog.ui b/ui/KeyDatabaseEditDialog.ui index 83a8862d..704fc602 100644 --- a/ui/KeyDatabaseEditDialog.ui +++ b/ui/KeyDatabaseEditDialog.ui @@ -58,6 +58,13 @@ </widget> </item> <item> + <widget class="QCheckBox" name="convert2RelativePathCheckBox"> + <property name="text"> + <string>Convert to Relative Path</string> + </property> + </widget> + </item> + <item> <spacer name="verticalSpacer"> <property name="orientation"> <enum>Qt::Orientation::Vertical</enum> diff --git a/ui/KeyGenDialog.ui b/ui/KeyGenDialog.ui new file mode 100644 index 00000000..052f748b --- /dev/null +++ b/ui/KeyGenDialog.ui @@ -0,0 +1,365 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>KeyGenDialog</class> + <widget class="QDialog" name="KeyGenDialog"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>475</width> + <height>568</height> + </rect> + </property> + <property name="windowTitle"> + <string>Key Generation</string> + </property> + <layout class="QVBoxLayout" name="verticalLayout_2"> + <property name="leftMargin"> + <number>5</number> + </property> + <property name="topMargin"> + <number>5</number> + </property> + <property name="rightMargin"> + <number>5</number> + </property> + <property name="bottomMargin"> + <number>5</number> + </property> + <item> + <layout class="QGridLayout" name="gridLayout_3"> + <property name="topMargin"> + <number>5</number> + </property> + <item row="4" column="0"> + <widget class="QLabel" name="commentLabel"> + <property name="text"> + <string>Comment</string> + </property> + </widget> + </item> + <item row="3" column="0"> + <widget class="QLabel" name="emailLabel"> + <property name="text"> + <string>Email</string> + </property> + </widget> + </item> + <item row="2" column="0"> + <widget class="QLabel" name="nameLabel"> + <property name="text"> + <string>Name</string> + </property> + </widget> + </item> + <item row="2" column="1" colspan="2"> + <widget class="QLineEdit" name="nameEdit"/> + </item> + <item row="4" column="1" colspan="2"> + <widget class="QLineEdit" name="commentEdit"/> + </item> + <item row="3" column="1" colspan="2"> + <widget class="QLineEdit" name="emailEdit"/> + </item> + <item row="5" column="0"> + <widget class="QLabel" name="keyDBLabel"> + <property name="text"> + <string>Key Database</string> + </property> + </widget> + </item> + <item row="5" column="1" colspan="2"> + <widget class="QComboBox" name="keyDBIndexComboBox"/> + </item> + </layout> + </item> + <item> + <layout class="QVBoxLayout" name="verticalLayout"> + <item> + <widget class="QTabWidget" name="tabWidget"> + <property name="tabPosition"> + <enum>QTabWidget::TabPosition::North</enum> + </property> + <property name="currentIndex"> + <number>0</number> + </property> + <property name="documentMode"> + <bool>true</bool> + </property> + <widget class="QWidget" name="easyTab"> + <attribute name="title"> + <string>Easy Mode</string> + </attribute> + <layout class="QVBoxLayout" name="verticalLayout_3"> + <item> + <layout class="QGridLayout" name="gridLayout"> + <item row="4" column="0"> + <widget class="QLabel" name="easyValidPeriodLabel"> + <property name="text"> + <string>Validity Period</string> + </property> + </widget> + </item> + <item row="0" column="1" colspan="2"> + <widget class="QComboBox" name="easyAlgoComboBox"/> + </item> + <item row="4" column="1" colspan="2"> + <widget class="QComboBox" name="easyValidityPeriodComboBox"/> + </item> + <item row="0" column="0"> + <widget class="QLabel" name="easyAlgoLabel"> + <property name="text"> + <string>Algorithm</string> + </property> + </widget> + </item> + <item row="5" column="0"> + <widget class="QLabel" name="combinationLabel"> + <property name="text"> + <string>Combination</string> + </property> + </widget> + </item> + <item row="5" column="1" colspan="2"> + <widget class="QComboBox" name="easyCombinationComboBox"/> + </item> + </layout> + </item> + <item> + <spacer name="verticalSpacer"> + <property name="orientation"> + <enum>Qt::Orientation::Vertical</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>40</height> + </size> + </property> + </spacer> + </item> + </layout> + </widget> + <widget class="QWidget" name="pTab"> + <attribute name="title"> + <string>Primary Key</string> + </attribute> + <layout class="QVBoxLayout" name="verticalLayout_4"> + <item> + <layout class="QGridLayout" name="gridLayout_2"> + <item row="2" column="0"> + <widget class="QLabel" name="pExpireDateLabel"> + <property name="text"> + <string>Expire Date</string> + </property> + </widget> + </item> + <item row="7" column="0" colspan="3"> + <widget class="QCheckBox" name="pExpireCheckBox"> + <property name="text"> + <string>Non Expired</string> + </property> + </widget> + </item> + <item row="2" column="1" colspan="2"> + <widget class="QDateTimeEdit" name="pExpireDateTimeEdit"/> + </item> + <item row="0" column="0"> + <widget class="QLabel" name="pAlgoLabel"> + <property name="text"> + <string>Algorithm</string> + </property> + </widget> + </item> + <item row="5" column="0"> + <widget class="QLabel" name="pUsageLabel"> + <property name="text"> + <string>Usage</string> + </property> + </widget> + </item> + <item row="5" column="1" colspan="2"> + <layout class="QHBoxLayout" name="horizontalLayout_2"> + <item> + <widget class="QCheckBox" name="pEncrCheckBox"> + <property name="text"> + <string>Encrypt</string> + </property> + </widget> + </item> + <item> + <widget class="QCheckBox" name="pSignCheckBox"> + <property name="text"> + <string>Sign</string> + </property> + </widget> + </item> + <item> + <widget class="QCheckBox" name="pAuthCheckBox"> + <property name="text"> + <string>Authentication</string> + </property> + </widget> + </item> + </layout> + </item> + <item row="0" column="1" colspan="2"> + <widget class="QComboBox" name="pAlgoComboBox"/> + </item> + <item row="6" column="0" colspan="3"> + <widget class="QCheckBox" name="noPassphraseCheckBox"> + <property name="text"> + <string>No Passphrase</string> + </property> + </widget> + </item> + <item row="1" column="0"> + <widget class="QLabel" name="pKeyLengthLabel"> + <property name="text"> + <string>Key Length</string> + </property> + </widget> + </item> + <item row="1" column="1" colspan="2"> + <widget class="QComboBox" name="pKeyLengthComboBox"/> + </item> + </layout> + </item> + <item> + <spacer name="verticalSpacer_2"> + <property name="orientation"> + <enum>Qt::Orientation::Vertical</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>40</height> + </size> + </property> + </spacer> + </item> + </layout> + </widget> + <widget class="QWidget" name="sTab"> + <attribute name="title"> + <string>Subkey</string> + </attribute> + <layout class="QVBoxLayout" name="verticalLayout_7"> + <item> + <layout class="QGridLayout" name="gridLayout_4"> + <item row="2" column="0"> + <widget class="QLabel" name="sExpireDateLabel"> + <property name="text"> + <string>Expire Date</string> + </property> + </widget> + </item> + <item row="6" column="0" colspan="3"> + <widget class="QCheckBox" name="sExpireCheckBox"> + <property name="text"> + <string>Non Expired</string> + </property> + </widget> + </item> + <item row="5" column="0"> + <widget class="QLabel" name="sUsageLabel"> + <property name="text"> + <string>Usage</string> + </property> + </widget> + </item> + <item row="2" column="1" colspan="2"> + <widget class="QDateTimeEdit" name="sExpireDateTimeEdit"/> + </item> + <item row="0" column="1" colspan="2"> + <widget class="QComboBox" name="sAlgoComboBox"/> + </item> + <item row="5" column="1" colspan="2"> + <layout class="QHBoxLayout" name="horizontalLayout_3"> + <item> + <widget class="QCheckBox" name="sEncrCheckBox"> + <property name="text"> + <string>Encrypt</string> + </property> + </widget> + </item> + <item> + <widget class="QCheckBox" name="sSignCheckBox"> + <property name="text"> + <string>Sign</string> + </property> + </widget> + </item> + <item> + <widget class="QCheckBox" name="sAuthCheckBox"> + <property name="text"> + <string>Authentication</string> + </property> + </widget> + </item> + </layout> + </item> + <item row="0" column="0"> + <widget class="QLabel" name="sAlgoLabel"> + <property name="text"> + <string>Algorithm</string> + </property> + </widget> + </item> + <item row="1" column="0"> + <widget class="QLabel" name="sKeyLengthLabel"> + <property name="text"> + <string>Key Length</string> + </property> + </widget> + </item> + <item row="1" column="1" colspan="2"> + <widget class="QComboBox" name="sKeyLengthComboBox"/> + </item> + </layout> + </item> + <item> + <spacer name="verticalSpacer_3"> + <property name="orientation"> + <enum>Qt::Orientation::Vertical</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>40</height> + </size> + </property> + </spacer> + </item> + </layout> + </widget> + </widget> + </item> + </layout> + </item> + <item> + <widget class="Line" name="line"> + <property name="orientation"> + <enum>Qt::Orientation::Horizontal</enum> + </property> + </widget> + </item> + <item> + <widget class="QPlainTextEdit" name="statusPlainTextEdit"> + <property name="readOnly"> + <bool>true</bool> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="generateButton"> + <property name="text"> + <string>Generate</string> + </property> + </widget> + </item> + </layout> + </widget> + <resources/> + <connections/> +</ui> diff --git a/ui/ModifiedExpirationDateTime.ui b/ui/ModifiedExpirationDateTime.ui index 10c1d326..795a9ca4 100644 --- a/ui/ModifiedExpirationDateTime.ui +++ b/ui/ModifiedExpirationDateTime.ui @@ -17,16 +17,16 @@ <item row="2" column="0"> <widget class="QDialogButtonBox" name="button_box_"> <property name="orientation"> - <enum>Qt::Horizontal</enum> + <enum>Qt::Orientation::Horizontal</enum> </property> <property name="standardButtons"> - <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set> + <set>QDialogButtonBox::StandardButton::Cancel|QDialogButtonBox::StandardButton::Ok</set> </property> </widget> </item> <item row="0" column="0"> <layout class="QVBoxLayout" name="verticalLayout"> - <item alignment="Qt::AlignTop"> + <item> <widget class="QLabel" name="titleLabel"> <property name="text"> <string>Modified Expiration Date (Local Time)</string> @@ -53,26 +53,14 @@ <item> <widget class="Line" name="line"> <property name="orientation"> - <enum>Qt::Horizontal</enum> - </property> - </widget> - </item> - <item> - <widget class="QLabel" name="label"> - <property name="text"> - <string>Tips: For the sake of security, the key is valid for up to two years. If you are - an expert user, please unlock it for a longer time in the settings. - </string> - </property> - <property name="wordWrap"> - <bool>true</bool> + <enum>Qt::Orientation::Horizontal</enum> </property> </widget> </item> <item> <spacer name="verticalSpacer"> <property name="orientation"> - <enum>Qt::Vertical</enum> + <enum>Qt::Orientation::Vertical</enum> </property> <property name="sizeHint" stdset="0"> <size> diff --git a/ui/SubkeyGenDialog.ui b/ui/SubkeyGenDialog.ui new file mode 100644 index 00000000..ad1e6293 --- /dev/null +++ b/ui/SubkeyGenDialog.ui @@ -0,0 +1,134 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>SubkeyGenDialog</class> + <widget class="QDialog" name="SubkeyGenDialog"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>521</width> + <height>391</height> + </rect> + </property> + <property name="windowTitle"> + <string>Subkey Generation</string> + </property> + <layout class="QVBoxLayout" name="verticalLayout"> + <item> + <layout class="QGridLayout" name="gridLayout_3"> + <property name="topMargin"> + <number>5</number> + </property> + <item row="2" column="1"> + <widget class="QDateTimeEdit" name="expireDateTimeEdit"/> + </item> + <item row="2" column="0"> + <widget class="QLabel" name="expireLabel"> + <property name="text"> + <string>Expiration Date</string> + </property> + </widget> + </item> + <item row="0" column="0"> + <widget class="QLabel" name="algoLabel"> + <property name="text"> + <string>Algorithm</string> + </property> + </widget> + </item> + <item row="0" column="1"> + <widget class="QComboBox" name="algoComboBox"/> + </item> + <item row="1" column="0"> + <widget class="QLabel" name="keyLengthLabel"> + <property name="text"> + <string>Key Length</string> + </property> + </widget> + </item> + <item row="1" column="1"> + <widget class="QComboBox" name="keyLengthComboBox"/> + </item> + <item row="3" column="0"> + <widget class="QLabel" name="usageLabel"> + <property name="text"> + <string>Usage</string> + </property> + </widget> + </item> + <item row="3" column="1"> + <layout class="QHBoxLayout" name="horizontalLayout"> + <item> + <widget class="QCheckBox" name="encrCheckBox"> + <property name="text"> + <string>Encrypt</string> + </property> + </widget> + </item> + <item> + <widget class="QCheckBox" name="signCheckBox"> + <property name="text"> + <string>Sign</string> + </property> + </widget> + </item> + <item> + <widget class="QCheckBox" name="authCheckBox"> + <property name="text"> + <string>Authentication</string> + </property> + </widget> + </item> + </layout> + </item> + <item row="4" column="0" colspan="2"> + <widget class="QCheckBox" name="nonExpiredCheckBox"> + <property name="text"> + <string>Non Expired</string> + </property> + </widget> + </item> + <item row="5" column="0" colspan="2"> + <widget class="QCheckBox" name="nonPassphraseCheckBox"> + <property name="text"> + <string>No Passphrase</string> + </property> + </widget> + </item> + </layout> + </item> + <item> + <widget class="Line" name="line"> + <property name="orientation"> + <enum>Qt::Orientation::Horizontal</enum> + </property> + </widget> + </item> + <item> + <spacer name="verticalSpacer"> + <property name="orientation"> + <enum>Qt::Orientation::Vertical</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>40</height> + </size> + </property> + </spacer> + </item> + <item> + <widget class="QPlainTextEdit" name="statusPlainTextEdit"/> + </item> + <item> + <widget class="QPushButton" name="generateButton"> + <property name="text"> + <string>Generate</string> + </property> + </widget> + </item> + </layout> + </widget> + <resources/> + <connections/> +</ui> |