diff options
52 files changed, 3801 insertions, 3187 deletions
diff --git a/.github/workflows/testing-nightly.yml b/.github/workflows/testing-nightly.yml index 48345824..d8975bf4 100644 --- a/.github/workflows/testing-nightly.yml +++ b/.github/workflows/testing-nightly.yml @@ -276,7 +276,7 @@ jobs: - name: Build GpgFrontend (Linux) # Build your GpgFrontend with the given configuration run: | - cmake -B ${{github.workspace}}/build -G Ninja -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DDGPGFRONTEND_BUILD_TYPE_ONLY_APPLICATION=ON + cmake -B ${{github.workspace}}/build -G Ninja -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DGPGFRONTEND_BUILD_TYPE_ONLY_APPLICATION=ON cmake --build ${{github.workspace}}/build --config {{$env.BUILD_TYPE}} -- -v if: runner.os == 'Linux' diff --git a/resource/lfs/locale/ts/GpgFrontend.de_DE.ts b/resource/lfs/locale/ts/GpgFrontend.de_DE.ts index f478e08a..a2da439d 100644 --- a/resource/lfs/locale/ts/GpgFrontend.de_DE.ts +++ b/resource/lfs/locale/ts/GpgFrontend.de_DE.ts @@ -492,7 +492,7 @@ <context> <name>GpgFrontend::KeyGenerateInfo</name> <message> - <location filename="../../../../src/core/model/GpgKeyGenerateInfo.cpp" line="39"/> + <location filename="../../../../src/core/model/GpgKeyGenerateInfo.cpp" line="40"/> <source>None</source> <translation>Kein</translation> </message> @@ -586,22 +586,22 @@ <translation>Schlüssel-ID: %1 Grund: %2</translation> </message> <message> - <location filename="../../../../src/ui/dialog/ADSKsPicker.cpp" line="123"/> + <location filename="../../../../src/ui/dialog/ADSKsPicker.cpp" line="122"/> <source>Failed</source> <translation>Fehlgeschlagen</translation> </message> <message> - <location filename="../../../../src/ui/dialog/ADSKsPicker.cpp" line="124"/> + <location filename="../../../../src/ui/dialog/ADSKsPicker.cpp" line="123"/> <source>Partially Failed</source> <translation>Teilweise fehlgeschlagen</translation> </message> <message> - <location filename="../../../../src/ui/dialog/ADSKsPicker.cpp" line="126"/> + <location filename="../../../../src/ui/dialog/ADSKsPicker.cpp" line="125"/> <source>Failed to add all selected subkeys.</source> <translation>Alle ausgewählten Unterschlüssel konnten nicht hinzugefügt werden.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/ADSKsPicker.cpp" line="127"/> + <location filename="../../../../src/ui/dialog/ADSKsPicker.cpp" line="126"/> <source>Some subkeys failed to be added as ADSKs.</source> <translation>Einige Unterschlüssel konnten nicht als ADSKs hinzugefügt werden.</translation> </message> @@ -769,13 +769,13 @@ <context> <name>GpgFrontend::UI::CommonUtils</name> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="428"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="436"/> <source>Timeout</source> <translation>Zeitablauf</translation> </message> <message> <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="163"/> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="303"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="311"/> <source>Success</source> <translation>Erfolg</translation> </message> @@ -795,126 +795,148 @@ <translation>Gpg-Verarbeitung erfolgreich.</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="174"/> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="295"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="182"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="303"/> <source>Failure</source> <translation>Fehler</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="175"/> - <source>Gpg Operation failed. - -Error code: %1 -Source: %2 -Description: %3</source> - <translation>GPG Vorgang fehlgeschlagen - -Fehlercode: %1 -Quelle: %2 -Beschrei: %3</translation> - </message> - <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="210"/> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="217"/> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="485"/> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="647"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="218"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="225"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="493"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="655"/> <source>Error</source> <translation>Fehler</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="202"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="210"/> <source>Open Key</source> <translation>Schlüssel öffnen</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="203"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="172"/> + <source>Operation Not Supported</source> + <translation>Vorgang nicht unterstützt</translation> + </message> + <message> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="173"/> + <source>The current GnuPG version is too low and does not support this operation. Please upgrade your GnuPG version to continue.</source> + <translation>Die aktuelle GnuPG-Version ist zu alt und unterstützt diesen Vorgang nicht. Bitte aktualisieren Sie GnuPG, um fortzufahren.</translation> + </message> + <message> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="183"/> + <source>Gpg Operation failed.</source> + <translation>GPG-Vorgang fehlgeschlagen.</translation> + </message> + <message> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="184"/> + <source>Error code: %1</source> + <translation>Fehlercode: %1</translation> + </message> + <message> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="185"/> + <source>Source: %1</source> + <translation>Quelle: %1</translation> + </message> + <message> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="186"/> + <source>Description: %1</source> + <translation>Beschreibung: %1</translation> + </message> + <message> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="187"/> + <source>Error Message: %1</source> + <translation>Fehlermeldung: %1</translation> + </message> + <message> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="211"/> <source>Keyring files</source> <translation>Schlüsselbunddateien</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="211"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="219"/> <source>Cannot open this file. Please make sure that this is a regular file and it's readable.</source> <translation>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="218"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="226"/> <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="224"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="232"/> <source>File Open Failed</source> <translation>Datei konnte nicht geöffnet werden</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="225"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="233"/> <source>Failed to open file: </source> <translation>Datei konnte nicht geöffnet werden: </translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="276"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="284"/> <source>Processing</source> <translation>In Bearbeitung</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="296"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="304"/> <source>Failed to execute command.</source> <translation>Fehler beim Ausführen des Befehls.</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="304"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="312"/> <source>Succeed in executing command.</source> <translation>Befehl erfolgreich ausgeführt.</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="306"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="314"/> <source>Warning</source> <translation>Warnung</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="307"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="315"/> <source>Finished executing command.</source> <translation>Ausführung des Befehls abgeschlossen.</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="327"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="335"/> <source>Default Keyserver Not Found</source> <translation>Standard-Keyserver nicht gefunden</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="328"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="336"/> <source>Cannot read default keyserver from your settings, please set a default keyserver first</source> <translation>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="425"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="433"/> <source>Key Not Found</source> <translation>Schlüssel nicht gefunden</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="431"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="439"/> <source>Key Server Not Found</source> <translation>Schlüsselserver nicht gefunden</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="434"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="442"/> <source>Connection Error</source> <translation>Verbindungsfehler</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="647"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="655"/> <source>Key Not Found.</source> <translation>Schlüssel nicht gefunden.</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="375"/> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="445"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="383"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="453"/> <source>The key has been updated</source> <translation>Der Schlüssel wurde aktualisiert</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="377"/> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="447"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="385"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="455"/> <source>No need to update the key</source> <translation>Keine Notwendigkeit, den Schlüssel zu aktualisieren</translation> </message> @@ -1460,70 +1482,70 @@ This will result in loss of all cached form positions, statuses, key servers, et <translation>Echter Pfad</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="358"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="359"/> <source>Maximum Key Database Limit Reached</source> <translation>Maximum Key Database Limit erreicht</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="359"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="360"/> <source>Currently, GpgFrontend supports a maximum of 8 key databases. Please remove an existing database to add a new one.</source> <translation>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="370"/> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="616"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="371"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="617"/> <source>Duplicate Key Database Paths</source> <translation>Doppelte Datenbankpfade für Schlüssel</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="371"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="372"/> <source>The newly added key database path duplicates a previously existing one.</source> <translation>Der neu hinzugefügte Schlüsseldatenbankpfad dupliziert einen bereits vorhandenen Pfad.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="380"/> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="627"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="381"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="628"/> <source>Invalid Key Database Paths</source> <translation>Ungültige Schlüsseldatenbankpfade</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="381"/> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="628"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="382"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="629"/> <source>The edited key database path is not a valid path that GpgFrontend can use</source> <translation>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="428"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="429"/> <source>Active</source> <translation>Aktiv</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="428"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="429"/> <source>Inactive</source> <translation>Inaktiv</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="456"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="457"/> <source>Confirm Deletion</source> <translation>Bestätigen Sie die Löschung</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="457"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="458"/> <source>Are you sure you want to delete the selected key database?</source> <translation>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="595"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="596"/> <source>No Key Database Selected</source> <translation>Keine Schlüsseldatenbank ausgewählt</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="596"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="597"/> <source>Please select a key database to edit.</source> <translation>Bitte wählen Sie eine Schlüsseldatenbank zur Bearbeitung aus.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="617"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="618"/> <source>The edited key database path duplicates a previously existing one.</source> <translation>Der bearbeitete Schlüsseldatenbankpfad dupliziert einen bereits vorhandenen Pfad.</translation> </message> @@ -1560,7 +1582,7 @@ This will result in loss of all cached form positions, statuses, key servers, et <message> <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="326"/> <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="333"/> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="345"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="346"/> <source>Illegal GnuPG Path</source> <translation>Unzulässiger GnuPG-Pfad</translation> </message> @@ -1575,7 +1597,7 @@ This will result in loss of all cached form positions, statuses, key servers, et <translation>Der Ziel-GnuPG-Pfad ist kein absoluter Pfad.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="346"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="347"/> <source>Target GnuPG Path contains no "gpgconf" executable.</source> <translation>Der Ziel-GnuPG-Pfad enthält keine ausführbare Datei „gpgconf“.</translation> </message> @@ -1606,10 +1628,18 @@ This will result in loss of all cached form positions, statuses, key servers, et <context> <name>GpgFrontend::UI::GpgOperaHelper</name> <message> - <location filename="../../../../src/ui/function/GpgOperaHelper.cpp" line="96"/> - <location filename="../../../../src/ui/function/GpgOperaHelper.cpp" line="132"/> - <location filename="../../../../src/ui/function/GpgOperaHelper.cpp" line="174"/> - <location filename="../../../../src/ui/function/GpgOperaHelper.cpp" line="212"/> + <location filename="../../../../src/ui/function/GpgOperaHelper.cpp" line="94"/> + <location filename="../../../../src/ui/function/GpgOperaHelper.cpp" line="136"/> + <location filename="../../../../src/ui/function/GpgOperaHelper.cpp" line="185"/> + <location filename="../../../../src/ui/function/GpgOperaHelper.cpp" line="228"/> + <source>Operation Not Supported</source> + <translation>Operation nicht unterstützt</translation> + </message> + <message> + <location filename="../../../../src/ui/function/GpgOperaHelper.cpp" line="102"/> + <location filename="../../../../src/ui/function/GpgOperaHelper.cpp" line="144"/> + <location filename="../../../../src/ui/function/GpgOperaHelper.cpp" line="191"/> + <location filename="../../../../src/ui/function/GpgOperaHelper.cpp" line="234"/> <source>Critical Error</source> <translation>Kritischer Fehler</translation> </message> @@ -1827,218 +1857,218 @@ This will result in loss of all cached form positions, statuses, key servers, et <context> <name>GpgFrontend::UI::KeyGenerateDialog</name> <message> - <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="575"/> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="581"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="64"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="71"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="580"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="586"/> <source>Custom</source> <translation>Benutzerdefiniert</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="71"/> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="524"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="72"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="529"/> <source>3 Months</source> <translation>3 Monate</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="72"/> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="529"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="73"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="534"/> <source>6 Months</source> <translation>6 Monate</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="73"/> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="534"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="74"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="539"/> <source>1 Year</source> <translation>1 Jahr</translation> </message> <message> - <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="539"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="75"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="140"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="145"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="544"/> <source>2 Years</source> <translation>2 Jahre</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="75"/> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="544"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="76"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="549"/> <source>5 Years</source> <translation>5 Jahre</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="76"/> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="549"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="77"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="554"/> <source>10 Years</source> <translation>10 Jahre</translation> </message> <message> - <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="555"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="78"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="101"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="110"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="560"/> <source>Non Expired</source> <translation>Nicht abgelaufen</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="586"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="82"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="295"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="591"/> <source>Primary Key Only</source> <translation>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"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="83"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="343"/> <source>Primary Key With Subkey</source> <translation>Primärschlüssel mit Unterschlüssel</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="85"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="86"/> <source>Name</source> <translation>Name</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="86"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="87"/> <source>Email</source> <translation>E-Mail</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="87"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="88"/> <source>Comment</source> <translation>Kommentar</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="88"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="89"/> <source>Key Database</source> <translation>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"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="90"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="93"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="103"/> <source>Algorithm</source> <translation>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"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="91"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="94"/> <source>Validity Period</source> <translation>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"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="95"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="105"/> <source>Key Length</source> <translation>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"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="96"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="106"/> <source>Usage</source> <translation>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"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="97"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="107"/> <source>Encrypt</source> <translation>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"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="98"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="108"/> <source>Sign</source> <translation>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"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="99"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="109"/> <source>Authentication</source> <translation>Authentifizierung</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="99"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="100"/> <source>No Passphrase</source> <translation>Keine Passphrase</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="103"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="104"/> <source>Expire Date</source> <translation>Ablaufdatum</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="112"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="113"/> <source>Easy Mode</source> <translation>Einfacher Modus</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="113"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="114"/> <source>Primary Key</source> <translation>Primärschlüssel</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="114"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="115"/> <source>Subkey</source> <translation>Unterschlüssel</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="117"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="118"/> <source>Generate</source> <translation>Erstellen</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"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="135"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="266"/> <source>None</source> <translation>Kein</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="146"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="147"/> <source>Generate Key</source> <translation>Schlüssel erstellen</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="156"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="161"/> <source>Name must contain at least five characters.</source> <translation>Der Name muss mindestens fünf Zeichen enthalten.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="161"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="166"/> <source>Please give a valid email address.</source> <translation>Bitte geben Sie eine gültige E-Mail Adresse an.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="166"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="171"/> <source>Please give a valid primary key algorithm.</source> <translation>Bitte geben Sie einen gültigen Primärschlüssel-Algorithmus an.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="175"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="180"/> <source>Time to primary key expiration must not be less than 120 seconds.</source> <translation>Die Zeit bis zum Ablauf des Primärschlüssels darf nicht weniger als 120 Sekunden betragen.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="182"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="187"/> <source>Please give a valid subkey algorithm.</source> <translation>Bitte geben Sie einen gültigen Unterschlüssel-Algorithmus an.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="190"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="195"/> <source>Time to subkey expiration must not be less than 120 seconds.</source> <translation>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="614"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="619"/> <source>Error</source> <translation>Fehler</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="615"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="620"/> <source>Unknown error occurred</source> <translation>Unbekannter Fehler ist aufgetreten</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="627"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="632"/> <source>Generating</source> <translation>Erstellen</translation> </message> @@ -2492,7 +2522,7 @@ Diese Schlüssel sind nicht mehr verfügbar. Möchten Sie sie aus der Gruppe ent </message> <message> <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="210"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="528"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="533"/> <source>Key Package</source> <translation>Schlüsselpaket</translation> </message> @@ -2614,22 +2644,22 @@ Diese Schlüssel sind nicht mehr verfügbar. Möchten Sie sie aus der Gruppe ent <message> <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="406"/> <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="418"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="482"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="493"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="506"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="537"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="545"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="561"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="569"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="585"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="487"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="498"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="511"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="542"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="550"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="566"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="574"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="590"/> <source>Error</source> <translation>Fehler</translation> </message> <message> <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="372"/> <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="387"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="457"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="466"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="462"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="471"/> <source>Forbidden</source> <translation>Verboten</translation> </message> @@ -2641,102 +2671,102 @@ Diese Schlüssel sind nicht mehr verfügbar. Möchten Sie sie aus der Gruppe ent </message> <message> <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="380"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="520"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="525"/> <source>key(s) exported</source> <translation>Schlüssel exportiert</translation> </message> <message> <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="396"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="472"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="477"/> <source>Exporting</source> <translation>Exportiere</translation> </message> <message> <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="407"/> <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="419"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="483"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="494"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="488"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="499"/> <source>Unknown error occurred</source> <translation>Unbekannter Fehler ist aufgetreten</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="441"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="449"/> <source>Invalid Operation</source> <translation>Ungültige Operation</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="442"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="450"/> <source>If a key pair does not have a private key then it will not be able to generate sub-keys.</source> <translation>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="458"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="463"/> <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="467"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="472"/> <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="507"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="512"/> <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>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="515"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="520"/> <source>Export OpenSSH Key To File</source> <translation>OpenSSH-Schlüssel in eine Datei exportieren</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="516"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="521"/> <source>OpenSSH Public Key Files</source> <translation>OpenSSH-Dateien mit öffentlichem Schlüssel</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="528"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="533"/> <source>Import Key Package</source> <translation>Schlüsselpaket importieren</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="538"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="562"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="543"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="567"/> <source>Cannot open this file. Please make sure that this is a regular file and it's readable.</source> <translation>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="546"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="551"/> <source>The target file is too large for a key package.</source> <translation>Die Zieldatei ist zu groß für ein Schlüsselpaket.</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="551"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="556"/> <source>Import Key Package Passphrase File</source> <translation>Schlüsselpaket-Passphrasendatei importieren</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="552"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="557"/> <source>Key Package Passphrase File</source> <translation>Schlüsselpaket-Passphrasendatei</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="570"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="575"/> <source>The target file is too large for a key package passphrase.</source> <translation>Die Zieldatei ist zu groß für eine Schlüsselpaket-Passphrase.</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="575"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="580"/> <source>Importing</source> <translation>Importieren</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="592"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="597"/> <source>key(s) imported</source> <translation>Schlüssel importiert</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="586"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="591"/> <source>An error occur in importing key package.</source> <translation>Beim Importieren des Schlüsselpakets ist ein Fehler aufgetreten.</translation> </message> @@ -3329,313 +3359,313 @@ Hinweis: Weitere Informationen zur Verifizierung finden Sie hier: https://keys.o <context> <name>GpgFrontend::UI::KeyPairSubkeyTab</name> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="81"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="189"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="85"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="193"/> <source>Key ID</source> <translation>Schlüssel-ID</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="83"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="189"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="87"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="193"/> <source>Algorithm</source> <translation>Algorithmus</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="84"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="190"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="88"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="194"/> <source>Algorithm Detail</source> <translation>Algorithmusdetails</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="86"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="189"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="90"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="193"/> <source>Key Size</source> <translation>Schlüsselgröße</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="87"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="91"/> <source>Usage</source> <translation>Verwendungszweck</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="89"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="93"/> <source>Expires On (Local Time)</source> <translation>Läuft ab am (Ortszeit)</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="91"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="95"/> <source>Create Date (Local Time)</source> <translation>Erstellungsdatum (Ortszeit)</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="92"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="96"/> <source>Existence</source> <translation>Existenz</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="94"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="98"/> <source>Key in Smart Card</source> <translation>Smartcard eintippen</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="96"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="100"/> <source>Fingerprint</source> <translation>Fingerabdruck</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="54"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="53"/> <source>List of the primary key and subkey(s)</source> <translation>Liste des Primärschlüssels und des/der Unterschlüssel(s)</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="55"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="54"/> <source>Detail of Selected Primary Key/Subkey</source> <translation>Detail des ausgewählten Primärschlüssels/Unterschlüssels</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="59"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="58"/> <source>New Subkey</source> <translation>Neuer Unterschlüssel</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="60"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="59"/> <source>Add ADSK(s)</source> <translation>ADSK(s) hinzufügen</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="82"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="189"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="86"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="193"/> <source>Key Type</source> <translation>Schlüsselart</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="93"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="97"/> <source>Revoked</source> <translation>Widerrufen</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="128"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="370"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="132"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="377"/> <source>Export Subkey</source> <translation>Unterschlüssel exportieren</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="190"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="194"/> <source>Create Date</source> <translation>Erstellung</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="190"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="194"/> <source>Expire Date</source> <translation>Ablaufdatum</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="213"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="374"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="217"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="381"/> <source>Primary Key</source> <translation>Primärschlüssel</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="213"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="375"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="217"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="382"/> <source>Subkey</source> <translation>Unterschlüssel</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="214"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="218"/> <source>ADSK</source> <translation>ADSK</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="238"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="242"/> <source>Never Expire</source> <translation>Nie ablaufen</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="309"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="316"/> <source>Never Expires</source> <translation>Läuft nie ab</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="333"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="340"/> <source>Exists</source> <translation>Existiert</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="334"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="341"/> <source>Not Exists</source> <translation>Existiert nicht</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="337"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="377"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="344"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="384"/> <source>Yes</source> <translation>Ja</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="337"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="377"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="344"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="384"/> <source>No</source> <translation>Nein</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="369"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="376"/> <source>Export Primary Key</source> <translation>Primärschlüssel exportieren</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="391"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="398"/> <source>Edit Expire Date</source> <translation>Ablaufdatum bearbeiten</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="395"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="402"/> <source>Export</source> <translation>Exportieren</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="399"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="406"/> <source>Delete</source> <translation>Löschen</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="403"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="410"/> <source>Revoke</source> <translation>Widerrufen</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="456"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="463"/> <source>Exporting Subkey</source> <translation>Unterschlüssel exportieren</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="457"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="464"/> <source>You are about to export a private subkey.</source> <translation>Sie sind dabei, einen privaten Unterschlüssel zu exportieren.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="458"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="465"/> <source>While subkeys are less critical than the primary key, they should still be handled with care.</source> <translation>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="461"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="468"/> <source>Do you want to proceed with exporting this subkey?</source> <translation>Möchten Sie mit dem Exportieren dieses Unterschlüssels fortfahren?</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="488"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="495"/> <source>Export Key To File</source> <translation>Schlüssel in Datei exportieren</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="489"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="496"/> <source>Key Files</source> <translation>Schlüsseldateien</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="494"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="501"/> <source>Export Error</source> <translation>Exportfehler</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="495"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="502"/> <source>Couldn't open %1 for writing</source> <translation>%1 konnte nicht zum Schreiben geöffnet werden</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="503"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="510"/> <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>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="509"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="516"/> <source>Delete Subkey Confirmation</source> <translation>Unterschlüssel löschen Bestätigung</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="524"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="573"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="531"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="580"/> <source>Illegal Operation</source> <translation>Illegale Operation</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="525"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="532"/> <source>Cannot delete the primary key or an invalid subkey.</source> <translation>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="533"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="540"/> <source>Operation Failed</source> <translation>Vorgang fehlgeschlagen</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="534"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="541"/> <source>The selected subkey could not be deleted. Please check your permissions or try again.</source> <translation>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="540"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="547"/> <source>Operation Successful</source> <translation>Operation erfolgreich</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="541"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="548"/> <source>The subkey with KeyID %1 has been successfully deleted.</source> <translation>Der Unterschlüssel mit KeyID %1 wurde erfolgreich gelöscht.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="550"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="557"/> <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>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="557"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="564"/> <source>Revoke Subkey</source> <translation>Unterschlüssel widerrufen</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="574"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="581"/> <source>Cannot revoke the primary key or an invalid subkey.</source> <translation>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="579"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="586"/> <source>0 -> No Reason.</source> <translation>0 -> Kein Grund.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="579"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="586"/> <source>1 -> This key is no more safe.</source> <translation>1 -> Dieser Schlüssel ist nicht mehr sicher.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="580"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="587"/> <source>2 -> Key is outdated.</source> <translation>2 -> Der Schlüssel ist veraltet.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="580"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="587"/> <source>3 -> Key is no longer used</source> <translation>3 -> Der Schlüssel wird nicht mehr verwendet.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="591"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="598"/> <source>Revocation Failed</source> <translation>Widerruf fehlgeschlagen</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="592"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="599"/> <source>Failed to revoke the subkey. Please try again.</source> <translation>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="595"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="602"/> <source>Revocation Successful</source> <translation>Widerruf erfolgreich</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="596"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="603"/> <source>The subkey has been successfully revoked.</source> <translation>Der Unterschlüssel wurde erfolgreich widerrufen.</translation> </message> @@ -3871,139 +3901,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="54"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="55"/> <source>Close</source> <translation>Schließen</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="57"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="58"/> <source>Import ALL</source> <translation>ALLE importieren</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="61"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="62"/> <source>Search</source> <translation>Suchen</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="66"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="67"/> <source>Search String</source> <translation>Suchbegriff</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="66"/> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="70"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="67"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="71"/> <source>: </source> <translation>: </translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="70"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="71"/> <source>Key Server</source> <translation>Schlüsselserver</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="111"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="112"/> <source>Import Keys from key server</source> <translation>Importieren von Schlüsseln vom Schlüsselserver</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="154"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="155"/> <source>UID</source> <translation>UID</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="154"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="155"/> <source>Creation date</source> <translation>Erstellungsdatum</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="154"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="155"/> <source>KeyID</source> <translation>SchlüsselID</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="154"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="155"/> <source>Tag</source> <translation>Kennzeichen</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="177"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="178"/> <source>Text is empty.</source> <translation>Text ist leer.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="220"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="221"/> <source>Not Key Found</source> <translation>Schlüssel nicht gefunden</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="223"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="224"/> <source>Timeout</source> <translation>Zeitablauf</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="226"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="227"/> <source>Key Server Not Found</source> <translation>Schlüsselserver nicht gefunden</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="229"/> <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="230"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="231"/> <source>Connection Error</source> <translation>Verbindungsfehler</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="239"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="240"/> <source>Too many responses from keyserver!</source> <translation>Zu viele Antworten vom Schlüsselserver!</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="251"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="252"/> <source>No keys found, input may be kexId, retrying search with 0x.</source> <translation>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="261"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="262"/> <source>No keys found containing the search string!</source> <translation>Keine Schlüssel gefunden, die den Suchbegriff enthalten!</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="268"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="269"/> <source>Insufficiently specific search string!</source> <translation>Unzureichend spezifischer Suchbegriff!</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="303"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="304"/> <source>revoked</source> <translation>widerrufen</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="306"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="307"/> <source>disabled</source> <translation>deaktiviert</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="351"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="352"/> <source>%1 keys found. Double click a key to import it.</source> <translation>%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="372"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="373"/> <source>Warning</source> <translation>Warnung</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="373"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="374"/> <source>Please select one KeyPair before doing this operation.</source> <translation>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="419"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="420"/> <source>Key Imported</source> <translation>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="437"/> <source>Processing ...</source> <translation>Verarbeite ...</translation> </message> @@ -4297,13 +4327,35 @@ 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="157"/> - <location filename="../../../../src/ui/main_window/MainWindow.cpp" line="160"/> + <location filename="../../../../src/ui/main_window/MainWindow.cpp" line="125"/> + <source>GUI Pinentry Not Found</source> + <translation>Grafisches Pinentry-Programm nicht gefunden</translation> + </message> + <message> + <location filename="../../../../src/ui/main_window/MainWindow.cpp" line="126"/> + <source>No suitable *graphical* Pinentry program was found on your system. + +Please install a GUI-based Pinentry (e.g., 'pinentry-qt', 'pinentry-gnome3', or 'pinentry-mac' on macOS). + +Without a GUI Pinentry, GnuPG cannot prompt you for passwords or passphrases. + +After installing it, please restart GpgFrontend. The configuration file will be updated automatically.</source> + <translation>Es wurde kein geeignetes *grafisches* Pinentry-Programm auf Ihrem System gefunden. + +Bitte installieren Sie ein GUI-basiertes Pinentry (z.B. "pinentry-qt", "pinentry-gnome3" oder "pinentry-mac" unter macOS). + +Ohne ein grafisches Pinentry kann GnuPG Sie nicht nach Passwörtern oder Passphrasen fragen. + +Bitte starten Sie GpgFrontend nach der Installation neu. Die Konfigurationsdatei wird automatisch aktualisiert.</translation> + </message> + <message> + <location filename="../../../../src/ui/main_window/MainWindow.cpp" line="177"/> + <location filename="../../../../src/ui/main_window/MainWindow.cpp" line="180"/> <source>Critical error occur while loading GpgFrontend.</source> <translation>Beim Laden von GpgFrontend ist ein kritischer Fehler aufgetreten.</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindow.cpp" line="159"/> + <location filename="../../../../src/ui/main_window/MainWindow.cpp" line="179"/> <source>Loading Failed</source> <translation>Laden fehlgeschlagen</translation> </message> @@ -5133,26 +5185,26 @@ Wenn das Problem weiterhin besteht, wenden Sie sich an den technischen Support o <translation>Status-Panel</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="317"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="331"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="346"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="322"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="340"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="359"/> <source>Successful Operation</source> <translation>Erfolgreiche Durchführung</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="318"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="323"/> <source>Clear password cache successfully</source> <translation>Kennwort-Cache erfolgreich gelöscht</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="320"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="335"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="350"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="325"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="344"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="363"/> <source>Failed Operation</source> <translation>Fehlgeschlagener Vorgang</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="321"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="326"/> <source>Failed to clear password cache of GnuPG</source> <translation>Passwort-Cache von GnuPG konnte nicht geleert werden</translation> </message> @@ -5167,12 +5219,12 @@ Wenn das Problem weiterhin besteht, wenden Sie sich an den technischen Support o <translation>Alle Komponenten von GnuPG neu laden</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="332"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="341"/> <source>Reload all the GnuPG's components successfully</source> <translation>Alle GnuPG-Komponenten erfolgreich neu geladen</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="336"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="345"/> <source>Failed to reload all or one of the GnuPG's component(s)</source> <translation>Fehler beim Neuladen aller oder einer Komponente(n) von GnuPG</translation> </message> @@ -5187,12 +5239,12 @@ Wenn das Problem weiterhin besteht, wenden Sie sich an den technischen Support o <translation>Alle Komponenten von GnuPG neu starten</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="347"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="360"/> <source>Restart all the GnuPG's components successfully</source> <translation>Alle Komponenten von GnuPG erfolgreich neu gestartet</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="351"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="364"/> <source>Failed to restart all or one of the GnuPG's component(s)</source> <translation>Neustart aller oder einer GnuPG-Komponente(n) fehlgeschlagen</translation> </message> @@ -5939,495 +5991,464 @@ Wenn das Problem weiterhin besteht, wenden Sie sich an den technischen Support o <context> <name>GpgFrontend::UI::SmartCardControllerDialog</name> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="50"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="51"/> <source>Smart Card(s):</source> <translation>Chipkarte(n):</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="51"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="52"/> <source>Key Stub(s) in Key Database(s):</source> <translation>Schlüssel-Stub(s) in Schlüssel-Datenbank(en):</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="53"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="54"/> <source>Change Name</source> <translation>Name ändern</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="54"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="55"/> <source>Change Language</source> <translation>Sprache ändern</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="55"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="56"/> <source>Change Gender</source> <translation>Geschlecht ändern</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="56"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="57"/> <source>Change Login Data</source> <translation>Anmeldedaten ändern</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="57"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="58"/> <source>Change Public Key URL</source> <translation>URL des öffentlichen Schlüssels ändern</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="58"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="59"/> <source>Change PIN</source> <translation>PIN ändern</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="59"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="60"/> <source>Change Admin PIN</source> <translation>Admin-PIN ändern</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="60"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="61"/> <source>Change Reset Code</source> <translation>Rückstellcode ändern</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="61"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="62"/> <source>Fetch</source> <translation>Abrufen</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="62"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="63"/> <source>Restart All Gpg-Agents</source> <translation>Alle Gpg-Agenten neu starten</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="63"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="64"/> <source>Generate Card Keys</source> <translation>Erzeugen von Kartenschlüsseln</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="64"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="65"/> <source>Refresh</source> <translation>Aktualisierung</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="66"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="67"/> <source>Operations</source> <translation>Aktivieren</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="117"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="123"/> <source>Successful Operation</source> <translation>Erfolgreiche Durchführung</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="118"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="124"/> <source>Restart all the GnuPG's components successfully</source> <translation>Alle Komponenten von GnuPG erfolgreich neu gestartet</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="121"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="127"/> <source>Failed Operation</source> <translation>Fehlgeschlagener Vorgang</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="122"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="128"/> <source>Failed to restart all or one of the GnuPG's component(s)</source> <translation>Neustart aller oder einer GnuPG-Komponente(n) fehlgeschlagen</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="134"/> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="558"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="139"/> <source>Error</source> <translation>Fehler</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="135"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="140"/> <source>Generate card key failed.</source> <translation>Kartenschlüssel generieren fehlgeschlagen.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="156"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="161"/> <source>Smart Card Controller</source> <translation>Chipkarten-Controller</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="210"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="218"/> <source>OpenPGP Card Information</source> <translation>OpenPGP-Karteninformationen</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="212"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="220"/> <source>Basic Information</source> <translation>Grundsätzliche Informationen</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="213"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="221"/> <source>Reader</source> <translation>Kartenleser</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="214"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="222"/> <source>Serial Number</source> <translation>Seriennummer</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="216"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="224"/> <source>Card Type</source> <translation>Karten-Typ</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="218"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="226"/> <source>Card Version</source> <translation>Kartenversion</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="220"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="228"/> <source>App Type</source> <translation>App-Typ</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="222"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="230"/> <source>App Version</source> <translation>App-Version</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="224"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="232"/> <source>Manufacturer ID</source> <translation>Hersteller-ID</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="226"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="234"/> <source>Manufacturer</source> <translation>Hersteller</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="228"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="236"/> <source>Card Holder</source> <translation>Besitzer der Karte</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="230"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="238"/> <source>Language</source> <translation>Sprache</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="232"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="240"/> <source>Sex</source> <translation>Geschlecht</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="236"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="244"/> <source>Status</source> <translation>Status</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="237"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="245"/> <source>Signature Counter</source> <translation>Unterschriftenzähler</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="239"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="247"/> <source>CHV1 Cached</source> <translation>CHV1 Zwischengespeichert</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="241"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="249"/> <source>CHV Max Length</source> <translation>CHV Maximale Länge</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="247"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="255"/> <source>CHV Retry Left</source> <translation>Verbleibende CHV-Versuche</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="253"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="261"/> <source>KDF Status</source> <translation>KDF-Status</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="265"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="273"/> <source>Unknown</source> <translation>Unbekannt</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="269"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="277"/> <source>UIF</source> <translation>UIF</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="270"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="278"/> <source>Sign</source> <translation>Unterschreiben</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="271"/> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="273"/> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="275"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="279"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="281"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="283"/> <source>Enabled</source> <translation>Aktiviert</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="271"/> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="273"/> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="275"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="279"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="281"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="283"/> <source>Disabled</source> <translation>Deaktiviert</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="272"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="280"/> <source>Encrypt</source> <translation>Verschlüsseln</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="274"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="282"/> <source>Authenticate</source> <translation>Authentifizieren</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="286"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="294"/> <source>Fingerprint</source> <translation>Fingerabdruck</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="322"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="330"/> <source>Status Indicator</source> <translation>Statusanzeige</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="467"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="480"/> <source>Cardholder's Surname</source> <translation>Nachname des Karteninhabers</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="468"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="481"/> <source>Please enter your surname (e.g., Lee):</source> <translation>Bitte geben Sie Ihren Nachnamen ein (z. B. Lee):</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="473"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="486"/> <source>Cardholder's Given Name</source> <translation>Vorname des Karteninhabers</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="474"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="487"/> <source>Please enter your given name (e.g., Chris):</source> <translation>Bitte geben Sie Ihren Vornamen ein (z. B. Chris):</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="483"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="496"/> <source>Too Long</source> <translation>Zu lang</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="484"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="497"/> <source>Combined name too long (max 39 characters).</source> <translation>Kombinierter Name zu lang (max. 39 Zeichen).</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="499"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="512"/> <source>Male</source> <translation>Männlich</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="499"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="512"/> <source>Female</source> <translation>Weiblich</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="503"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="516"/> <source>Select sex to store in '%1'</source> <translation>Geschlecht zur Speicherung in '%1' auswählen</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="518"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="531"/> <source>Enter new value for attribute '%1'</source> <translation>Neuen Wert für Attribut '%1' eingeben</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="256"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="264"/> <source>Not enabled</source> <translation>Nicht aktiviert</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="259"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="267"/> <source>Enabled (no protection)</source> <translation>Aktiviert (kein Schutz)</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="262"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="270"/> <source>Enabled with salt protection</source> <translation>Aktiviert mit Salt-Schutz</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="279"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="287"/> <source>Key Information</source> <translation>Schlüsselinformationen</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="283"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="291"/> <source>No key information available.</source> <translation>Keine Schlüsselinformationen verfügbar.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="286"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="294"/> <source>No.</source> <translation>Nr.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="287"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="295"/> <source>Created</source> <translation>Erstellt</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="287"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="295"/> <source>Grip</source> <translation>Grip</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="288"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="296"/> <source>Type</source> <translation>Typ</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="288"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="296"/> <source>Algorithm</source> <translation>Algorithmus</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="289"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="297"/> <source>Usage</source> <translation>Verwendungszweck</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="289"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="297"/> <source>Curve</source> <translation>Kurve</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="307"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="315"/> <source>Extended Capabilities</source> <translation>Erweiterte Funktionen</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="309"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="317"/> <source>Key Info (ki): %1</source> <translation>Schlüsselinformationen (ki): %1</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="309"/> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="313"/> <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="317"/> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="320"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="321"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="325"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="328"/> <source>Yes</source> <translation>Ja</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="309"/> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="313"/> <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="317"/> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="320"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="321"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="325"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="328"/> <source>No</source> <translation>Nein</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="312"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="320"/> <source>Additional Auth (aac): %1</source> <translation>Zusätzliche Authentifizierung (aac): %1</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="316"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="324"/> <source>Biometric Terminal (bt): %1</source> <translation>Biometrisches Terminal (bt): %1</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="320"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="328"/> <source>KDF Supported: %1</source> <translation>KDF-Unterstützung: %1</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="327"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="335"/> <source>Additional Info</source> <translation>Zusätzliche Informationen</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="379"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="387"/> <source>No OpenPGP Smart Card Found</source> <translation>Keine OpenPGP-Smartcard gefunden</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="380"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="388"/> <source>No OpenPGP-compatible smart card has been detected.</source> <translation>Es wurde keine OpenPGP-kompatible Smartcard erkannt.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="384"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="392"/> <source>An OpenPGP Smart Card is a physical device that securely stores your private cryptographic keys and can be used for digital signing, encryption, and authentication. Popular examples include YubiKey, Nitrokey, and other GnuPG-compatible tokens.</source> <translation>Eine OpenPGP-Smartcard ist ein physisches Gerät, das Ihre privaten kryptografischen Schlüssel sicher speichert und für digitale Signaturen, Verschlüsselung und Authentifizierung verwendet werden kann. Bekannte Beispiele sind YubiKey, Nitrokey und andere GnuPG-kompatible Token.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="392"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="400"/> <source>Make sure your card is inserted and properly recognized by the system. You can also try reconnecting the card or restarting the application.</source> <translation>Stellen Sie sicher, dass Ihre Karte eingesteckt und vom System korrekt erkannt wurde. Sie können auch versuchen, die Karte neu zu verbinden oder die Anwendung neu zu starten.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="398"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="406"/> <source>Note: Smart card support of GpgFrontend requires GnuPG version 2.3.0 or later.</source> <translation>Hinweis: Die Smartcard-Unterstützung von GpgFrontend erfordert GnuPG in Version 2.3.0 oder höher.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="402"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="410"/> <source>Read the GnuPG Smart Card HOWTO: </source> <translation>Lesen Sie das GnuPG Smartcard HOWTO: </translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="502"/> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="517"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="515"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="530"/> <source>Modify Card Attribute</source> <translation>Kartenattribut ändern</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="533"/> - <source>Failed</source> - <translation>Fehlgeschlagen</translation> - </message> - <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="534"/> - <source>Failed to set attribute '%1'. Reason: %2. </source> - <translation>Attribut „%1“ konnte nicht gesetzt werden. Grund: %2.</translation> - </message> - <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="537"/> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="562"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="549"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="563"/> <source>Success</source> <translation>Erfolgreich</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="538"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="550"/> <source>Attribute operation completed successfully.</source> <translation>Attributänderung erfolgreich abgeschlossen.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="549"/> - <source>Failed to change Admin PIN.</source> - <translation>Ändern der Admin-PIN fehlgeschlagen.</translation> - </message> - <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="551"/> - <source>Failed to set the Reset Code.</source> - <translation>Setzen des Rücksetz-Codes fehlgeschlagen.</translation> - </message> - <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="553"/> - <source>Failed to change PIN.</source> - <translation>Ändern der PIN fehlgeschlagen.</translation> - </message> - <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="556"/> - <source>Reason: </source> - <translation>Grund: </translation> - </message> - <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="563"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="564"/> <source>PIN operation completed successfully.</source> <translation>PIN-Änderung erfolgreich abgeschlossen.</translation> </message> @@ -6435,82 +6456,82 @@ 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="82"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="83"/> <source>Tipps: if the key pair has a passphrase, the subkey's passphrase must be equal to it.</source> <translation>Tipps: Wenn das Schlüsselpaar eine Passphrase hat, muss die Passphrase des Unterschlüssels die gleiche sein.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="85"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="86"/> <source>Generate New Subkey</source> <translation>Neuen Unterschlüssel erstellen</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="63"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="64"/> <source>Authentication</source> <translation>Authentifizierung</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="57"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="58"/> <source>Algorithm</source> <translation>Algorithmus</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="58"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="59"/> <source>Key Length</source> <translation>Länge des Schlüssels</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="59"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="60"/> <source>Expire Date</source> <translation>Ablaufdatum</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="60"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="61"/> <source>Usage</source> <translation>Verwendungszweck</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="61"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="62"/> <source>Encrypt</source> <translation>Verschlüsseln</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="62"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="63"/> <source>Sign</source> <translation>Unterschreiben</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="64"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="65"/> <source>Non Expired</source> <translation>Nicht abgelaufen</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="65"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="66"/> <source>No Passphrase</source> <translation>Keine Passphrase</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="183"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="188"/> <source>Please give a valid subkey algorithm.</source> <translation>Bitte geben Sie einen gültigen Unterschlüssel-Algorithmus an.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="192"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="197"/> <source>Time to subkey expiration must not be less than 120 seconds.</source> <translation>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="204"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="209"/> <source>Generating</source> <translation>Erstellen</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="215"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="220"/> <source>Error</source> <translation>Fehler</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="216"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="221"/> <source>Unknown error occurred</source> <translation>Unbekannter Fehler ist aufgetreten</translation> </message> @@ -6987,13 +7008,13 @@ Wenn das Problem weiterhin besteht, wenden Sie sich an den technischen Support o </message> <message> <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="44"/> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="159"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="166"/> <source>Usage</source> <translation>Verwendungszweck</translation> </message> <message> <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="44"/> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="160"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="167"/> <source>Trust</source> <translation>Vertrauen</translation> </message> @@ -7019,32 +7040,32 @@ Wenn das Problem weiterhin besteht, wenden Sie sich an den technischen Support o </message> <message> <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="46"/> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="161"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="168"/> <source>Comment</source> <translation>Kommentar</translation> </message> <message> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="157"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="164"/> <source>ID</source> <translation>ID</translation> </message> <message> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="158"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="165"/> <source>Algo</source> <translation>Algorithmus</translation> </message> <message> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="162"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="169"/> <source>No Comment</source> <translation>Kein Kommentar</translation> </message> <message> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="168"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="175"/> <source>SubKeys (up to 8):</source> <translation>Unterschlüssel (bis zu 8):</translation> </message> <message> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="174"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="181"/> <source>ID: %1 | Algo: %2 | Usage: %3</source> <translation>ID: %1 | Algorithmus: %2 | Verwendung: %3</translation> </message> @@ -7173,42 +7194,42 @@ Wenn das Problem weiterhin besteht, wenden Sie sich an den technischen Support o <translation>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="423"/> + <location filename="../../../../src/core/GpgCoreInit.cpp" line="473"/> <source>Cannot Find GpgConf</source> <translation>GpgConf kann nicht gefunden werden</translation> </message> <message> - <location filename="../../../../src/core/GpgCoreInit.cpp" line="431"/> + <location filename="../../../../src/core/GpgCoreInit.cpp" line="481"/> <source>Cannot Find GnuPG</source> <translation>GnuPG kann nicht gefunden werden</translation> </message> <message> - <location filename="../../../../src/core/GpgCoreInit.cpp" line="406"/> + <location filename="../../../../src/core/GpgCoreInit.cpp" line="456"/> <source>Cannot get Infos from GpgConf</source> <translation>Kann keine Infos von GpgConf erhalten</translation> </message> <message> - <location filename="../../../../src/core/GpgCoreInit.cpp" line="446"/> + <location filename="../../../../src/core/GpgCoreInit.cpp" line="496"/> <source>Cannot Find Default Home Path</source> <translation>Standard-GnuPG-Startpfad kann nicht gefunden werden</translation> </message> <message> - <location filename="../../../../src/core/GpgCoreInit.cpp" line="472"/> + <location filename="../../../../src/core/GpgCoreInit.cpp" line="522"/> <source>GpgME Initiation Failed</source> <translation>GpgME-Initiation fehlgeschlagen</translation> </message> <message> - <location filename="../../../../src/core/GpgCoreInit.cpp" line="527"/> + <location filename="../../../../src/core/GpgCoreInit.cpp" line="577"/> <source>No valid Key Database</source> <translation>Keine gültige Schlüsseldatenbank</translation> </message> <message> - <location filename="../../../../src/core/GpgCoreInit.cpp" line="556"/> + <location filename="../../../../src/core/GpgCoreInit.cpp" line="607"/> <source>GpgME Default Context Initiation Failed</source> <translation>GpgME-Standardkontext-Initiation fehlgeschlagen</translation> </message> <message> - <location filename="../../../../src/core/GpgCoreInit.cpp" line="567"/> + <location filename="../../../../src/core/GpgCoreInit.cpp" line="623"/> <source>Gpg Default Key Database Initiation Failed</source> <translation>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 a6475318..88611c20 100644 --- a/resource/lfs/locale/ts/GpgFrontend.en_US.ts +++ b/resource/lfs/locale/ts/GpgFrontend.en_US.ts @@ -492,7 +492,7 @@ <context> <name>GpgFrontend::KeyGenerateInfo</name> <message> - <location filename="../../../../src/core/model/GpgKeyGenerateInfo.cpp" line="39"/> + <location filename="../../../../src/core/model/GpgKeyGenerateInfo.cpp" line="40"/> <source>None</source> <translation type="unfinished"></translation> </message> @@ -586,22 +586,22 @@ <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/ADSKsPicker.cpp" line="123"/> + <location filename="../../../../src/ui/dialog/ADSKsPicker.cpp" line="122"/> <source>Failed</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/ADSKsPicker.cpp" line="124"/> + <location filename="../../../../src/ui/dialog/ADSKsPicker.cpp" line="123"/> <source>Partially Failed</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/ADSKsPicker.cpp" line="126"/> + <location filename="../../../../src/ui/dialog/ADSKsPicker.cpp" line="125"/> <source>Failed to add all selected subkeys.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/ADSKsPicker.cpp" line="127"/> + <location filename="../../../../src/ui/dialog/ADSKsPicker.cpp" line="126"/> <source>Some subkeys failed to be added as ADSKs.</source> <translation type="unfinished"></translation> </message> @@ -770,7 +770,7 @@ <name>GpgFrontend::UI::CommonUtils</name> <message> <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="163"/> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="303"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="311"/> <source>Success</source> <translation type="unfinished"></translation> </message> @@ -780,121 +780,122 @@ <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="174"/> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="295"/> - <source>Failure</source> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="172"/> + <source>Operation Not Supported</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="175"/> - <source>Gpg Operation failed. - -Error code: %1 -Source: %2 -Description: %3</source> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="173"/> + <source>The current GnuPG version is too low and does not support this operation. Please upgrade your GnuPG version to continue.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="182"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="303"/> + <source>Failure</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="202"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="210"/> <source>Open Key</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="203"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="211"/> <source>Keyring files</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="210"/> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="217"/> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="485"/> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="647"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="218"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="225"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="493"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="655"/> <source>Error</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="211"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="219"/> <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="218"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="226"/> <source>The target file is too large for a keyring.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="224"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="232"/> <source>File Open Failed</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="225"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="233"/> <source>Failed to open file: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="276"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="284"/> <source>Processing</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="296"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="304"/> <source>Failed to execute command.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="304"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="312"/> <source>Succeed in executing command.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="306"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="314"/> <source>Warning</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="307"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="315"/> <source>Finished executing command.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="327"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="335"/> <source>Default Keyserver Not Found</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="328"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="336"/> <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="425"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="433"/> <source>Key Not Found</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="428"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="436"/> <source>Timeout</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="431"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="439"/> <source>Key Server Not Found</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="434"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="442"/> <source>Connection Error</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="647"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="655"/> <source>Key Not Found.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="375"/> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="445"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="383"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="453"/> <source>The key has been updated</source> <translation type="unfinished"></translation> </message> @@ -909,8 +910,33 @@ Description: %3</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="377"/> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="447"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="183"/> + <source>Gpg Operation failed.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="184"/> + <source>Error code: %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="185"/> + <source>Source: %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="186"/> + <source>Description: %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="187"/> + <source>Error Message: %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="385"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="455"/> <source>No need to update the key</source> <translation type="unfinished"></translation> </message> @@ -1488,7 +1514,7 @@ This will result in loss of all cached form positions, statuses, key servers, et <message> <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="326"/> <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="333"/> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="345"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="346"/> <source>Illegal GnuPG Path</source> <translation type="unfinished"></translation> </message> @@ -1503,75 +1529,75 @@ 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/controller/GnuPGControllerDialog.cpp" line="346"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="347"/> <source>Target GnuPG Path contains no "gpgconf" executable.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="358"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="359"/> <source>Maximum Key Database Limit Reached</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="359"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="360"/> <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="370"/> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="616"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="371"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="617"/> <source>Duplicate Key Database Paths</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="371"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="372"/> <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="380"/> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="627"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="381"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="628"/> <source>Invalid Key Database Paths</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="381"/> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="628"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="382"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="629"/> <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="428"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="429"/> <source>Active</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="428"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="429"/> <source>Inactive</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="456"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="457"/> <source>Confirm Deletion</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="457"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="458"/> <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="595"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="596"/> <source>No Key Database Selected</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="596"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="597"/> <source>Please select a key database to edit.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="617"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="618"/> <source>The edited key database path duplicates a previously existing one.</source> <translation type="unfinished"></translation> </message> @@ -1602,10 +1628,18 @@ This will result in loss of all cached form positions, statuses, key servers, et <context> <name>GpgFrontend::UI::GpgOperaHelper</name> <message> - <location filename="../../../../src/ui/function/GpgOperaHelper.cpp" line="96"/> - <location filename="../../../../src/ui/function/GpgOperaHelper.cpp" line="132"/> - <location filename="../../../../src/ui/function/GpgOperaHelper.cpp" line="174"/> - <location filename="../../../../src/ui/function/GpgOperaHelper.cpp" line="212"/> + <location filename="../../../../src/ui/function/GpgOperaHelper.cpp" line="94"/> + <location filename="../../../../src/ui/function/GpgOperaHelper.cpp" line="136"/> + <location filename="../../../../src/ui/function/GpgOperaHelper.cpp" line="185"/> + <location filename="../../../../src/ui/function/GpgOperaHelper.cpp" line="228"/> + <source>Operation Not Supported</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/function/GpgOperaHelper.cpp" line="102"/> + <location filename="../../../../src/ui/function/GpgOperaHelper.cpp" line="144"/> + <location filename="../../../../src/ui/function/GpgOperaHelper.cpp" line="191"/> + <location filename="../../../../src/ui/function/GpgOperaHelper.cpp" line="234"/> <source>Critical Error</source> <translation type="unfinished"></translation> </message> @@ -1823,218 +1857,218 @@ This will result in loss of all cached form positions, statuses, key servers, et <context> <name>GpgFrontend::UI::KeyGenerateDialog</name> <message> - <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="575"/> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="581"/> - <source>Custom</source> - <translation type="unfinished"></translation> - </message> - <message> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="64"/> <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="71"/> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="524"/> - <source>3 Months</source> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="580"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="586"/> + <source>Custom</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="72"/> <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="529"/> - <source>6 Months</source> + <source>3 Months</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="73"/> <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="534"/> - <source>1 Year</source> + <source>6 Months</source> <translation type="unfinished"></translation> </message> <message> <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="539"/> - <source>2 Years</source> + <source>1 Year</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="75"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="140"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="145"/> <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="544"/> - <source>5 Years</source> + <source>2 Years</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="76"/> <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="549"/> - <source>10 Years</source> + <source>5 Years</source> <translation type="unfinished"></translation> </message> <message> <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="555"/> - <source>Non Expired</source> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="554"/> + <source>10 Years</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="586"/> - <source>Primary Key Only</source> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="78"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="101"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="110"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="560"/> + <source>Non Expired</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> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="295"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="591"/> + <source>Primary Key Only</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="85"/> - <source>Name</source> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="83"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="343"/> + <source>Primary Key With Subkey</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="86"/> - <source>Email</source> + <source>Name</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="87"/> - <source>Comment</source> + <source>Email</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="88"/> - <source>Key Database</source> + <source>Comment</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> + <source>Key Database</source> <translation type="unfinished"></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> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="103"/> + <source>Algorithm</source> <translation type="unfinished"></translation> </message> <message> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="91"/> <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> + <source>Validity Period</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> + <source>Key Length</source> <translation type="unfinished"></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> + <source>Usage</source> <translation type="unfinished"></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> + <source>Encrypt</source> <translation type="unfinished"></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> + <source>Sign</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="99"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="109"/> + <source>Authentication</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="100"/> <source>No Passphrase</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="103"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="104"/> <source>Expire Date</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="112"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="113"/> <source>Easy Mode</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="113"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="114"/> <source>Primary Key</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="114"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="115"/> <source>Subkey</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="117"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="118"/> <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"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="135"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="266"/> <source>None</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="146"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="147"/> <source>Generate Key</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="156"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="161"/> <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"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="166"/> <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"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="171"/> <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"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="180"/> <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"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="187"/> <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"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="195"/> <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="614"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="619"/> <source>Error</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="615"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="620"/> <source>Unknown error occurred</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="627"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="632"/> <source>Generating</source> <translation type="unfinished"></translation> </message> @@ -2483,7 +2517,7 @@ These keys are no longer available. Do you want to remove them from the group?</ </message> <message> <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="210"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="528"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="533"/> <source>Key Package</source> <translation type="unfinished"></translation> </message> @@ -2605,22 +2639,22 @@ These keys are no longer available. Do you want to remove them from the group?</ <message> <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="406"/> <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="418"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="482"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="493"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="506"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="537"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="545"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="561"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="569"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="585"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="487"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="498"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="511"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="542"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="550"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="566"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="574"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="590"/> <source>Error</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="372"/> <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="387"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="457"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="466"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="462"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="471"/> <source>Forbidden</source> <translation type="unfinished"></translation> </message> @@ -2632,102 +2666,102 @@ These keys are no longer available. Do you want to remove them from the group?</ </message> <message> <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="380"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="520"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="525"/> <source>key(s) exported</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="396"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="472"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="477"/> <source>Exporting</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="407"/> <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="419"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="483"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="494"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="488"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="499"/> <source>Unknown error occurred</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="441"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="449"/> <source>Invalid Operation</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="442"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="450"/> <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="458"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="463"/> <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="467"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="472"/> <source>This operation accepts just a single key.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="507"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="512"/> <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="515"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="520"/> <source>Export OpenSSH Key To File</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="516"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="521"/> <source>OpenSSH Public Key Files</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="528"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="533"/> <source>Import Key Package</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="538"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="562"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="543"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="567"/> <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="546"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="551"/> <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="551"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="556"/> <source>Import Key Package Passphrase File</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="552"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="557"/> <source>Key Package Passphrase File</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="570"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="575"/> <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="575"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="580"/> <source>Importing</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="591"/> <source>An error occur in importing key package.</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="597"/> <source>key(s) imported</source> <translation type="unfinished"></translation> </message> @@ -3312,313 +3346,313 @@ Note: For verification, you can find more information here: https://keys.openpgp <context> <name>GpgFrontend::UI::KeyPairSubkeyTab</name> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="81"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="189"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="85"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="193"/> <source>Key ID</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="83"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="189"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="87"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="193"/> <source>Algorithm</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="84"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="190"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="88"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="194"/> <source>Algorithm Detail</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="86"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="189"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="90"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="193"/> <source>Key Size</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="87"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="91"/> <source>Usage</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="89"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="93"/> <source>Expires On (Local Time)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="91"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="95"/> <source>Create Date (Local Time)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="92"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="96"/> <source>Existence</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="94"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="98"/> <source>Key in Smart Card</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="96"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="100"/> <source>Fingerprint</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="54"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="53"/> <source>List of the primary key and subkey(s)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="55"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="54"/> <source>Detail of Selected Primary Key/Subkey</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="59"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="58"/> <source>New Subkey</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="60"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="59"/> <source>Add ADSK(s)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="82"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="189"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="86"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="193"/> <source>Key Type</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="93"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="97"/> <source>Revoked</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="128"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="370"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="132"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="377"/> <source>Export Subkey</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="190"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="194"/> <source>Create Date</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="190"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="194"/> <source>Expire Date</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="213"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="374"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="217"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="381"/> <source>Primary Key</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="213"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="375"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="217"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="382"/> <source>Subkey</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="214"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="218"/> <source>ADSK</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="238"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="242"/> <source>Never Expire</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="309"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="316"/> <source>Never Expires</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="333"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="340"/> <source>Exists</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="334"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="341"/> <source>Not Exists</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="337"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="377"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="344"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="384"/> <source>Yes</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="337"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="377"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="344"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="384"/> <source>No</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="369"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="376"/> <source>Export Primary Key</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="391"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="398"/> <source>Edit Expire Date</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="395"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="402"/> <source>Export</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="399"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="406"/> <source>Delete</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="403"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="410"/> <source>Revoke</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="456"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="463"/> <source>Exporting Subkey</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="457"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="464"/> <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="458"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="465"/> <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="461"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="468"/> <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="488"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="495"/> <source>Export Key To File</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="489"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="496"/> <source>Key Files</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="501"/> <source>Export Error</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="495"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="502"/> <source>Couldn't open %1 for writing</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="503"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="510"/> <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="509"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="516"/> <source>Delete Subkey Confirmation</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="524"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="573"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="531"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="580"/> <source>Illegal Operation</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="532"/> <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="533"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="540"/> <source>Operation Failed</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="534"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="541"/> <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="540"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="547"/> <source>Operation Successful</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="541"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="548"/> <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="550"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="557"/> <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="557"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="564"/> <source>Revoke Subkey</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="574"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="581"/> <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="579"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="586"/> <source>0 -> No Reason.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="579"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="586"/> <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="580"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="587"/> <source>2 -> Key is outdated.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="580"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="587"/> <source>3 -> Key is no longer used</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="591"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="598"/> <source>Revocation Failed</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="592"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="599"/> <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="595"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="602"/> <source>Revocation Successful</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="596"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="603"/> <source>The subkey has been successfully revoked.</source> <translation type="unfinished"></translation> </message> @@ -3854,139 +3888,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="54"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="55"/> <source>Close</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="57"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="58"/> <source>Import ALL</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="61"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="62"/> <source>Search</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="66"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="67"/> <source>Search String</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="66"/> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="70"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="67"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="71"/> <source>: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="70"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="71"/> <source>Key Server</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="111"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="112"/> <source>Import Keys from key server</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="154"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="155"/> <source>UID</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="154"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="155"/> <source>Creation date</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="154"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="155"/> <source>KeyID</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="154"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="155"/> <source>Tag</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="177"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="178"/> <source>Text is empty.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="220"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="221"/> <source>Not Key Found</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="224"/> <source>Timeout</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="227"/> <source>Key Server Not Found</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="230"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="231"/> <source>Connection Error</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="239"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="240"/> <source>Too many responses from keyserver!</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="251"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="252"/> <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="261"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="262"/> <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="268"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="269"/> <source>Insufficiently specific search string!</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="303"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="304"/> <source>revoked</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="307"/> <source>disabled</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="351"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="352"/> <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="372"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="373"/> <source>Warning</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="373"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="374"/> <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="419"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="420"/> <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="437"/> <source>Processing ...</source> <translation type="unfinished"></translation> </message> @@ -4280,13 +4314,29 @@ 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="157"/> - <location filename="../../../../src/ui/main_window/MainWindow.cpp" line="160"/> + <location filename="../../../../src/ui/main_window/MainWindow.cpp" line="125"/> + <source>GUI Pinentry Not Found</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/main_window/MainWindow.cpp" line="126"/> + <source>No suitable *graphical* Pinentry program was found on your system. + +Please install a GUI-based Pinentry (e.g., 'pinentry-qt', 'pinentry-gnome3', or 'pinentry-mac' on macOS). + +Without a GUI Pinentry, GnuPG cannot prompt you for passwords or passphrases. + +After installing it, please restart GpgFrontend. The configuration file will be updated automatically.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/main_window/MainWindow.cpp" line="177"/> + <location filename="../../../../src/ui/main_window/MainWindow.cpp" line="180"/> <source>Critical error occur while loading GpgFrontend.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindow.cpp" line="159"/> + <location filename="../../../../src/ui/main_window/MainWindow.cpp" line="179"/> <source>Loading Failed</source> <translation type="unfinished"></translation> </message> @@ -5068,26 +5118,26 @@ If the issue persists, consider seeking technical support or consulting the docu <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="317"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="331"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="346"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="322"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="340"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="359"/> <source>Successful Operation</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="318"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="323"/> <source>Clear password cache successfully</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="320"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="335"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="350"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="325"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="344"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="363"/> <source>Failed Operation</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="321"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="326"/> <source>Failed to clear password cache of GnuPG</source> <translation type="unfinished"></translation> </message> @@ -5102,12 +5152,12 @@ If the issue persists, consider seeking technical support or consulting the docu <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="332"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="341"/> <source>Reload all the GnuPG's components successfully</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="336"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="345"/> <source>Failed to reload all or one of the GnuPG's component(s)</source> <translation type="unfinished"></translation> </message> @@ -5122,12 +5172,12 @@ If the issue persists, consider seeking technical support or consulting the docu <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="360"/> <source>Restart all the GnuPG's components successfully</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="351"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="364"/> <source>Failed to restart all or one of the GnuPG's component(s)</source> <translation type="unfinished"></translation> </message> @@ -5874,495 +5924,464 @@ If the issue persists, consider seeking technical support or consulting the docu <context> <name>GpgFrontend::UI::SmartCardControllerDialog</name> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="50"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="51"/> <source>Smart Card(s):</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="51"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="52"/> <source>Key Stub(s) in Key Database(s):</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="53"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="54"/> <source>Change Name</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="54"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="55"/> <source>Change Language</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="55"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="56"/> <source>Change Gender</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="56"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="57"/> <source>Change Login Data</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="57"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="58"/> <source>Change Public Key URL</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="58"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="59"/> <source>Change PIN</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="59"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="60"/> <source>Change Admin PIN</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="60"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="61"/> <source>Change Reset Code</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="61"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="62"/> <source>Fetch</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="62"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="63"/> <source>Restart All Gpg-Agents</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="63"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="64"/> <source>Generate Card Keys</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="64"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="65"/> <source>Refresh</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="66"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="67"/> <source>Operations</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="117"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="123"/> <source>Successful Operation</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="118"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="124"/> <source>Restart all the GnuPG's components successfully</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="121"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="127"/> <source>Failed Operation</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="122"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="128"/> <source>Failed to restart all or one of the GnuPG's component(s)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="135"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="140"/> <source>Generate card key failed.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="156"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="161"/> <source>Smart Card Controller</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="210"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="218"/> <source>OpenPGP Card Information</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="212"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="220"/> <source>Basic Information</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="213"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="221"/> <source>Reader</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="214"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="222"/> <source>Serial Number</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="216"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="224"/> <source>Card Type</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="218"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="226"/> <source>Card Version</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="220"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="228"/> <source>App Type</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="222"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="230"/> <source>App Version</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="224"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="232"/> <source>Manufacturer ID</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="226"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="234"/> <source>Manufacturer</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="228"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="236"/> <source>Card Holder</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="230"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="238"/> <source>Language</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="232"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="240"/> <source>Sex</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="237"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="245"/> <source>Signature Counter</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="239"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="247"/> <source>CHV1 Cached</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="241"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="249"/> <source>CHV Max Length</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="247"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="255"/> <source>CHV Retry Left</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="253"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="261"/> <source>KDF Status</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="269"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="277"/> <source>UIF</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="270"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="278"/> <source>Sign</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="271"/> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="273"/> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="275"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="279"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="281"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="283"/> <source>Enabled</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="271"/> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="273"/> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="275"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="279"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="281"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="283"/> <source>Disabled</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="272"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="280"/> <source>Encrypt</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="274"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="282"/> <source>Authenticate</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="322"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="330"/> <source>Status Indicator</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="467"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="480"/> <source>Cardholder's Surname</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="468"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="481"/> <source>Please enter your surname (e.g., Lee):</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="473"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="486"/> <source>Cardholder's Given Name</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="474"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="487"/> <source>Please enter your given name (e.g., Chris):</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="483"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="496"/> <source>Too Long</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="484"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="497"/> <source>Combined name too long (max 39 characters).</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="499"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="512"/> <source>Male</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="499"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="512"/> <source>Female</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="503"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="516"/> <source>Select sex to store in '%1'</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="518"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="531"/> <source>Enter new value for attribute '%1'</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="236"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="244"/> <source>Status</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="256"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="264"/> <source>Not enabled</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="259"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="267"/> <source>Enabled (no protection)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="262"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="270"/> <source>Enabled with salt protection</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="265"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="273"/> <source>Unknown</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="279"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="287"/> <source>Key Information</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="283"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="291"/> <source>No key information available.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="286"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="294"/> <source>No.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="286"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="294"/> <source>Fingerprint</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="287"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="295"/> <source>Created</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="287"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="295"/> <source>Grip</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="288"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="296"/> <source>Type</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="288"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="296"/> <source>Algorithm</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="289"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="297"/> <source>Usage</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="289"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="297"/> <source>Curve</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="307"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="315"/> <source>Extended Capabilities</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="309"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="317"/> <source>Key Info (ki): %1</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="309"/> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="313"/> <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="317"/> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="320"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="321"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="325"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="328"/> <source>Yes</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="309"/> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="313"/> <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="317"/> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="320"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="321"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="325"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="328"/> <source>No</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="312"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="320"/> <source>Additional Auth (aac): %1</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="316"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="324"/> <source>Biometric Terminal (bt): %1</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="320"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="328"/> <source>KDF Supported: %1</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="327"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="335"/> <source>Additional Info</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="379"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="387"/> <source>No OpenPGP Smart Card Found</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="380"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="388"/> <source>No OpenPGP-compatible smart card has been detected.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="384"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="392"/> <source>An OpenPGP Smart Card is a physical device that securely stores your private cryptographic keys and can be used for digital signing, encryption, and authentication. Popular examples include YubiKey, Nitrokey, and other GnuPG-compatible tokens.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="392"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="400"/> <source>Make sure your card is inserted and properly recognized by the system. You can also try reconnecting the card or restarting the application.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="398"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="406"/> <source>Note: Smart card support of GpgFrontend requires GnuPG version 2.3.0 or later.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="402"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="410"/> <source>Read the GnuPG Smart Card HOWTO: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="502"/> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="517"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="515"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="530"/> <source>Modify Card Attribute</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="533"/> - <source>Failed</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="534"/> - <source>Failed to set attribute '%1'. Reason: %2. </source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="537"/> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="562"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="549"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="563"/> <source>Success</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="538"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="550"/> <source>Attribute operation completed successfully.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="549"/> - <source>Failed to change Admin PIN.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="551"/> - <source>Failed to set the Reset Code.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="553"/> - <source>Failed to change PIN.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="556"/> - <source>Reason: </source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="134"/> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="558"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="139"/> <source>Error</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="563"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="564"/> <source>PIN operation completed successfully.</source> <translation type="unfinished"></translation> </message> @@ -6370,82 +6389,82 @@ 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="82"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="83"/> <source>Tipps: if the key pair has a passphrase, the subkey's passphrase must be equal to it.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="85"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="86"/> <source>Generate New Subkey</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="63"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="64"/> <source>Authentication</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="57"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="58"/> <source>Algorithm</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="58"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="59"/> <source>Key Length</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="59"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="60"/> <source>Expire Date</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="60"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="61"/> <source>Usage</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="61"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="62"/> <source>Encrypt</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="62"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="63"/> <source>Sign</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="64"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="65"/> <source>Non Expired</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="65"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="66"/> <source>No Passphrase</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="183"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="188"/> <source>Please give a valid subkey algorithm.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="192"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="197"/> <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="204"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="209"/> <source>Generating</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="215"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="220"/> <source>Error</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="216"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="221"/> <source>Unknown error occurred</source> <translation type="unfinished"></translation> </message> @@ -6920,13 +6939,13 @@ If the issue persists, consider seeking technical support or consulting the docu </message> <message> <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="44"/> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="159"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="166"/> <source>Usage</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="44"/> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="160"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="167"/> <source>Trust</source> <translation type="unfinished"></translation> </message> @@ -6952,32 +6971,32 @@ If the issue persists, consider seeking technical support or consulting the docu </message> <message> <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="46"/> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="161"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="168"/> <source>Comment</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="157"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="164"/> <source>ID</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="158"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="165"/> <source>Algo</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="162"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="169"/> <source>No Comment</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="168"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="175"/> <source>SubKeys (up to 8):</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="174"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="181"/> <source>ID: %1 | Algo: %2 | Usage: %3</source> <translation type="unfinished"></translation> </message> @@ -7106,42 +7125,42 @@ If the issue persists, consider seeking technical support or consulting the docu <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/core/GpgCoreInit.cpp" line="423"/> + <location filename="../../../../src/core/GpgCoreInit.cpp" line="473"/> <source>Cannot Find GpgConf</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/core/GpgCoreInit.cpp" line="431"/> + <location filename="../../../../src/core/GpgCoreInit.cpp" line="481"/> <source>Cannot Find GnuPG</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/core/GpgCoreInit.cpp" line="406"/> + <location filename="../../../../src/core/GpgCoreInit.cpp" line="456"/> <source>Cannot get Infos from GpgConf</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/core/GpgCoreInit.cpp" line="446"/> + <location filename="../../../../src/core/GpgCoreInit.cpp" line="496"/> <source>Cannot Find Default Home Path</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/core/GpgCoreInit.cpp" line="472"/> + <location filename="../../../../src/core/GpgCoreInit.cpp" line="522"/> <source>GpgME Initiation Failed</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/core/GpgCoreInit.cpp" line="527"/> + <location filename="../../../../src/core/GpgCoreInit.cpp" line="577"/> <source>No valid Key Database</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/core/GpgCoreInit.cpp" line="556"/> + <location filename="../../../../src/core/GpgCoreInit.cpp" line="607"/> <source>GpgME Default Context Initiation Failed</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/core/GpgCoreInit.cpp" line="567"/> + <location filename="../../../../src/core/GpgCoreInit.cpp" line="623"/> <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 384d18d2..2cd98555 100644 --- a/resource/lfs/locale/ts/GpgFrontend.fr_FR.ts +++ b/resource/lfs/locale/ts/GpgFrontend.fr_FR.ts @@ -492,7 +492,7 @@ <context> <name>GpgFrontend::KeyGenerateInfo</name> <message> - <location filename="../../../../src/core/model/GpgKeyGenerateInfo.cpp" line="39"/> + <location filename="../../../../src/core/model/GpgKeyGenerateInfo.cpp" line="40"/> <source>None</source> <translation type="unfinished"></translation> </message> @@ -586,22 +586,22 @@ <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/ADSKsPicker.cpp" line="123"/> + <location filename="../../../../src/ui/dialog/ADSKsPicker.cpp" line="122"/> <source>Failed</source> <translation type="unfinished">Échoué</translation> </message> <message> - <location filename="../../../../src/ui/dialog/ADSKsPicker.cpp" line="124"/> + <location filename="../../../../src/ui/dialog/ADSKsPicker.cpp" line="123"/> <source>Partially Failed</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/ADSKsPicker.cpp" line="126"/> + <location filename="../../../../src/ui/dialog/ADSKsPicker.cpp" line="125"/> <source>Failed to add all selected subkeys.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/ADSKsPicker.cpp" line="127"/> + <location filename="../../../../src/ui/dialog/ADSKsPicker.cpp" line="126"/> <source>Some subkeys failed to be added as ADSKs.</source> <translation type="unfinished"></translation> </message> @@ -769,13 +769,13 @@ <context> <name>GpgFrontend::UI::CommonUtils</name> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="428"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="436"/> <source>Timeout</source> <translation type="unfinished">Temps libre</translation> </message> <message> <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="163"/> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="303"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="311"/> <source>Success</source> <translation type="unfinished">Succès</translation> </message> @@ -795,126 +795,148 @@ <translation type="unfinished">Opération Gpg réussie.</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="174"/> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="295"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="182"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="303"/> <source>Failure</source> <translation type="unfinished">Échec</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="175"/> - <source>Gpg Operation failed. - -Error code: %1 -Source: %2 -Description: %3</source> - <translation type="unfinished">L'opération Gpg a échoué. - -Code d'erreur : %1 -Source : %2 -Description : %3</translation> - </message> - <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="210"/> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="217"/> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="485"/> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="647"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="218"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="225"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="493"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="655"/> <source>Error</source> <translation type="unfinished">Erreur</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="202"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="210"/> <source>Open Key</source> <translation type="unfinished">Ouvrir la clé</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="203"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="172"/> + <source>Operation Not Supported</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="173"/> + <source>The current GnuPG version is too low and does not support this operation. Please upgrade your GnuPG version to continue.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="183"/> + <source>Gpg Operation failed.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="184"/> + <source>Error code: %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="185"/> + <source>Source: %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="186"/> + <source>Description: %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="187"/> + <source>Error Message: %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="211"/> <source>Keyring files</source> <translation type="unfinished">Fichiers de porte-clés</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="211"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="219"/> <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="218"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="226"/> <source>The target file is too large for a keyring.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="224"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="232"/> <source>File Open Failed</source> <translation type="unfinished">L'ouverture du fichier a échoué</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="225"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="233"/> <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="276"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="284"/> <source>Processing</source> <translation type="unfinished">Traitement</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="296"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="304"/> <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="304"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="312"/> <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="306"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="314"/> <source>Warning</source> <translation type="unfinished">Avertissement</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="307"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="315"/> <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="327"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="335"/> <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="328"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="336"/> <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="425"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="433"/> <source>Key Not Found</source> <translation type="unfinished">Clé introuvable</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="431"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="439"/> <source>Key Server Not Found</source> <translation type="unfinished">Serveur de clé introuvable</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="434"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="442"/> <source>Connection Error</source> <translation type="unfinished">Erreur de connexion</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="647"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="655"/> <source>Key Not Found.</source> <translation type="unfinished">Clé introuvable.</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="375"/> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="445"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="383"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="453"/> <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="377"/> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="447"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="385"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="455"/> <source>No need to update the key</source> <translation type="unfinished">Pas besoin de mettre à jour la clé</translation> </message> @@ -1460,70 +1482,70 @@ 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/controller/GnuPGControllerDialog.cpp" line="358"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="359"/> <source>Maximum Key Database Limit Reached</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="359"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="360"/> <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="370"/> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="616"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="371"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="617"/> <source>Duplicate Key Database Paths</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="371"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="372"/> <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="380"/> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="627"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="381"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="628"/> <source>Invalid Key Database Paths</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="381"/> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="628"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="382"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="629"/> <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="428"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="429"/> <source>Active</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="428"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="429"/> <source>Inactive</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="456"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="457"/> <source>Confirm Deletion</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="457"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="458"/> <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="595"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="596"/> <source>No Key Database Selected</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="596"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="597"/> <source>Please select a key database to edit.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="617"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="618"/> <source>The edited key database path duplicates a previously existing one.</source> <translation type="unfinished"></translation> </message> @@ -1560,7 +1582,7 @@ This will result in loss of all cached form positions, statuses, key servers, et <message> <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="326"/> <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="333"/> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="345"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="346"/> <source>Illegal GnuPG Path</source> <translation type="unfinished">Chemin GnuPG illégal</translation> </message> @@ -1575,7 +1597,7 @@ This will result in loss of all cached form positions, statuses, key servers, et <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="346"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="347"/> <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> @@ -1606,10 +1628,18 @@ This will result in loss of all cached form positions, statuses, key servers, et <context> <name>GpgFrontend::UI::GpgOperaHelper</name> <message> - <location filename="../../../../src/ui/function/GpgOperaHelper.cpp" line="96"/> - <location filename="../../../../src/ui/function/GpgOperaHelper.cpp" line="132"/> - <location filename="../../../../src/ui/function/GpgOperaHelper.cpp" line="174"/> - <location filename="../../../../src/ui/function/GpgOperaHelper.cpp" line="212"/> + <location filename="../../../../src/ui/function/GpgOperaHelper.cpp" line="94"/> + <location filename="../../../../src/ui/function/GpgOperaHelper.cpp" line="136"/> + <location filename="../../../../src/ui/function/GpgOperaHelper.cpp" line="185"/> + <location filename="../../../../src/ui/function/GpgOperaHelper.cpp" line="228"/> + <source>Operation Not Supported</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/function/GpgOperaHelper.cpp" line="102"/> + <location filename="../../../../src/ui/function/GpgOperaHelper.cpp" line="144"/> + <location filename="../../../../src/ui/function/GpgOperaHelper.cpp" line="191"/> + <location filename="../../../../src/ui/function/GpgOperaHelper.cpp" line="234"/> <source>Critical Error</source> <translation type="unfinished"></translation> </message> @@ -1827,218 +1857,218 @@ This will result in loss of all cached form positions, statuses, key servers, et <context> <name>GpgFrontend::UI::KeyGenerateDialog</name> <message> - <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="575"/> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="581"/> - <source>Custom</source> - <translation type="unfinished"></translation> - </message> - <message> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="64"/> <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="71"/> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="524"/> - <source>3 Months</source> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="580"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="586"/> + <source>Custom</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="72"/> <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="529"/> - <source>6 Months</source> + <source>3 Months</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="73"/> <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="534"/> - <source>1 Year</source> + <source>6 Months</source> <translation type="unfinished"></translation> </message> <message> <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="539"/> - <source>2 Years</source> + <source>1 Year</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="75"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="140"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="145"/> <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="544"/> - <source>5 Years</source> + <source>2 Years</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="76"/> <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="549"/> - <source>10 Years</source> + <source>5 Years</source> <translation type="unfinished"></translation> </message> <message> <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="555"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="554"/> + <source>10 Years</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="78"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="101"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="110"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="560"/> <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="586"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="82"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="295"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="591"/> <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"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="83"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="343"/> <source>Primary Key With Subkey</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="85"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="86"/> <source>Name</source> <translation type="unfinished">Nom</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="86"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="87"/> <source>Email</source> <translation type="unfinished">E-mail</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="87"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="88"/> <source>Comment</source> <translation type="unfinished">Commentaire</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="88"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="89"/> <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"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="90"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="93"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="103"/> <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"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="91"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="94"/> <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"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="95"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="105"/> <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"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="96"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="106"/> <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"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="97"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="107"/> <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"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="98"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="108"/> <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"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="99"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="109"/> <source>Authentication</source> <translation type="unfinished">Authentification</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="99"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="100"/> <source>No Passphrase</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="103"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="104"/> <source>Expire Date</source> <translation type="unfinished">Date d'expiration</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="112"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="113"/> <source>Easy Mode</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="113"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="114"/> <source>Primary Key</source> <translation type="unfinished">Clé primaire</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="114"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="115"/> <source>Subkey</source> <translation type="unfinished">Sous-clé</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="117"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="118"/> <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"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="135"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="266"/> <source>None</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="146"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="147"/> <source>Generate Key</source> <translation type="unfinished">Générer la clé</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="156"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="161"/> <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/key_generate/KeyGenerateDialog.cpp" line="161"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="166"/> <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"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="171"/> <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"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="180"/> <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"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="187"/> <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"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="195"/> <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="614"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="619"/> <source>Error</source> <translation type="unfinished">Erreur</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="615"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="620"/> <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="627"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="632"/> <source>Generating</source> <translation type="unfinished">Générateur</translation> </message> @@ -2487,7 +2517,7 @@ These keys are no longer available. Do you want to remove them from the group?</ </message> <message> <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="210"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="528"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="533"/> <source>Key Package</source> <translation type="unfinished">Paquet de clés</translation> </message> @@ -2609,22 +2639,22 @@ These keys are no longer available. Do you want to remove them from the group?</ <message> <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="406"/> <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="418"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="482"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="493"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="506"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="537"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="545"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="561"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="569"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="585"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="487"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="498"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="511"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="542"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="550"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="566"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="574"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="590"/> <source>Error</source> <translation type="unfinished">Erreur</translation> </message> <message> <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="372"/> <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="387"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="457"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="466"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="462"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="471"/> <source>Forbidden</source> <translation type="unfinished">Interdit</translation> </message> @@ -2636,102 +2666,102 @@ These keys are no longer available. Do you want to remove them from the group?</ </message> <message> <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="380"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="520"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="525"/> <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="396"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="472"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="477"/> <source>Exporting</source> <translation type="unfinished">Exportation</translation> </message> <message> <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="407"/> <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="419"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="483"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="494"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="488"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="499"/> <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="441"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="449"/> <source>Invalid Operation</source> <translation type="unfinished">Opération invalide</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="442"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="450"/> <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="458"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="463"/> <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="467"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="472"/> <source>This operation accepts just a single key.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="507"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="512"/> <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="515"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="520"/> <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="516"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="521"/> <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="528"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="533"/> <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="538"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="562"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="543"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="567"/> <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="546"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="551"/> <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="551"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="556"/> <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="552"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="557"/> <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="570"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="575"/> <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="575"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="580"/> <source>Importing</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="597"/> <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="586"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="591"/> <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> @@ -3316,313 +3346,313 @@ Note: For verification, you can find more information here: https://keys.openpgp <context> <name>GpgFrontend::UI::KeyPairSubkeyTab</name> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="81"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="189"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="85"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="193"/> <source>Key ID</source> <translation type="unfinished">Identifiant de clé</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="83"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="189"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="87"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="193"/> <source>Algorithm</source> <translation type="unfinished">Algorithme</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="84"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="190"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="88"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="194"/> <source>Algorithm Detail</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="86"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="189"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="90"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="193"/> <source>Key Size</source> <translation type="unfinished">Taille de la clé</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="87"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="91"/> <source>Usage</source> <translation type="unfinished">Usage</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="89"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="93"/> <source>Expires On (Local Time)</source> <translation type="unfinished">Expire le (heure locale)</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="91"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="95"/> <source>Create Date (Local Time)</source> <translation type="unfinished">Date de création (heure locale)</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="92"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="96"/> <source>Existence</source> <translation type="unfinished">Existence</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="94"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="98"/> <source>Key in Smart Card</source> <translation type="unfinished">Entrez la carte à puce</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="96"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="100"/> <source>Fingerprint</source> <translation type="unfinished">Empreinte digitale</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="54"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="53"/> <source>List of the primary key and subkey(s)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="55"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="54"/> <source>Detail of Selected Primary Key/Subkey</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="59"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="58"/> <source>New Subkey</source> <translation type="unfinished">Nouvelle sous-clé</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="60"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="59"/> <source>Add ADSK(s)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="82"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="189"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="86"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="193"/> <source>Key Type</source> <translation type="unfinished">Type de clé</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="93"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="97"/> <source>Revoked</source> <translation type="unfinished">Révoqué</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="128"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="370"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="132"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="377"/> <source>Export Subkey</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="190"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="194"/> <source>Create Date</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="190"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="194"/> <source>Expire Date</source> <translation type="unfinished">Date d'expiration</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="213"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="374"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="217"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="381"/> <source>Primary Key</source> <translation type="unfinished">Clé primaire</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="213"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="375"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="217"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="382"/> <source>Subkey</source> <translation type="unfinished">Sous-clé</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="214"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="218"/> <source>ADSK</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="238"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="242"/> <source>Never Expire</source> <translation type="unfinished">N'expire jamais</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="309"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="316"/> <source>Never Expires</source> <translation type="unfinished">N'expire jamais</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="333"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="340"/> <source>Exists</source> <translation type="unfinished">Existe</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="334"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="341"/> <source>Not Exists</source> <translation type="unfinished">N'existe pas</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="337"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="377"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="344"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="384"/> <source>Yes</source> <translation type="unfinished">Oui</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="337"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="377"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="344"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="384"/> <source>No</source> <translation type="unfinished">Non</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="369"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="376"/> <source>Export Primary Key</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="391"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="398"/> <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="395"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="402"/> <source>Export</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="399"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="406"/> <source>Delete</source> <translation type="unfinished">Effacer</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="403"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="410"/> <source>Revoke</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="456"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="463"/> <source>Exporting Subkey</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="457"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="464"/> <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="458"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="465"/> <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="461"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="468"/> <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="488"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="495"/> <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="489"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="496"/> <source>Key Files</source> <translation type="unfinished">Fichiers clés</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="494"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="501"/> <source>Export Error</source> <translation type="unfinished">Erreur d'exportation</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="495"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="502"/> <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="503"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="510"/> <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="509"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="516"/> <source>Delete Subkey Confirmation</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="524"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="573"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="531"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="580"/> <source>Illegal Operation</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="532"/> <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="533"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="540"/> <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="534"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="541"/> <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="540"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="547"/> <source>Operation Successful</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="541"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="548"/> <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="550"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="557"/> <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="557"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="564"/> <source>Revoke Subkey</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="574"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="581"/> <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="579"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="586"/> <source>0 -> No Reason.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="579"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="586"/> <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="580"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="587"/> <source>2 -> Key is outdated.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="580"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="587"/> <source>3 -> Key is no longer used</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="591"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="598"/> <source>Revocation Failed</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="592"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="599"/> <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="595"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="602"/> <source>Revocation Successful</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="596"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="603"/> <source>The subkey has been successfully revoked.</source> <translation type="unfinished"></translation> </message> @@ -3858,139 +3888,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="54"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="55"/> <source>Close</source> <translation type="unfinished">proche</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="57"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="58"/> <source>Import ALL</source> <translation type="unfinished">Importer TOUT</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="61"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="62"/> <source>Search</source> <translation type="unfinished">Chercher</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="66"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="67"/> <source>Search String</source> <translation type="unfinished">Chaîne de recherche</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="66"/> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="70"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="67"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="71"/> <source>: </source> <translation type="unfinished">:</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="70"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="71"/> <source>Key Server</source> <translation type="unfinished">Serveur de clés</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="111"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="112"/> <source>Import Keys from key server</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="154"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="155"/> <source>UID</source> <translation type="unfinished">UID</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="154"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="155"/> <source>Creation date</source> <translation type="unfinished">Date de création</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="154"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="155"/> <source>KeyID</source> <translation type="unfinished">ID clé</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="154"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="155"/> <source>Tag</source> <translation type="unfinished">Étiqueter</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="177"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="178"/> <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="220"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="221"/> <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="223"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="224"/> <source>Timeout</source> <translation type="unfinished">Temps libre</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="226"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="227"/> <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="229"/> <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="230"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="231"/> <source>Connection Error</source> <translation type="unfinished">Erreur de connexion</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="239"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="240"/> <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="251"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="252"/> <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="261"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="262"/> <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="268"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="269"/> <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="303"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="304"/> <source>revoked</source> <translation type="unfinished">révoqué</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="306"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="307"/> <source>disabled</source> <translation type="unfinished">désactivée</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="351"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="352"/> <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="372"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="373"/> <source>Warning</source> <translation type="unfinished">Avertissement</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="373"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="374"/> <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="419"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="420"/> <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="437"/> <source>Processing ...</source> <translation type="unfinished"></translation> </message> @@ -4284,13 +4314,29 @@ 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="157"/> - <location filename="../../../../src/ui/main_window/MainWindow.cpp" line="160"/> + <location filename="../../../../src/ui/main_window/MainWindow.cpp" line="125"/> + <source>GUI Pinentry Not Found</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/main_window/MainWindow.cpp" line="126"/> + <source>No suitable *graphical* Pinentry program was found on your system. + +Please install a GUI-based Pinentry (e.g., 'pinentry-qt', 'pinentry-gnome3', or 'pinentry-mac' on macOS). + +Without a GUI Pinentry, GnuPG cannot prompt you for passwords or passphrases. + +After installing it, please restart GpgFrontend. The configuration file will be updated automatically.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/main_window/MainWindow.cpp" line="177"/> + <location filename="../../../../src/ui/main_window/MainWindow.cpp" line="180"/> <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="159"/> + <location filename="../../../../src/ui/main_window/MainWindow.cpp" line="179"/> <source>Loading Failed</source> <translation type="unfinished">Échec du chargement</translation> </message> @@ -5072,26 +5118,26 @@ If the issue persists, consider seeking technical support or consulting the docu <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="317"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="331"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="346"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="322"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="340"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="359"/> <source>Successful Operation</source> <translation type="unfinished">Opération réussie</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="318"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="323"/> <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="320"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="335"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="350"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="325"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="344"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="363"/> <source>Failed Operation</source> <translation type="unfinished">Échec de l'opération</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="321"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="326"/> <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> @@ -5106,12 +5152,12 @@ If the issue persists, consider seeking technical support or consulting the docu <translation type="unfinished">Recharger tous les composants de GnuPG</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="332"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="341"/> <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="336"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="345"/> <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> @@ -5126,12 +5172,12 @@ If the issue persists, consider seeking technical support or consulting the docu <translation type="unfinished">Redémarrez tous les composants de GnuPG</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="347"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="360"/> <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="351"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="364"/> <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> @@ -5878,495 +5924,464 @@ If the issue persists, consider seeking technical support or consulting the docu <context> <name>GpgFrontend::UI::SmartCardControllerDialog</name> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="50"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="51"/> <source>Smart Card(s):</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="51"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="52"/> <source>Key Stub(s) in Key Database(s):</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="53"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="54"/> <source>Change Name</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="54"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="55"/> <source>Change Language</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="55"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="56"/> <source>Change Gender</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="56"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="57"/> <source>Change Login Data</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="57"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="58"/> <source>Change Public Key URL</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="58"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="59"/> <source>Change PIN</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="59"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="60"/> <source>Change Admin PIN</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="60"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="61"/> <source>Change Reset Code</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="61"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="62"/> <source>Fetch</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="62"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="63"/> <source>Restart All Gpg-Agents</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="63"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="64"/> <source>Generate Card Keys</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="64"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="65"/> <source>Refresh</source> <translation type="unfinished">Rafraîchir</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="66"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="67"/> <source>Operations</source> <translation type="unfinished">Opérations</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="117"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="123"/> <source>Successful Operation</source> <translation type="unfinished">Opération réussie</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="118"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="124"/> <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/dialog/controller/SmartCardControllerDialog.cpp" line="121"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="127"/> <source>Failed Operation</source> <translation type="unfinished">Échec de l'opération</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="122"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="128"/> <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/dialog/controller/SmartCardControllerDialog.cpp" line="135"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="140"/> <source>Generate card key failed.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="156"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="161"/> <source>Smart Card Controller</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="210"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="218"/> <source>OpenPGP Card Information</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="212"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="220"/> <source>Basic Information</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="213"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="221"/> <source>Reader</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="214"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="222"/> <source>Serial Number</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="216"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="224"/> <source>Card Type</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="218"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="226"/> <source>Card Version</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="220"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="228"/> <source>App Type</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="222"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="230"/> <source>App Version</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="224"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="232"/> <source>Manufacturer ID</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="226"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="234"/> <source>Manufacturer</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="228"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="236"/> <source>Card Holder</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="230"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="238"/> <source>Language</source> <translation type="unfinished">Langue</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="232"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="240"/> <source>Sex</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="237"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="245"/> <source>Signature Counter</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="239"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="247"/> <source>CHV1 Cached</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="241"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="249"/> <source>CHV Max Length</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="247"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="255"/> <source>CHV Retry Left</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="253"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="261"/> <source>KDF Status</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="269"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="277"/> <source>UIF</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="270"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="278"/> <source>Sign</source> <translation type="unfinished">Signer</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="271"/> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="273"/> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="275"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="279"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="281"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="283"/> <source>Enabled</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="271"/> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="273"/> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="275"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="279"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="281"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="283"/> <source>Disabled</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="272"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="280"/> <source>Encrypt</source> <translation type="unfinished">Chiffrer</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="274"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="282"/> <source>Authenticate</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="322"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="330"/> <source>Status Indicator</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="467"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="480"/> <source>Cardholder's Surname</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="468"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="481"/> <source>Please enter your surname (e.g., Lee):</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="473"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="486"/> <source>Cardholder's Given Name</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="474"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="487"/> <source>Please enter your given name (e.g., Chris):</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="483"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="496"/> <source>Too Long</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="484"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="497"/> <source>Combined name too long (max 39 characters).</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="499"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="512"/> <source>Male</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="499"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="512"/> <source>Female</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="503"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="516"/> <source>Select sex to store in '%1'</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="518"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="531"/> <source>Enter new value for attribute '%1'</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="236"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="244"/> <source>Status</source> <translation type="unfinished">Statut</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="256"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="264"/> <source>Not enabled</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="259"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="267"/> <source>Enabled (no protection)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="262"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="270"/> <source>Enabled with salt protection</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="265"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="273"/> <source>Unknown</source> <translation type="unfinished">Inconnu</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="279"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="287"/> <source>Key Information</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="283"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="291"/> <source>No key information available.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="286"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="294"/> <source>No.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="286"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="294"/> <source>Fingerprint</source> <translation type="unfinished">Empreinte digitale</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="287"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="295"/> <source>Created</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="287"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="295"/> <source>Grip</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="288"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="296"/> <source>Type</source> <translation type="unfinished">Taper</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="288"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="296"/> <source>Algorithm</source> <translation type="unfinished">Algorithme</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="289"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="297"/> <source>Usage</source> <translation type="unfinished">Usage</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="289"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="297"/> <source>Curve</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="307"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="315"/> <source>Extended Capabilities</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="309"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="317"/> <source>Key Info (ki): %1</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="309"/> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="313"/> <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="317"/> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="320"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="321"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="325"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="328"/> <source>Yes</source> <translation type="unfinished">Oui</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="309"/> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="313"/> <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="317"/> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="320"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="321"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="325"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="328"/> <source>No</source> <translation type="unfinished">Non</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="312"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="320"/> <source>Additional Auth (aac): %1</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="316"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="324"/> <source>Biometric Terminal (bt): %1</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="320"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="328"/> <source>KDF Supported: %1</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="327"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="335"/> <source>Additional Info</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="379"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="387"/> <source>No OpenPGP Smart Card Found</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="380"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="388"/> <source>No OpenPGP-compatible smart card has been detected.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="384"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="392"/> <source>An OpenPGP Smart Card is a physical device that securely stores your private cryptographic keys and can be used for digital signing, encryption, and authentication. Popular examples include YubiKey, Nitrokey, and other GnuPG-compatible tokens.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="392"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="400"/> <source>Make sure your card is inserted and properly recognized by the system. You can also try reconnecting the card or restarting the application.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="398"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="406"/> <source>Note: Smart card support of GpgFrontend requires GnuPG version 2.3.0 or later.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="402"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="410"/> <source>Read the GnuPG Smart Card HOWTO: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="502"/> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="517"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="515"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="530"/> <source>Modify Card Attribute</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="533"/> - <source>Failed</source> - <translation type="unfinished">Échoué</translation> - </message> - <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="534"/> - <source>Failed to set attribute '%1'. Reason: %2. </source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="537"/> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="562"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="549"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="563"/> <source>Success</source> <translation type="unfinished">Succès</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="538"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="550"/> <source>Attribute operation completed successfully.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="549"/> - <source>Failed to change Admin PIN.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="551"/> - <source>Failed to set the Reset Code.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="553"/> - <source>Failed to change PIN.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="556"/> - <source>Reason: </source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="134"/> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="558"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="139"/> <source>Error</source> <translation type="unfinished">Erreur</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="563"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="564"/> <source>PIN operation completed successfully.</source> <translation type="unfinished"></translation> </message> @@ -6374,82 +6389,82 @@ 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="82"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="83"/> <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> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="85"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="86"/> <source>Generate New Subkey</source> <translation type="unfinished">Générer une nouvelle sous-clé</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="63"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="64"/> <source>Authentication</source> <translation type="unfinished">Authentification</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="57"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="58"/> <source>Algorithm</source> <translation type="unfinished">Algorithme</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="58"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="59"/> <source>Key Length</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="59"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="60"/> <source>Expire Date</source> <translation type="unfinished">Date d'expiration</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="60"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="61"/> <source>Usage</source> <translation type="unfinished">Usage</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="61"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="62"/> <source>Encrypt</source> <translation type="unfinished">Chiffrer</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="62"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="63"/> <source>Sign</source> <translation type="unfinished">Signer</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="64"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="65"/> <source>Non Expired</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="65"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="66"/> <source>No Passphrase</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="183"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="188"/> <source>Please give a valid subkey algorithm.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="192"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="197"/> <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="204"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="209"/> <source>Generating</source> <translation type="unfinished">Générateur</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="215"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="220"/> <source>Error</source> <translation type="unfinished">Erreur</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="216"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="221"/> <source>Unknown error occurred</source> <translation type="unfinished">Une erreur inconnue s'est produite</translation> </message> @@ -6926,13 +6941,13 @@ If the issue persists, consider seeking technical support or consulting the docu </message> <message> <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="44"/> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="159"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="166"/> <source>Usage</source> <translation type="unfinished">Usage</translation> </message> <message> <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="44"/> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="160"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="167"/> <source>Trust</source> <translation type="unfinished">Confiance</translation> </message> @@ -6958,32 +6973,32 @@ If the issue persists, consider seeking technical support or consulting the docu </message> <message> <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="46"/> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="161"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="168"/> <source>Comment</source> <translation type="unfinished">Commentaire</translation> </message> <message> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="157"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="164"/> <source>ID</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="158"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="165"/> <source>Algo</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="162"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="169"/> <source>No Comment</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="168"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="175"/> <source>SubKeys (up to 8):</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="174"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="181"/> <source>ID: %1 | Algo: %2 | Usage: %3</source> <translation type="unfinished"></translation> </message> @@ -7112,42 +7127,42 @@ If the issue persists, consider seeking technical support or consulting the docu <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/core/GpgCoreInit.cpp" line="423"/> + <location filename="../../../../src/core/GpgCoreInit.cpp" line="473"/> <source>Cannot Find GpgConf</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/core/GpgCoreInit.cpp" line="431"/> + <location filename="../../../../src/core/GpgCoreInit.cpp" line="481"/> <source>Cannot Find GnuPG</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/core/GpgCoreInit.cpp" line="406"/> + <location filename="../../../../src/core/GpgCoreInit.cpp" line="456"/> <source>Cannot get Infos from GpgConf</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/core/GpgCoreInit.cpp" line="446"/> + <location filename="../../../../src/core/GpgCoreInit.cpp" line="496"/> <source>Cannot Find Default Home Path</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/core/GpgCoreInit.cpp" line="472"/> + <location filename="../../../../src/core/GpgCoreInit.cpp" line="522"/> <source>GpgME Initiation Failed</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/core/GpgCoreInit.cpp" line="527"/> + <location filename="../../../../src/core/GpgCoreInit.cpp" line="577"/> <source>No valid Key Database</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/core/GpgCoreInit.cpp" line="556"/> + <location filename="../../../../src/core/GpgCoreInit.cpp" line="607"/> <source>GpgME Default Context Initiation Failed</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/core/GpgCoreInit.cpp" line="567"/> + <location filename="../../../../src/core/GpgCoreInit.cpp" line="623"/> <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 18bdf8d3..c62337d5 100644 --- a/resource/lfs/locale/ts/GpgFrontend.it_IT.ts +++ b/resource/lfs/locale/ts/GpgFrontend.it_IT.ts @@ -492,7 +492,7 @@ <context> <name>GpgFrontend::KeyGenerateInfo</name> <message> - <location filename="../../../../src/core/model/GpgKeyGenerateInfo.cpp" line="39"/> + <location filename="../../../../src/core/model/GpgKeyGenerateInfo.cpp" line="40"/> <source>None</source> <translation>Nessuno</translation> </message> @@ -586,22 +586,22 @@ <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/ADSKsPicker.cpp" line="123"/> + <location filename="../../../../src/ui/dialog/ADSKsPicker.cpp" line="122"/> <source>Failed</source> <translation type="unfinished">Fallito</translation> </message> <message> - <location filename="../../../../src/ui/dialog/ADSKsPicker.cpp" line="124"/> + <location filename="../../../../src/ui/dialog/ADSKsPicker.cpp" line="123"/> <source>Partially Failed</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/ADSKsPicker.cpp" line="126"/> + <location filename="../../../../src/ui/dialog/ADSKsPicker.cpp" line="125"/> <source>Failed to add all selected subkeys.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/ADSKsPicker.cpp" line="127"/> + <location filename="../../../../src/ui/dialog/ADSKsPicker.cpp" line="126"/> <source>Some subkeys failed to be added as ADSKs.</source> <translation type="unfinished"></translation> </message> @@ -769,13 +769,13 @@ <context> <name>GpgFrontend::UI::CommonUtils</name> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="428"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="436"/> <source>Timeout</source> <translation>Tempo scaduto</translation> </message> <message> <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="163"/> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="303"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="311"/> <source>Success</source> <translation>Successo</translation> </message> @@ -795,126 +795,148 @@ <translation>Operazione Gpg riuscita.</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="174"/> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="295"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="182"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="303"/> <source>Failure</source> <translation>Fallimento</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="175"/> - <source>Gpg Operation failed. - -Error code: %1 -Source: %2 -Description: %3</source> - <translation>Operazione Gpg non riuscita. - -Codice errore: %1 -Origine: %2 -Descrizione: %3</translation> - </message> - <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="210"/> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="217"/> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="485"/> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="647"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="218"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="225"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="493"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="655"/> <source>Error</source> <translation>Errore</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="202"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="210"/> <source>Open Key</source> <translation>Chiave aperta</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="203"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="172"/> + <source>Operation Not Supported</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="173"/> + <source>The current GnuPG version is too low and does not support this operation. Please upgrade your GnuPG version to continue.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="183"/> + <source>Gpg Operation failed.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="184"/> + <source>Error code: %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="185"/> + <source>Source: %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="186"/> + <source>Description: %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="187"/> + <source>Error Message: %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="211"/> <source>Keyring files</source> <translation>File portachiavi</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="211"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="219"/> <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="218"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="226"/> <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="224"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="232"/> <source>File Open Failed</source> <translation>Apertura file non riuscita</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="225"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="233"/> <source>Failed to open file: </source> <translation>Impossibile aprire il file: </translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="276"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="284"/> <source>Processing</source> <translation>In lavorazione</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="296"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="304"/> <source>Failed to execute command.</source> <translation>Impossibile eseguire il comando.</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="304"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="312"/> <source>Succeed in executing command.</source> <translation>Riuscire a eseguire il comando.</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="306"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="314"/> <source>Warning</source> <translation>Avvertimento</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="307"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="315"/> <source>Finished executing command.</source> <translation>Terminata l'esecuzione del comando.</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="327"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="335"/> <source>Default Keyserver Not Found</source> <translation>Keyserver predefinito non trovato</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="328"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="336"/> <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="425"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="433"/> <source>Key Not Found</source> <translation>Chiave non trovata</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="431"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="439"/> <source>Key Server Not Found</source> <translation>Server chiave non trovato</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="434"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="442"/> <source>Connection Error</source> <translation>Errore di connessione</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="647"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="655"/> <source>Key Not Found.</source> <translation type="unfinished">Chiave non trovata.</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="375"/> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="445"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="383"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="453"/> <source>The key has been updated</source> <translation>La chiave è stata aggiornata</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="377"/> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="447"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="385"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="455"/> <source>No need to update the key</source> <translation>Non è necessario aggiornare la chiave</translation> </message> @@ -1464,73 +1486,73 @@ This will result in loss of all cached form positions, statuses, key servers, et <translation></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="358"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="359"/> <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="359"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="360"/> <source>Currently, GpgFrontend supports a maximum of 8 key databases. Please remove an existing database to add a new one.</source> <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="370"/> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="616"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="371"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="617"/> <source>Duplicate Key Database Paths</source> <translation>Percorsi del database delle chiavi duplicati</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="371"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="372"/> <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="380"/> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="627"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="381"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="628"/> <source>Invalid Key Database Paths</source> <translatorcomment>Percorsi del database delle chiavi non validi</translatorcomment> <translation></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="381"/> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="628"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="382"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="629"/> <source>The edited key database path is not a valid path that GpgFrontend can use</source> <translatorcomment>Il percorso modificato del database delle chiavi non è un percorso valido che GpgFrontend può utilizzare</translatorcomment> <translation></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="428"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="429"/> <source>Active</source> <translation>Attivo</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="428"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="429"/> <source>Inactive</source> <translatorcomment>Inattivo/a</translatorcomment> <translation></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="456"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="457"/> <source>Confirm Deletion</source> <translation>Conferma la cancellazione</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="457"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="458"/> <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="595"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="596"/> <source>No Key Database Selected</source> <translation>Nessun database di chiavi selezionato</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="596"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="597"/> <source>Please select a key database to edit.</source> <translation>Selezionare un database chiave da modificare.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="617"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="618"/> <source>The edited key database path duplicates a previously existing one.</source> <translation>Il percorso del database delle chiavi modificato duplica un percorso già esistente.</translation> </message> @@ -1567,7 +1589,7 @@ This will result in loss of all cached form positions, statuses, key servers, et <message> <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="326"/> <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="333"/> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="345"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="346"/> <source>Illegal GnuPG Path</source> <translation>Percorso GnuPG illegale</translation> </message> @@ -1582,7 +1604,7 @@ This will result in loss of all cached form positions, statuses, key servers, et <translation>Target GnuPG Path non è un percorso assoluto.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="346"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="347"/> <source>Target GnuPG Path contains no "gpgconf" executable.</source> <translation>Il percorso GnuPG di destinazione non contiene l'eseguibile "gpgconf".</translation> </message> @@ -1613,10 +1635,18 @@ This will result in loss of all cached form positions, statuses, key servers, et <context> <name>GpgFrontend::UI::GpgOperaHelper</name> <message> - <location filename="../../../../src/ui/function/GpgOperaHelper.cpp" line="96"/> - <location filename="../../../../src/ui/function/GpgOperaHelper.cpp" line="132"/> - <location filename="../../../../src/ui/function/GpgOperaHelper.cpp" line="174"/> - <location filename="../../../../src/ui/function/GpgOperaHelper.cpp" line="212"/> + <location filename="../../../../src/ui/function/GpgOperaHelper.cpp" line="94"/> + <location filename="../../../../src/ui/function/GpgOperaHelper.cpp" line="136"/> + <location filename="../../../../src/ui/function/GpgOperaHelper.cpp" line="185"/> + <location filename="../../../../src/ui/function/GpgOperaHelper.cpp" line="228"/> + <source>Operation Not Supported</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/function/GpgOperaHelper.cpp" line="102"/> + <location filename="../../../../src/ui/function/GpgOperaHelper.cpp" line="144"/> + <location filename="../../../../src/ui/function/GpgOperaHelper.cpp" line="191"/> + <location filename="../../../../src/ui/function/GpgOperaHelper.cpp" line="234"/> <source>Critical Error</source> <translatorcomment>Errore critico</translatorcomment> <translation></translation> @@ -1836,218 +1866,218 @@ This will result in loss of all cached form positions, statuses, key servers, et <context> <name>GpgFrontend::UI::KeyGenerateDialog</name> <message> - <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="575"/> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="581"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="64"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="71"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="580"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="586"/> <source>Custom</source> <translation>Impiego</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="71"/> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="524"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="72"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="529"/> <source>3 Months</source> <translation>3 Mesi</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="72"/> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="529"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="73"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="534"/> <source>6 Months</source> <translation>6 Mesi</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="73"/> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="534"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="74"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="539"/> <source>1 Year</source> <translation>1 Anno</translation> </message> <message> - <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="539"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="75"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="140"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="145"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="544"/> <source>2 Years</source> <translation>2 Anni</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="75"/> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="544"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="76"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="549"/> <source>5 Years</source> <translation>5 Anni</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="76"/> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="549"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="77"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="554"/> <source>10 Years</source> <translation>10 Anni</translation> </message> <message> - <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="555"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="78"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="101"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="110"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="560"/> <source>Non Expired</source> <translation>Non Scaduto</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="586"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="82"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="295"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="591"/> <source>Primary Key Only</source> <translation>Solo Chiave Primaria</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"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="83"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="343"/> <source>Primary Key With Subkey</source> <translation>Chiave Primaria con Sottochiave</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="85"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="86"/> <source>Name</source> <translation>Nome</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="86"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="87"/> <source>Email</source> <translation>Email</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="87"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="88"/> <source>Comment</source> <translation>Commento</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="88"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="89"/> <source>Key Database</source> <translation>Database delle chiavi</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"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="90"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="93"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="103"/> <source>Algorithm</source> <translation>Algoritmo</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"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="91"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="94"/> <source>Validity Period</source> <translation>Periodo di validità</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"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="95"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="105"/> <source>Key Length</source> <translation>Lunghezza Chiave</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"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="96"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="106"/> <source>Usage</source> <translation>Utilizzo</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"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="97"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="107"/> <source>Encrypt</source> <translation>Cifra</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"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="98"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="108"/> <source>Sign</source> <translation>Firma</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"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="99"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="109"/> <source>Authentication</source> <translation>Autenticazione</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="99"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="100"/> <source>No Passphrase</source> <translation>Nessuna frase segreta</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="103"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="104"/> <source>Expire Date</source> <translation>Data di scadenza</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="112"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="113"/> <source>Easy Mode</source> <translation>Modalità facile</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="113"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="114"/> <source>Primary Key</source> <translation>Chiave primaria</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="114"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="115"/> <source>Subkey</source> <translation>Sottochiave</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="117"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="118"/> <source>Generate</source> <translation>Generare</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"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="135"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="266"/> <source>None</source> <translation>Nessuno</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="146"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="147"/> <source>Generate Key</source> <translation>Genera chiave</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="156"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="161"/> <source>Name must contain at least five characters.</source> <translation>Il nome deve contenere almeno cinque caratteri.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="161"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="166"/> <source>Please give a valid email address.</source> <translation>Inserisci un indirizzo email valido.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="166"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="171"/> <source>Please give a valid primary key algorithm.</source> <translation>Fornisci un algoritmo di chiave primaria valido.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="175"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="180"/> <source>Time to primary key expiration must not be less than 120 seconds.</source> <translation>Il tempo di scadenza della chiave primaria non deve essere inferiore a 120 secondi.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="182"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="187"/> <source>Please give a valid subkey algorithm.</source> <translation>Si prega di fornire un algoritmo di sottochiave valido.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="190"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="195"/> <source>Time to subkey expiration must not be less than 120 seconds.</source> <translation>Il tempo di scadenza della sottochiave non deve essere inferiore a 120 secondi.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="614"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="619"/> <source>Error</source> <translation>Errore</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="615"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="620"/> <source>Unknown error occurred</source> <translation>Si è verificato un errore sconosciuto</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="627"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="632"/> <source>Generating</source> <translation>Generazione</translation> </message> @@ -2496,7 +2526,7 @@ These keys are no longer available. Do you want to remove them from the group?</ </message> <message> <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="210"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="528"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="533"/> <source>Key Package</source> <translation>Pacchetto chiave</translation> </message> @@ -2618,22 +2648,22 @@ These keys are no longer available. Do you want to remove them from the group?</ <message> <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="406"/> <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="418"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="482"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="493"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="506"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="537"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="545"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="561"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="569"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="585"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="487"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="498"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="511"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="542"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="550"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="566"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="574"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="590"/> <source>Error</source> <translation>Errore</translation> </message> <message> <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="372"/> <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="387"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="457"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="466"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="462"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="471"/> <source>Forbidden</source> <translation>Vietato</translation> </message> @@ -2645,102 +2675,102 @@ These keys are no longer available. Do you want to remove them from the group?</ </message> <message> <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="380"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="520"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="525"/> <source>key(s) exported</source> <translation>chiavi esportate</translation> </message> <message> <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="396"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="472"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="477"/> <source>Exporting</source> <translation>Sto spotando</translation> </message> <message> <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="407"/> <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="419"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="483"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="494"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="488"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="499"/> <source>Unknown error occurred</source> <translation>Si è verificato un errore sconosciuto</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="441"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="449"/> <source>Invalid Operation</source> <translation>Operazione non valida</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="442"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="450"/> <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="458"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="463"/> <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="467"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="472"/> <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="507"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="512"/> <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="515"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="520"/> <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="516"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="521"/> <source>OpenSSH Public Key Files</source> <translation>File di chiavi pubbliche OpenSSH</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="528"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="533"/> <source>Import Key Package</source> <translation>Importa pacchetto chiave</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="538"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="562"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="543"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="567"/> <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="546"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="551"/> <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="551"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="556"/> <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="552"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="557"/> <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="570"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="575"/> <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="575"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="580"/> <source>Importing</source> <translation>Sto importando</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="592"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="597"/> <source>key(s) imported</source> <translation>chiavi importate</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="586"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="591"/> <source>An error occur in importing key package.</source> <translation>Si è verificato un errore durante l'importazione del pacchetto di chiavi.</translation> </message> @@ -3334,313 +3364,313 @@ Nota: per la verifica, puoi trovare maggiori informazioni qui: https://keys.open <context> <name>GpgFrontend::UI::KeyPairSubkeyTab</name> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="81"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="189"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="85"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="193"/> <source>Key ID</source> <translation>ID chiave</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="83"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="189"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="87"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="193"/> <source>Algorithm</source> <translation>Algoritmo</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="84"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="190"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="88"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="194"/> <source>Algorithm Detail</source> <translation>Dettaglio dell'Algoritmo</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="86"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="189"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="90"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="193"/> <source>Key Size</source> <translation>Dimensione chiave</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="87"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="91"/> <source>Usage</source> <translation>Utilizzo</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="89"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="93"/> <source>Expires On (Local Time)</source> <translation>Scade il (ora locale)</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="91"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="95"/> <source>Create Date (Local Time)</source> <translation>Data di creazione (ora locale)</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="92"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="96"/> <source>Existence</source> <translation>Esistenza</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="94"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="98"/> <source>Key in Smart Card</source> <translation>Inserisci la Smart Card</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="96"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="100"/> <source>Fingerprint</source> <translation>Impronta digitale</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="54"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="53"/> <source>List of the primary key and subkey(s)</source> <translation>Elenco della chiave primaria e della(e) sottochiave(i)</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="55"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="54"/> <source>Detail of Selected Primary Key/Subkey</source> <translation>Dettaglio della chiave primaria/sottochiave selezionata</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="59"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="58"/> <source>New Subkey</source> <translation type="unfinished">Nuova sottochiave</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="60"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="59"/> <source>Add ADSK(s)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="82"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="189"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="86"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="193"/> <source>Key Type</source> <translation>Tipo di chiave</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="93"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="97"/> <source>Revoked</source> <translation>Revocata</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="128"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="370"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="132"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="377"/> <source>Export Subkey</source> <translation>Esporta Sottochiave</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="190"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="194"/> <source>Create Date</source> <translation>Crea Data</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="190"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="194"/> <source>Expire Date</source> <translation>Data di scadenza</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="213"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="374"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="217"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="381"/> <source>Primary Key</source> <translation>Chiave primaria</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="213"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="375"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="217"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="382"/> <source>Subkey</source> <translation>Sottochiave</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="214"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="218"/> <source>ADSK</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="238"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="242"/> <source>Never Expire</source> <translation>Non scade mai</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="309"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="316"/> <source>Never Expires</source> <translation>Non scade mai</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="333"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="340"/> <source>Exists</source> <translation>Esiste</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="334"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="341"/> <source>Not Exists</source> <translation>Non esiste</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="337"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="377"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="344"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="384"/> <source>Yes</source> <translation>Sì</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="337"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="377"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="344"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="384"/> <source>No</source> <translation>No</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="369"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="376"/> <source>Export Primary Key</source> <translation>Esporta Chiave Primaria</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="391"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="398"/> <source>Edit Expire Date</source> <translation>Modifica data di scadenza</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="395"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="402"/> <source>Export</source> <translation>Esporta</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="399"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="406"/> <source>Delete</source> <translation>Elimina</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="403"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="410"/> <source>Revoke</source> <translation>Revoca</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="456"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="463"/> <source>Exporting Subkey</source> <translation>Esporto la sottochiave</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="457"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="464"/> <source>You are about to export a private subkey.</source> <translation>Stai per esportare una sottochiave privata.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="458"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="465"/> <source>While subkeys are less critical than the primary key, they should still be handled with care.</source> <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="461"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="468"/> <source>Do you want to proceed with exporting this subkey?</source> <translation>Vuoi procedere con l'esportazione di questa sottochiave?</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="488"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="495"/> <source>Export Key To File</source> <translation>Esporta chiave in file</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="489"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="496"/> <source>Key Files</source> <translation>File chiave</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="494"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="501"/> <source>Export Error</source> <translation>Errore di esportazione</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="495"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="502"/> <source>Couldn't open %1 for writing</source> <translation>Impossibile aprire %1 per scrittura</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="503"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="510"/> <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>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="509"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="516"/> <source>Delete Subkey Confirmation</source> <translation>Conferma eliminazione sottochiave</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="524"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="573"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="531"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="580"/> <source>Illegal Operation</source> <translation>Operazione illegale</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="525"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="532"/> <source>Cannot delete the primary key or an invalid subkey.</source> <translation>Impossibile eliminare la chiave primaria o una sottochiave non valida.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="533"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="540"/> <source>Operation Failed</source> <translation>Operazione fallita</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="534"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="541"/> <source>The selected subkey could not be deleted. Please check your permissions or try again.</source> <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="540"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="547"/> <source>Operation Successful</source> <translation>Operazione riuscita</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="541"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="548"/> <source>The subkey with KeyID %1 has been successfully deleted.</source> <translation>La sottochiave con KeyID %1 è stata eliminata correttamente.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="550"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="557"/> <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>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="557"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="564"/> <source>Revoke Subkey</source> <translation>Revoca sottochiave</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="574"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="581"/> <source>Cannot revoke the primary key or an invalid subkey.</source> <translation>Impossibile revocare la chiave primaria o una sottochiave non valida.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="579"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="586"/> <source>0 -> No Reason.</source> <translation>0 -> Nessun motivo.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="579"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="586"/> <source>1 -> This key is no more safe.</source> <translation>1 -> Questa chiave non è più sicura.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="580"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="587"/> <source>2 -> Key is outdated.</source> <translation>2 -> La chiave è obsoleta.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="580"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="587"/> <source>3 -> Key is no longer used</source> <translation>3 -> La chiave non è più utilizzata</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="591"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="598"/> <source>Revocation Failed</source> <translation>Revoca non riuscita</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="592"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="599"/> <source>Failed to revoke the subkey. Please try again.</source> <translation>Impossibile revocare la sottochiave. Riprova.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="595"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="602"/> <source>Revocation Successful</source> <translation>Revoca riuscita</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="596"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="603"/> <source>The subkey has been successfully revoked.</source> <translation>La sottochiave è stata revocata correttamente.</translation> </message> @@ -3876,139 +3906,139 @@ Nota: per la verifica, puoi trovare maggiori informazioni qui: https://keys.open <context> <name>GpgFrontend::UI::KeyServerImportDialog</name> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="54"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="55"/> <source>Close</source> <translation>Chiudi</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="57"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="58"/> <source>Import ALL</source> <translation>Importa TUTTO</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="61"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="62"/> <source>Search</source> <translation>Ricerca</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="66"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="67"/> <source>Search String</source> <translation>Stringa di ricerca</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="66"/> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="70"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="67"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="71"/> <source>: </source> <translation>: </translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="70"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="71"/> <source>Key Server</source> <translation>Server chiave</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="111"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="112"/> <source>Import Keys from key server</source> <translation>Importa chiavi dal server delle chiavi</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="154"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="155"/> <source>UID</source> <translation>UID</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="154"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="155"/> <source>Creation date</source> <translation>Data di creazione</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="154"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="155"/> <source>KeyID</source> <translation>ID chiave</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="154"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="155"/> <source>Tag</source> <translation>Etichetta</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="177"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="178"/> <source>Text is empty.</source> <translation>Il testo è vuoto.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="220"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="221"/> <source>Not Key Found</source> <translation>Chiave non trovata</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="223"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="224"/> <source>Timeout</source> <translation>Tempo scaduto</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="226"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="227"/> <source>Key Server Not Found</source> <translation>Server chiave non trovato</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="229"/> <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="230"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="231"/> <source>Connection Error</source> <translation>Errore di connessione</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="239"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="240"/> <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="251"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="252"/> <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="261"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="262"/> <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="268"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="269"/> <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="303"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="304"/> <source>revoked</source> <translation>revocato</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="306"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="307"/> <source>disabled</source> <translation>disabilitato</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="351"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="352"/> <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="372"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="373"/> <source>Warning</source> <translation>Avvertimento</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="373"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="374"/> <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="419"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="420"/> <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="437"/> <source>Processing ...</source> <translation>Elaborazione in corso...</translation> </message> @@ -4302,13 +4332,29 @@ Nota: per la verifica, puoi trovare maggiori informazioni qui: https://keys.open <context> <name>GpgFrontend::UI::MainWindow</name> <message> - <location filename="../../../../src/ui/main_window/MainWindow.cpp" line="157"/> - <location filename="../../../../src/ui/main_window/MainWindow.cpp" line="160"/> + <location filename="../../../../src/ui/main_window/MainWindow.cpp" line="125"/> + <source>GUI Pinentry Not Found</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/main_window/MainWindow.cpp" line="126"/> + <source>No suitable *graphical* Pinentry program was found on your system. + +Please install a GUI-based Pinentry (e.g., 'pinentry-qt', 'pinentry-gnome3', or 'pinentry-mac' on macOS). + +Without a GUI Pinentry, GnuPG cannot prompt you for passwords or passphrases. + +After installing it, please restart GpgFrontend. The configuration file will be updated automatically.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/main_window/MainWindow.cpp" line="177"/> + <location filename="../../../../src/ui/main_window/MainWindow.cpp" line="180"/> <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="159"/> + <location filename="../../../../src/ui/main_window/MainWindow.cpp" line="179"/> <source>Loading Failed</source> <translation>Caricamento non riuscito</translation> </message> @@ -5136,26 +5182,26 @@ Se il problema persiste, prendere in considerazione la possibilità di richieder <translation>Pannello di stato</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="317"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="331"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="346"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="322"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="340"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="359"/> <source>Successful Operation</source> <translation>Operazione riuscita</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="318"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="323"/> <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="320"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="335"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="350"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="325"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="344"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="363"/> <source>Failed Operation</source> <translation>Operazione fallita</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="321"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="326"/> <source>Failed to clear password cache of GnuPG</source> <translation>Impossibile cancellare la cache delle password di GnuPG</translation> </message> @@ -5170,12 +5216,12 @@ Se il problema persiste, prendere in considerazione la possibilità di richieder <translation>Ricarica tutti i componenti di GnuPG</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="332"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="341"/> <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="336"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="345"/> <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> @@ -5190,12 +5236,12 @@ Se il problema persiste, prendere in considerazione la possibilità di richieder <translation>Riavvia tutti i componenti di GnuPG</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="347"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="360"/> <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="351"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="364"/> <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> @@ -5942,495 +5988,464 @@ Se il problema persiste, prendere in considerazione la possibilità di richieder <context> <name>GpgFrontend::UI::SmartCardControllerDialog</name> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="50"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="51"/> <source>Smart Card(s):</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="51"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="52"/> <source>Key Stub(s) in Key Database(s):</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="53"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="54"/> <source>Change Name</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="54"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="55"/> <source>Change Language</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="55"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="56"/> <source>Change Gender</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="56"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="57"/> <source>Change Login Data</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="57"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="58"/> <source>Change Public Key URL</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="58"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="59"/> <source>Change PIN</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="59"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="60"/> <source>Change Admin PIN</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="60"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="61"/> <source>Change Reset Code</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="61"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="62"/> <source>Fetch</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="62"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="63"/> <source>Restart All Gpg-Agents</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="63"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="64"/> <source>Generate Card Keys</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="64"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="65"/> <source>Refresh</source> <translation type="unfinished">Ricaricare</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="66"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="67"/> <source>Operations</source> <translation type="unfinished">Operazioni</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="117"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="123"/> <source>Successful Operation</source> <translation type="unfinished">Operazione riuscita</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="118"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="124"/> <source>Restart all the GnuPG's components successfully</source> <translation type="unfinished">Riavvia correttamente tutti i componenti di GnuPG</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="121"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="127"/> <source>Failed Operation</source> <translation type="unfinished">Operazione fallita</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="122"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="128"/> <source>Failed to restart all or one of the GnuPG's component(s)</source> <translation type="unfinished">Impossibile riavviare tutti o uno dei componenti di GnuPG</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="135"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="140"/> <source>Generate card key failed.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="156"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="161"/> <source>Smart Card Controller</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="210"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="218"/> <source>OpenPGP Card Information</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="212"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="220"/> <source>Basic Information</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="213"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="221"/> <source>Reader</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="214"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="222"/> <source>Serial Number</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="216"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="224"/> <source>Card Type</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="218"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="226"/> <source>Card Version</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="220"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="228"/> <source>App Type</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="222"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="230"/> <source>App Version</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="224"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="232"/> <source>Manufacturer ID</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="226"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="234"/> <source>Manufacturer</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="228"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="236"/> <source>Card Holder</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="230"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="238"/> <source>Language</source> <translation type="unfinished">Lingua</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="232"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="240"/> <source>Sex</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="237"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="245"/> <source>Signature Counter</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="239"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="247"/> <source>CHV1 Cached</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="241"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="249"/> <source>CHV Max Length</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="247"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="255"/> <source>CHV Retry Left</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="253"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="261"/> <source>KDF Status</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="269"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="277"/> <source>UIF</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="270"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="278"/> <source>Sign</source> <translation type="unfinished">Firma</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="271"/> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="273"/> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="275"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="279"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="281"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="283"/> <source>Enabled</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="271"/> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="273"/> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="275"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="279"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="281"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="283"/> <source>Disabled</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="272"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="280"/> <source>Encrypt</source> <translation type="unfinished">Cifra</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="274"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="282"/> <source>Authenticate</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="322"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="330"/> <source>Status Indicator</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="467"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="480"/> <source>Cardholder's Surname</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="468"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="481"/> <source>Please enter your surname (e.g., Lee):</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="473"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="486"/> <source>Cardholder's Given Name</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="474"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="487"/> <source>Please enter your given name (e.g., Chris):</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="483"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="496"/> <source>Too Long</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="484"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="497"/> <source>Combined name too long (max 39 characters).</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="499"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="512"/> <source>Male</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="499"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="512"/> <source>Female</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="503"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="516"/> <source>Select sex to store in '%1'</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="518"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="531"/> <source>Enter new value for attribute '%1'</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="236"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="244"/> <source>Status</source> <translation type="unfinished">Stato</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="256"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="264"/> <source>Not enabled</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="259"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="267"/> <source>Enabled (no protection)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="262"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="270"/> <source>Enabled with salt protection</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="265"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="273"/> <source>Unknown</source> <translation type="unfinished">Sconosciuto</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="279"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="287"/> <source>Key Information</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="283"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="291"/> <source>No key information available.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="286"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="294"/> <source>No.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="286"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="294"/> <source>Fingerprint</source> <translation type="unfinished">Impronta digitale</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="287"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="295"/> <source>Created</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="287"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="295"/> <source>Grip</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="288"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="296"/> <source>Type</source> <translation type="unfinished">Tipo</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="288"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="296"/> <source>Algorithm</source> <translation type="unfinished">Algoritmo</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="289"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="297"/> <source>Usage</source> <translation type="unfinished">Utilizzo</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="289"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="297"/> <source>Curve</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="307"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="315"/> <source>Extended Capabilities</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="309"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="317"/> <source>Key Info (ki): %1</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="309"/> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="313"/> <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="317"/> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="320"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="321"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="325"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="328"/> <source>Yes</source> <translation type="unfinished">Sì</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="309"/> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="313"/> <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="317"/> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="320"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="321"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="325"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="328"/> <source>No</source> <translation type="unfinished">No</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="312"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="320"/> <source>Additional Auth (aac): %1</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="316"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="324"/> <source>Biometric Terminal (bt): %1</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="320"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="328"/> <source>KDF Supported: %1</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="327"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="335"/> <source>Additional Info</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="379"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="387"/> <source>No OpenPGP Smart Card Found</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="380"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="388"/> <source>No OpenPGP-compatible smart card has been detected.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="384"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="392"/> <source>An OpenPGP Smart Card is a physical device that securely stores your private cryptographic keys and can be used for digital signing, encryption, and authentication. Popular examples include YubiKey, Nitrokey, and other GnuPG-compatible tokens.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="392"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="400"/> <source>Make sure your card is inserted and properly recognized by the system. You can also try reconnecting the card or restarting the application.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="398"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="406"/> <source>Note: Smart card support of GpgFrontend requires GnuPG version 2.3.0 or later.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="402"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="410"/> <source>Read the GnuPG Smart Card HOWTO: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="502"/> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="517"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="515"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="530"/> <source>Modify Card Attribute</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="533"/> - <source>Failed</source> - <translation type="unfinished">Fallito</translation> - </message> - <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="534"/> - <source>Failed to set attribute '%1'. Reason: %2. </source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="537"/> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="562"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="549"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="563"/> <source>Success</source> <translation type="unfinished">Successo</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="538"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="550"/> <source>Attribute operation completed successfully.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="549"/> - <source>Failed to change Admin PIN.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="551"/> - <source>Failed to set the Reset Code.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="553"/> - <source>Failed to change PIN.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="556"/> - <source>Reason: </source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="134"/> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="558"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="139"/> <source>Error</source> <translation type="unfinished">Errore</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="563"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="564"/> <source>PIN operation completed successfully.</source> <translation type="unfinished"></translation> </message> @@ -6438,82 +6453,82 @@ Se il problema persiste, prendere in considerazione la possibilità di richieder <context> <name>GpgFrontend::UI::SubkeyGenerateDialog</name> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="82"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="83"/> <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> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="85"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="86"/> <source>Generate New Subkey</source> <translation>Genera nuova sottochiave</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="63"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="64"/> <source>Authentication</source> <translation>Autenticazione</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="57"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="58"/> <source>Algorithm</source> <translation>Algoritmo</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="58"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="59"/> <source>Key Length</source> <translation>Lunghezza Chiave</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="59"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="60"/> <source>Expire Date</source> <translation>Data di scadenza</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="60"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="61"/> <source>Usage</source> <translation>Utilizzo</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="61"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="62"/> <source>Encrypt</source> <translation>Cifra</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="62"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="63"/> <source>Sign</source> <translation>Firma</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="64"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="65"/> <source>Non Expired</source> <translation>Non Scaduta</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="65"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="66"/> <source>No Passphrase</source> <translation>Nessuna frase segreta</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="183"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="188"/> <source>Please give a valid subkey algorithm.</source> <translation>Si prega di fornire un algoritmo di sottochiave valido.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="192"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="197"/> <source>Time to subkey expiration must not be less than 120 seconds.</source> <translation>Il tempo di scadenza della sottochiave non deve essere inferiore a 120 secondi.</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="204"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="209"/> <source>Generating</source> <translation>Generazione</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="215"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="220"/> <source>Error</source> <translation>Errore</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="216"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="221"/> <source>Unknown error occurred</source> <translation>Si è verificato un errore sconosciuto</translation> </message> @@ -6990,13 +7005,13 @@ Se il problema persiste, prendere in considerazione la possibilità di richieder </message> <message> <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="44"/> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="159"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="166"/> <source>Usage</source> <translation type="unfinished">Utilizzo</translation> </message> <message> <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="44"/> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="160"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="167"/> <source>Trust</source> <translation type="unfinished">Fiducia</translation> </message> @@ -7022,32 +7037,32 @@ Se il problema persiste, prendere in considerazione la possibilità di richieder </message> <message> <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="46"/> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="161"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="168"/> <source>Comment</source> <translation type="unfinished">Commento</translation> </message> <message> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="157"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="164"/> <source>ID</source> <translation type="unfinished">ID</translation> </message> <message> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="158"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="165"/> <source>Algo</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="162"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="169"/> <source>No Comment</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="168"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="175"/> <source>SubKeys (up to 8):</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="174"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="181"/> <source>ID: %1 | Algo: %2 | Usage: %3</source> <translation type="unfinished"></translation> </message> @@ -7176,42 +7191,42 @@ Se il problema persiste, prendere in considerazione la possibilità di richieder <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="423"/> + <location filename="../../../../src/core/GpgCoreInit.cpp" line="473"/> <source>Cannot Find GpgConf</source> <translation>Impossibile trovare GpgConf</translation> </message> <message> - <location filename="../../../../src/core/GpgCoreInit.cpp" line="431"/> + <location filename="../../../../src/core/GpgCoreInit.cpp" line="481"/> <source>Cannot Find GnuPG</source> <translation>Impossibile trovare GnuPG</translation> </message> <message> - <location filename="../../../../src/core/GpgCoreInit.cpp" line="406"/> + <location filename="../../../../src/core/GpgCoreInit.cpp" line="456"/> <source>Cannot get Infos from GpgConf</source> <translation>Impossibile ottenere informazioni da GpgConf</translation> </message> <message> - <location filename="../../../../src/core/GpgCoreInit.cpp" line="446"/> + <location filename="../../../../src/core/GpgCoreInit.cpp" line="496"/> <source>Cannot Find Default Home Path</source> <translation>Impossibile trovare il percorso predefinito di Home</translation> </message> <message> - <location filename="../../../../src/core/GpgCoreInit.cpp" line="472"/> + <location filename="../../../../src/core/GpgCoreInit.cpp" line="522"/> <source>GpgME Initiation Failed</source> <translation>Avvio GpgME non riuscito</translation> </message> <message> - <location filename="../../../../src/core/GpgCoreInit.cpp" line="527"/> + <location filename="../../../../src/core/GpgCoreInit.cpp" line="577"/> <source>No valid Key Database</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/core/GpgCoreInit.cpp" line="556"/> + <location filename="../../../../src/core/GpgCoreInit.cpp" line="607"/> <source>GpgME Default Context Initiation Failed</source> <translation>Errore nell'avvio del contesto predefinito di GpgME</translation> </message> <message> - <location filename="../../../../src/core/GpgCoreInit.cpp" line="567"/> + <location filename="../../../../src/core/GpgCoreInit.cpp" line="623"/> <source>Gpg Default Key Database Initiation Failed</source> <translation>Errore nell'avvio del database delle chiavi predefinite Gpg</translation> </message> diff --git a/resource/lfs/locale/ts/GpgFrontend.zh_CN.ts b/resource/lfs/locale/ts/GpgFrontend.zh_CN.ts index 986c9e81..6798ffd7 100644 --- a/resource/lfs/locale/ts/GpgFrontend.zh_CN.ts +++ b/resource/lfs/locale/ts/GpgFrontend.zh_CN.ts @@ -492,7 +492,7 @@ <context> <name>GpgFrontend::KeyGenerateInfo</name> <message> - <location filename="../../../../src/core/model/GpgKeyGenerateInfo.cpp" line="39"/> + <location filename="../../../../src/core/model/GpgKeyGenerateInfo.cpp" line="40"/> <source>None</source> <translation>无</translation> </message> @@ -586,22 +586,22 @@ <translation>密钥ID: %1 原因: %2</translation> </message> <message> - <location filename="../../../../src/ui/dialog/ADSKsPicker.cpp" line="123"/> + <location filename="../../../../src/ui/dialog/ADSKsPicker.cpp" line="122"/> <source>Failed</source> <translation>失败</translation> </message> <message> - <location filename="../../../../src/ui/dialog/ADSKsPicker.cpp" line="124"/> + <location filename="../../../../src/ui/dialog/ADSKsPicker.cpp" line="123"/> <source>Partially Failed</source> <translation>部分失败</translation> </message> <message> - <location filename="../../../../src/ui/dialog/ADSKsPicker.cpp" line="126"/> + <location filename="../../../../src/ui/dialog/ADSKsPicker.cpp" line="125"/> <source>Failed to add all selected subkeys.</source> <translation>无法添加任何选中的子密钥。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/ADSKsPicker.cpp" line="127"/> + <location filename="../../../../src/ui/dialog/ADSKsPicker.cpp" line="126"/> <source>Some subkeys failed to be added as ADSKs.</source> <translation>无法添加选中的部分子密钥。</translation> </message> @@ -769,13 +769,13 @@ <context> <name>GpgFrontend::UI::CommonUtils</name> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="428"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="436"/> <source>Timeout</source> <translation>超时</translation> </message> <message> <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="163"/> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="303"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="311"/> <source>Success</source> <translation>成功</translation> </message> @@ -795,126 +795,148 @@ <translation>Gpg 操作成功。</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="174"/> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="295"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="182"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="303"/> <source>Failure</source> <translation>失败</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="175"/> - <source>Gpg Operation failed. - -Error code: %1 -Source: %2 -Description: %3</source> - <translation>Gpg 操作失败。 - -错误代码: %1 -来源: %2 -说明: %3</translation> - </message> - <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="210"/> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="217"/> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="485"/> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="647"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="218"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="225"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="493"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="655"/> <source>Error</source> <translation>错误</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="202"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="210"/> <source>Open Key</source> <translation>打开密钥</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="203"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="172"/> + <source>Operation Not Supported</source> + <translation>不支持的操作</translation> + </message> + <message> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="173"/> + <source>The current GnuPG version is too low and does not support this operation. Please upgrade your GnuPG version to continue.</source> + <translation>当前 GnuPG 版本过低,不支持此操作。请升级 GnuPG 后重试。</translation> + </message> + <message> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="183"/> + <source>Gpg Operation failed.</source> + <translation>GPG 操作失败。</translation> + </message> + <message> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="184"/> + <source>Error code: %1</source> + <translation>错误代码:%1</translation> + </message> + <message> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="185"/> + <source>Source: %1</source> + <translation>来源:%1</translation> + </message> + <message> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="186"/> + <source>Description: %1</source> + <translation>描述:%1</translation> + </message> + <message> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="187"/> + <source>Error Message: %1</source> + <translation>错误信息:%1</translation> + </message> + <message> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="211"/> <source>Keyring files</source> <translation>密钥圈文件</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="211"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="219"/> <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="218"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="226"/> <source>The target file is too large for a keyring.</source> <translation>目标文件对于一个密钥来说太大。</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="224"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="232"/> <source>File Open Failed</source> <translation>文件打开失败</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="225"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="233"/> <source>Failed to open file: </source> <translation>打开文件失败: </translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="276"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="284"/> <source>Processing</source> <translation>处理中</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="296"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="304"/> <source>Failed to execute command.</source> <translation>执行命令失败。</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="304"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="312"/> <source>Succeed in executing command.</source> <translation>成功执行命令。</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="306"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="314"/> <source>Warning</source> <translation>警告</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="307"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="315"/> <source>Finished executing command.</source> <translation>命令执行完毕。</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="327"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="335"/> <source>Default Keyserver Not Found</source> <translation>未找到默认密钥服务器</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="328"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="336"/> <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="425"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="433"/> <source>Key Not Found</source> <translation>未找到密钥</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="431"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="439"/> <source>Key Server Not Found</source> <translation>未找到密钥服务器</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="434"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="442"/> <source>Connection Error</source> <translation>连接错误</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="647"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="655"/> <source>Key Not Found.</source> <translation>未找到密钥。</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="375"/> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="445"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="383"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="453"/> <source>The key has been updated</source> <translation>密钥已更新</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="377"/> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="447"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="385"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="455"/> <source>No need to update the key</source> <translation>无需更新密钥</translation> </message> @@ -1460,70 +1482,70 @@ This will result in loss of all cached form positions, statuses, key servers, et <translation>实际路径</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="358"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="359"/> <source>Maximum Key Database Limit Reached</source> <translation>已达到密钥数据库上限</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="359"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="360"/> <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="370"/> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="616"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="371"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="617"/> <source>Duplicate Key Database Paths</source> <translation>重复的密钥数据库路径</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="371"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="372"/> <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="380"/> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="627"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="381"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="628"/> <source>Invalid Key Database Paths</source> <translation>无效的密钥数据库地址</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="381"/> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="628"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="382"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="629"/> <source>The edited key database path is not a valid path that GpgFrontend can use</source> <translation>编辑的密钥数据库路径不是 GpgFrontend 可以使用的有效路径</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="428"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="429"/> <source>Active</source> <translation>启用</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="428"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="429"/> <source>Inactive</source> <translation>未启用</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="456"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="457"/> <source>Confirm Deletion</source> <translation>确认删除</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="457"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="458"/> <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="595"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="596"/> <source>No Key Database Selected</source> <translation>未选择任何密钥数据库</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="596"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="597"/> <source>Please select a key database to edit.</source> <translation>请选择要编辑的密钥数据库。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="617"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="618"/> <source>The edited key database path duplicates a previously existing one.</source> <translation>编辑后的密钥数据库路径与先前存在的路径重复。</translation> </message> @@ -1560,7 +1582,7 @@ This will result in loss of all cached form positions, statuses, key servers, et <message> <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="326"/> <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="333"/> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="345"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="346"/> <source>Illegal GnuPG Path</source> <translation>非法 GnuPG 路径</translation> </message> @@ -1575,7 +1597,7 @@ This will result in loss of all cached form positions, statuses, key servers, et <translation>目标 GnuPG 路径不是绝对路径。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="346"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="347"/> <source>Target GnuPG Path contains no "gpgconf" executable.</source> <translation>目标 GnuPG 路径不包含“gpgconf”可执行文件。</translation> </message> @@ -1606,10 +1628,18 @@ This will result in loss of all cached form positions, statuses, key servers, et <context> <name>GpgFrontend::UI::GpgOperaHelper</name> <message> - <location filename="../../../../src/ui/function/GpgOperaHelper.cpp" line="96"/> - <location filename="../../../../src/ui/function/GpgOperaHelper.cpp" line="132"/> - <location filename="../../../../src/ui/function/GpgOperaHelper.cpp" line="174"/> - <location filename="../../../../src/ui/function/GpgOperaHelper.cpp" line="212"/> + <location filename="../../../../src/ui/function/GpgOperaHelper.cpp" line="94"/> + <location filename="../../../../src/ui/function/GpgOperaHelper.cpp" line="136"/> + <location filename="../../../../src/ui/function/GpgOperaHelper.cpp" line="185"/> + <location filename="../../../../src/ui/function/GpgOperaHelper.cpp" line="228"/> + <source>Operation Not Supported</source> + <translation>操作不被支持</translation> + </message> + <message> + <location filename="../../../../src/ui/function/GpgOperaHelper.cpp" line="102"/> + <location filename="../../../../src/ui/function/GpgOperaHelper.cpp" line="144"/> + <location filename="../../../../src/ui/function/GpgOperaHelper.cpp" line="191"/> + <location filename="../../../../src/ui/function/GpgOperaHelper.cpp" line="234"/> <source>Critical Error</source> <translation>关键错误</translation> </message> @@ -1827,218 +1857,218 @@ This will result in loss of all cached form positions, statuses, key servers, et <context> <name>GpgFrontend::UI::KeyGenerateDialog</name> <message> - <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="575"/> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="581"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="64"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="71"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="580"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="586"/> <source>Custom</source> <translation>自定义</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="71"/> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="524"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="72"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="529"/> <source>3 Months</source> <translation>3个月</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="72"/> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="529"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="73"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="534"/> <source>6 Months</source> <translation>6个月</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="73"/> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="534"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="74"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="539"/> <source>1 Year</source> <translation>1年</translation> </message> <message> - <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="539"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="75"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="140"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="145"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="544"/> <source>2 Years</source> <translation>2年</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="75"/> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="544"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="76"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="549"/> <source>5 Years</source> <translation>5年</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="76"/> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="549"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="77"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="554"/> <source>10 Years</source> <translation>10年</translation> </message> <message> - <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="555"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="78"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="101"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="110"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="560"/> <source>Non Expired</source> <translation>不过期</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="586"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="82"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="295"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="591"/> <source>Primary Key Only</source> <translation>仅主密钥</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"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="83"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="343"/> <source>Primary Key With Subkey</source> <translation>主密钥附带子密钥</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="85"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="86"/> <source>Name</source> <translation>名称</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="86"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="87"/> <source>Email</source> <translation>电子邮件</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="87"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="88"/> <source>Comment</source> <translation>注释</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="88"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="89"/> <source>Key Database</source> <translation>密钥数据库</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"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="90"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="93"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="103"/> <source>Algorithm</source> <translation>算法</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"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="91"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="94"/> <source>Validity Period</source> <translation>有效时长</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"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="95"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="105"/> <source>Key Length</source> <translation>密钥长度</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"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="96"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="106"/> <source>Usage</source> <translation>用法</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"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="97"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="107"/> <source>Encrypt</source> <translation>加密</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"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="98"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="108"/> <source>Sign</source> <translation>签名</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"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="99"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="109"/> <source>Authentication</source> <translation>验证</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="99"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="100"/> <source>No Passphrase</source> <translation>无密码</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="103"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="104"/> <source>Expire Date</source> <translation>到期日期</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="112"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="113"/> <source>Easy Mode</source> <translation>简单模式</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="113"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="114"/> <source>Primary Key</source> <translation>主密钥</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="114"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="115"/> <source>Subkey</source> <translation>子密钥</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="117"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="118"/> <source>Generate</source> <translation>生成</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"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="135"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="266"/> <source>None</source> <translation>无</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="146"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="147"/> <source>Generate Key</source> <translation>生成密钥</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="156"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="161"/> <source>Name must contain at least five characters.</source> <translation>名称必须至少包含五个字符。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="161"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="166"/> <source>Please give a valid email address.</source> <translation>请使用一个有效的电子邮件地址。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="166"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="171"/> <source>Please give a valid primary key algorithm.</source> <translation>请选择一个有效的主密钥算法。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="175"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="180"/> <source>Time to primary key expiration must not be less than 120 seconds.</source> <translation>距离主密钥过期时间不得少于 120 秒。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="182"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="187"/> <source>Please give a valid subkey algorithm.</source> <translation>请选择一个有效的子密钥算法。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="190"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="195"/> <source>Time to subkey expiration must not be less than 120 seconds.</source> <translation>距离子密钥过期时间不得少于 120 秒。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="614"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="619"/> <source>Error</source> <translation>错误</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="615"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="620"/> <source>Unknown error occurred</source> <translation>发生未知错误</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="627"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="632"/> <source>Generating</source> <translation>生成中</translation> </message> @@ -2492,7 +2522,7 @@ These keys are no longer available. Do you want to remove them from the group?</ </message> <message> <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="210"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="528"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="533"/> <source>Key Package</source> <translation>密钥包</translation> </message> @@ -2614,22 +2644,22 @@ These keys are no longer available. Do you want to remove them from the group?</ <message> <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="406"/> <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="418"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="482"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="493"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="506"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="537"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="545"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="561"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="569"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="585"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="487"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="498"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="511"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="542"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="550"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="566"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="574"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="590"/> <source>Error</source> <translation>错误</translation> </message> <message> <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="372"/> <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="387"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="457"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="466"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="462"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="471"/> <source>Forbidden</source> <translation>操作被禁止</translation> </message> @@ -2641,102 +2671,102 @@ These keys are no longer available. Do you want to remove them from the group?</ </message> <message> <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="380"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="520"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="525"/> <source>key(s) exported</source> <translation>导出的密钥</translation> </message> <message> <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="396"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="472"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="477"/> <source>Exporting</source> <translation>导出中</translation> </message> <message> <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="407"/> <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="419"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="483"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="494"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="488"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="499"/> <source>Unknown error occurred</source> <translation>发生了未知错误</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="441"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="449"/> <source>Invalid Operation</source> <translation>无效操作</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="442"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="450"/> <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="458"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="463"/> <source>Please check a key before performing this operation.</source> <translation>请在执行此操作前勾选一个密钥。</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="467"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="472"/> <source>This operation accepts just a single key.</source> <translation>此操作只接受单个密钥。</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="507"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="512"/> <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="515"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="520"/> <source>Export OpenSSH Key To File</source> <translation>将 OpenSSH 密钥导出到文件</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="516"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="521"/> <source>OpenSSH Public Key Files</source> <translation>OpenSSH 公钥文件</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="528"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="533"/> <source>Import Key Package</source> <translation>导入密钥包</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="538"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="562"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="543"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="567"/> <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="546"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="551"/> <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="551"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="556"/> <source>Import Key Package Passphrase File</source> <translation>导入密钥包口令文件</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="552"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="557"/> <source>Key Package Passphrase File</source> <translation>密钥包口令文件</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="570"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="575"/> <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="575"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="580"/> <source>Importing</source> <translation>导入中</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="592"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="597"/> <source>key(s) imported</source> <translation>导入的密钥</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="586"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="591"/> <source>An error occur in importing key package.</source> <translation>导入密钥包出错。</translation> </message> @@ -3329,313 +3359,313 @@ Note: For verification, you can find more information here: https://keys.openpgp <context> <name>GpgFrontend::UI::KeyPairSubkeyTab</name> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="81"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="189"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="85"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="193"/> <source>Key ID</source> <translation>密钥编号</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="83"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="189"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="87"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="193"/> <source>Algorithm</source> <translation>算法</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="84"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="190"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="88"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="194"/> <source>Algorithm Detail</source> <translation>算法细节</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="86"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="189"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="90"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="193"/> <source>Key Size</source> <translation>密钥大小</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="87"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="91"/> <source>Usage</source> <translation>用法</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="89"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="93"/> <source>Expires On (Local Time)</source> <translation>到期时间(本地时间)</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="91"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="95"/> <source>Create Date (Local Time)</source> <translation>创建日期(本地时间)</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="92"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="96"/> <source>Existence</source> <translation>存在</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="94"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="98"/> <source>Key in Smart Card</source> <translation>在智能卡中</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="96"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="100"/> <source>Fingerprint</source> <translation>指纹</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="54"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="53"/> <source>List of the primary key and subkey(s)</source> <translation>主密钥和子密钥列表</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="55"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="54"/> <source>Detail of Selected Primary Key/Subkey</source> <translation>选中的主密钥/子密钥详情</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="59"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="58"/> <source>New Subkey</source> <translation>新子密钥</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="60"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="59"/> <source>Add ADSK(s)</source> <translation>添加ADSK</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="82"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="189"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="86"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="193"/> <source>Key Type</source> <translation>密钥类型</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="93"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="97"/> <source>Revoked</source> <translation>已吊销</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="128"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="370"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="132"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="377"/> <source>Export Subkey</source> <translation>导出子密钥</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="190"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="194"/> <source>Create Date</source> <translation>创建时间</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="190"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="194"/> <source>Expire Date</source> <translation>到期日期</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="213"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="374"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="217"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="381"/> <source>Primary Key</source> <translation>主密钥</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="213"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="375"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="217"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="382"/> <source>Subkey</source> <translation>子密钥</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="214"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="218"/> <source>ADSK</source> <translation>ADSK</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="238"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="242"/> <source>Never Expire</source> <translation>永不过期</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="309"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="316"/> <source>Never Expires</source> <translation>永不过期</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="333"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="340"/> <source>Exists</source> <translation>存在</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="334"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="341"/> <source>Not Exists</source> <translation>不存在</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="337"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="377"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="344"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="384"/> <source>Yes</source> <translation>是</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="337"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="377"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="344"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="384"/> <source>No</source> <translation>否</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="369"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="376"/> <source>Export Primary Key</source> <translation>导出主密钥</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="391"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="398"/> <source>Edit Expire Date</source> <translation>编辑到期日期</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="395"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="402"/> <source>Export</source> <translation>导出</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="399"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="406"/> <source>Delete</source> <translation>删除</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="403"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="410"/> <source>Revoke</source> <translation>吊销</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="456"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="463"/> <source>Exporting Subkey</source> <translation>正在导出子密钥</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="457"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="464"/> <source>You are about to export a private subkey.</source> <translation>您即将导出一个子密钥的私有部分。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="458"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="465"/> <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="461"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="468"/> <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="488"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="495"/> <source>Export Key To File</source> <translation>将密钥导出到文件</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="489"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="496"/> <source>Key Files</source> <translation>密钥文件</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="494"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="501"/> <source>Export Error</source> <translation>导出错误</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="495"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="502"/> <source>Couldn't open %1 for writing</source> <translation>无法打开 %1 进行写入</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="503"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="510"/> <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="509"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="516"/> <source>Delete Subkey Confirmation</source> <translation>确认删除子密钥</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="524"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="573"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="531"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="580"/> <source>Illegal Operation</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="532"/> <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="533"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="540"/> <source>Operation Failed</source> <translation>操作失败</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="534"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="541"/> <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="540"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="547"/> <source>Operation Successful</source> <translation>操作成功</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="541"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="548"/> <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="550"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="557"/> <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="557"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="564"/> <source>Revoke Subkey</source> <translation>吊销子密钥</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="574"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="581"/> <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="579"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="586"/> <source>0 -> No Reason.</source> <translation>0 -> 无理由。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="579"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="586"/> <source>1 -> This key is no more safe.</source> <translation>1 -> 密钥不再安全。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="580"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="587"/> <source>2 -> Key is outdated.</source> <translation>2 -> 密钥已经过时。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="580"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="587"/> <source>3 -> Key is no longer used</source> <translation>3 -> 密钥不再被使用。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="591"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="598"/> <source>Revocation Failed</source> <translation>吊销失败</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="592"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="599"/> <source>Failed to revoke the subkey. Please try again.</source> <translation>吊销子密钥失败。请重试。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="595"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="602"/> <source>Revocation Successful</source> <translation>吊销成功</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="596"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="603"/> <source>The subkey has been successfully revoked.</source> <translation>子密钥成功吊销</translation> </message> @@ -3871,139 +3901,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="54"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="55"/> <source>Close</source> <translation>关闭</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="57"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="58"/> <source>Import ALL</source> <translation>全部导入</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="61"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="62"/> <source>Search</source> <translation>搜索</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="66"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="67"/> <source>Search String</source> <translation>搜索字符串</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="66"/> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="70"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="67"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="71"/> <source>: </source> <translation>: </translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="70"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="71"/> <source>Key Server</source> <translation>密钥服务器</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="111"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="112"/> <source>Import Keys from key server</source> <translation>从密钥服务器导入密钥</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="154"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="155"/> <source>UID</source> <translation>UID</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="154"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="155"/> <source>Creation date</source> <translation>创建日期</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="154"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="155"/> <source>KeyID</source> <translation>密钥 ID</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="154"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="155"/> <source>Tag</source> <translation>标签</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="177"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="178"/> <source>Text is empty.</source> <translation>文字为空。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="220"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="221"/> <source>Not Key Found</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="224"/> <source>Timeout</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="227"/> <source>Key Server Not Found</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="230"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="231"/> <source>Connection Error</source> <translation>连接错误</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="239"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="240"/> <source>Too many responses from keyserver!</source> <translation>来自密钥服务器的响应太多!</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="251"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="252"/> <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="261"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="262"/> <source>No keys found containing the search string!</source> <translation>未找到包含搜索字符串的密钥!</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="268"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="269"/> <source>Insufficiently specific search string!</source> <translation>不够具体的搜索字符串!</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="303"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="304"/> <source>revoked</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="307"/> <source>disabled</source> <translation>被禁用</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="351"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="352"/> <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="372"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="373"/> <source>Warning</source> <translation>警告</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="373"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="374"/> <source>Please select one KeyPair before doing this operation.</source> <translation>请在执行此操作前选择一个钥对。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="419"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="420"/> <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="437"/> <source>Processing ...</source> <translation>处理中 ......</translation> </message> @@ -4297,13 +4327,35 @@ 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="157"/> - <location filename="../../../../src/ui/main_window/MainWindow.cpp" line="160"/> + <location filename="../../../../src/ui/main_window/MainWindow.cpp" line="125"/> + <source>GUI Pinentry Not Found</source> + <translation>未找到可用的图形化 Pinentry 程序</translation> + </message> + <message> + <location filename="../../../../src/ui/main_window/MainWindow.cpp" line="126"/> + <source>No suitable *graphical* Pinentry program was found on your system. + +Please install a GUI-based Pinentry (e.g., 'pinentry-qt', 'pinentry-gnome3', or 'pinentry-mac' on macOS). + +Without a GUI Pinentry, GnuPG cannot prompt you for passwords or passphrases. + +After installing it, please restart GpgFrontend. The configuration file will be updated automatically.</source> + <translation>系统中未找到可用的图形化 Pinentry 程序。 + +请安装一个基于图形界面的 Pinentry(例如:pinentry-qt、pinentry-gnome3,或在 macOS 上的 pinentry-mac)。 + +没有图形化 Pinentry,GnuPG 无法提示您输入密码或口令。 + +安装完成后,请重新启动 GpgFrontend,配置文件将自动更新。</translation> + </message> + <message> + <location filename="../../../../src/ui/main_window/MainWindow.cpp" line="177"/> + <location filename="../../../../src/ui/main_window/MainWindow.cpp" line="180"/> <source>Critical error occur while loading GpgFrontend.</source> <translation>加载 GpgFrontend 时发生严重错误。</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindow.cpp" line="159"/> + <location filename="../../../../src/ui/main_window/MainWindow.cpp" line="179"/> <source>Loading Failed</source> <translation>加载失败</translation> </message> @@ -5133,26 +5185,26 @@ If the issue persists, consider seeking technical support or consulting the docu <translation>状态面板</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="317"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="331"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="346"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="322"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="340"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="359"/> <source>Successful Operation</source> <translation>操作成功</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="318"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="323"/> <source>Clear password cache successfully</source> <translation>清除密码缓存成功</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="320"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="335"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="350"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="325"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="344"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="363"/> <source>Failed Operation</source> <translation>操作失败</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="321"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="326"/> <source>Failed to clear password cache of GnuPG</source> <translation>无法清除 GnuPG 的密码缓存</translation> </message> @@ -5167,12 +5219,12 @@ If the issue persists, consider seeking technical support or consulting the docu <translation>重新加载所有 GnuPG 的组件</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="332"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="341"/> <source>Reload all the GnuPG's components successfully</source> <translation>成功重新加载所有 GnuPG 组件</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="336"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="345"/> <source>Failed to reload all or one of the GnuPG's component(s)</source> <translation>未能重新加载所有或其中一个 GnuPG 组件</translation> </message> @@ -5187,12 +5239,12 @@ If the issue persists, consider seeking technical support or consulting the docu <translation>重新启动所有 GnuPG 的组件</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="347"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="360"/> <source>Restart all the GnuPG's components successfully</source> <translation>成功重启所有 GnuPG 组件</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="351"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="364"/> <source>Failed to restart all or one of the GnuPG's component(s)</source> <translation>无法重新启动所有或其中一个 GnuPG 组件</translation> </message> @@ -5939,495 +5991,464 @@ If the issue persists, consider seeking technical support or consulting the docu <context> <name>GpgFrontend::UI::SmartCardControllerDialog</name> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="50"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="51"/> <source>Smart Card(s):</source> <translation>智能卡: </translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="51"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="52"/> <source>Key Stub(s) in Key Database(s):</source> <translation>在密钥数据库中的密钥桩: </translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="53"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="54"/> <source>Change Name</source> <translation>修改姓名</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="54"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="55"/> <source>Change Language</source> <translation>修改语言</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="55"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="56"/> <source>Change Gender</source> <translation>修改性别</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="56"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="57"/> <source>Change Login Data</source> <translation>修改登录信息</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="57"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="58"/> <source>Change Public Key URL</source> <translation>修改公钥链接</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="58"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="59"/> <source>Change PIN</source> <translation>修改PIN</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="59"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="60"/> <source>Change Admin PIN</source> <translation>修改管理员PIN</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="60"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="61"/> <source>Change Reset Code</source> <translation>修改重置代码</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="61"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="62"/> <source>Fetch</source> <translation>同步密钥信息</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="62"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="63"/> <source>Restart All Gpg-Agents</source> <translation>重启所有Gpg-Agents</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="63"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="64"/> <source>Generate Card Keys</source> <translation>生成智能卡密钥</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="64"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="65"/> <source>Refresh</source> <translation>刷新</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="66"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="67"/> <source>Operations</source> <translation>操作</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="117"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="123"/> <source>Successful Operation</source> <translation>操作成功</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="118"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="124"/> <source>Restart all the GnuPG's components successfully</source> <translation>成功重启所有 GnuPG 组件</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="121"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="127"/> <source>Failed Operation</source> <translation>操作失败</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="122"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="128"/> <source>Failed to restart all or one of the GnuPG's component(s)</source> <translation>无法重新启动所有或其中一个 GnuPG 组件</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="135"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="140"/> <source>Generate card key failed.</source> <translation>生成智能卡密钥失败。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="156"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="161"/> <source>Smart Card Controller</source> <translation>智能卡控制器</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="210"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="218"/> <source>OpenPGP Card Information</source> <translation>OpenPGP智能卡信息</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="212"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="220"/> <source>Basic Information</source> <translation>基本信息</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="213"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="221"/> <source>Reader</source> <translation>读卡器</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="214"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="222"/> <source>Serial Number</source> <translation>序列号</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="216"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="224"/> <source>Card Type</source> <translation>卡片类型</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="218"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="226"/> <source>Card Version</source> <translation>卡片版本</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="220"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="228"/> <source>App Type</source> <translation>应用类型</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="222"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="230"/> <source>App Version</source> <translation>应用版本</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="224"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="232"/> <source>Manufacturer ID</source> <translation>制造商ID</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="226"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="234"/> <source>Manufacturer</source> <translation>制造商</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="228"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="236"/> <source>Card Holder</source> <translation>持卡人</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="230"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="238"/> <source>Language</source> <translation>语言</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="232"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="240"/> <source>Sex</source> <translation>性别</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="237"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="245"/> <source>Signature Counter</source> <translation>签名计数器</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="239"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="247"/> <source>CHV1 Cached</source> <translation>已缓存普通PIN</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="241"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="249"/> <source>CHV Max Length</source> <translation>PIN最大长度</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="247"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="255"/> <source>CHV Retry Left</source> <translation>PIN剩余重试次数</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="253"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="261"/> <source>KDF Status</source> <translation>密钥派生函数状态</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="269"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="277"/> <source>UIF</source> <translation>用户交互标志</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="270"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="278"/> <source>Sign</source> <translation>签名</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="271"/> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="273"/> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="275"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="279"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="281"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="283"/> <source>Enabled</source> <translation>已启用</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="271"/> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="273"/> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="275"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="279"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="281"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="283"/> <source>Disabled</source> <translation>已禁用</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="272"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="280"/> <source>Encrypt</source> <translation>加密</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="274"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="282"/> <source>Authenticate</source> <translation>验证</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="322"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="330"/> <source>Status Indicator</source> <translation>状态指示器</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="467"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="480"/> <source>Cardholder's Surname</source> <translation>持卡人的姓氏</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="468"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="481"/> <source>Please enter your surname (e.g., Lee):</source> <translation>请输入您的姓氏 (如: 李): </translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="473"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="486"/> <source>Cardholder's Given Name</source> <translation>持卡人的名字</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="474"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="487"/> <source>Please enter your given name (e.g., Chris):</source> <translation>请输入您的名字 (如: 四): </translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="483"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="496"/> <source>Too Long</source> <translation>太长</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="484"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="497"/> <source>Combined name too long (max 39 characters).</source> <translation>姓名合并后太长 (最长39个字符)。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="499"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="512"/> <source>Male</source> <translation>男</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="499"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="512"/> <source>Female</source> <translation>女</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="503"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="516"/> <source>Select sex to store in '%1'</source> <translation>选择存储在 '%1' 中的性别</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="518"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="531"/> <source>Enter new value for attribute '%1'</source> <translation>请输入 '%1' 的新值</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="236"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="244"/> <source>Status</source> <translation>状态</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="256"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="264"/> <source>Not enabled</source> <translation>未启用</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="259"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="267"/> <source>Enabled (no protection)</source> <translation>启用 (无保护)</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="262"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="270"/> <source>Enabled with salt protection</source> <translation>启用并开启加盐保护</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="265"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="273"/> <source>Unknown</source> <translation>未知</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="279"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="287"/> <source>Key Information</source> <translation>密钥信息</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="283"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="291"/> <source>No key information available.</source> <translation>未发现可用密钥信息</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="286"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="294"/> <source>No.</source> <translation>序号</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="286"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="294"/> <source>Fingerprint</source> <translation>指纹</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="287"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="295"/> <source>Created</source> <translation>已生成</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="287"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="295"/> <source>Grip</source> <translation>内部密钥标识符</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="288"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="296"/> <source>Type</source> <translation>类型</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="288"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="296"/> <source>Algorithm</source> <translation>算法</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="289"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="297"/> <source>Usage</source> <translation>用法</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="289"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="297"/> <source>Curve</source> <translation>密钥曲线</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="307"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="315"/> <source>Extended Capabilities</source> <translation>扩展能力</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="309"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="317"/> <source>Key Info (ki): %1</source> <translation>密钥信息 (ki): %1</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="309"/> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="313"/> <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="317"/> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="320"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="321"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="325"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="328"/> <source>Yes</source> <translation>是</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="309"/> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="313"/> <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="317"/> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="320"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="321"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="325"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="328"/> <source>No</source> <translation>否</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="312"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="320"/> <source>Additional Auth (aac): %1</source> <translation>额外验证 (aac): %1</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="316"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="324"/> <source>Biometric Terminal (bt): %1</source> <translation>生物终端: %1</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="320"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="328"/> <source>KDF Supported: %1</source> <translation>密钥派生函数支持: %1</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="327"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="335"/> <source>Additional Info</source> <translation>额外信息</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="379"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="387"/> <source>No OpenPGP Smart Card Found</source> <translation>未发现OpenPGP智能卡</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="380"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="388"/> <source>No OpenPGP-compatible smart card has been detected.</source> <translation>未检测到兼容 OpenPGP 的智能卡。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="384"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="392"/> <source>An OpenPGP Smart Card is a physical device that securely stores your private cryptographic keys and can be used for digital signing, encryption, and authentication. Popular examples include YubiKey, Nitrokey, and other GnuPG-compatible tokens.</source> <translation>OpenPGP 智能卡是一种物理设备,可以安全地存储你的私人加密密钥,并可用于数字签名、加密和身份验证。流行的例子包括 YubiKey、Nitrokey 和其他 GnuPG 兼容令牌。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="392"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="400"/> <source>Make sure your card is inserted and properly recognized by the system. You can also try reconnecting the card or restarting the application.</source> <translation>确保您的卡已插入并被系统正确识别。您也可以尝试重新连接卡或重启应用程序。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="398"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="406"/> <source>Note: Smart card support of GpgFrontend requires GnuPG version 2.3.0 or later.</source> <translation>注意:GpgFrontend 的智能卡支持需要 GnuPG 2.3.0 或更高版本。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="402"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="410"/> <source>Read the GnuPG Smart Card HOWTO: </source> <translation>阅读 GnuPG 智能卡帮助文档</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="502"/> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="517"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="515"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="530"/> <source>Modify Card Attribute</source> <translation>修改智能卡属性</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="533"/> - <source>Failed</source> - <translation>失败</translation> - </message> - <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="534"/> - <source>Failed to set attribute '%1'. Reason: %2. </source> - <translation>修改属性 '%1' 失败。 原因: %2。</translation> - </message> - <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="537"/> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="562"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="549"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="563"/> <source>Success</source> <translation>成功</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="538"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="550"/> <source>Attribute operation completed successfully.</source> <translation>属性操作成功完成。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="549"/> - <source>Failed to change Admin PIN.</source> - <translation>修改管理员PIN失败。</translation> - </message> - <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="551"/> - <source>Failed to set the Reset Code.</source> - <translation>修改重置代码失败。</translation> - </message> - <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="553"/> - <source>Failed to change PIN.</source> - <translation>修改PIN失败。</translation> - </message> - <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="556"/> - <source>Reason: </source> - <translation>原因: </translation> - </message> - <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="134"/> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="558"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="139"/> <source>Error</source> <translation>错误</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="563"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="564"/> <source>PIN operation completed successfully.</source> <translation>PIN操作成功完成。</translation> </message> @@ -6435,82 +6456,82 @@ 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="82"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="83"/> <source>Tipps: if the key pair has a passphrase, the subkey's passphrase must be equal to it.</source> <translation>提示:如果主密钥和子密钥都有密码,则子密钥的密码必须与主密钥相同。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="85"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="86"/> <source>Generate New Subkey</source> <translation>生成新子密钥</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="63"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="64"/> <source>Authentication</source> <translation>验证</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="57"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="58"/> <source>Algorithm</source> <translation>算法</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="58"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="59"/> <source>Key Length</source> <translation>密钥长度</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="59"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="60"/> <source>Expire Date</source> <translation>到期日期</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="60"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="61"/> <source>Usage</source> <translation>用法</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="61"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="62"/> <source>Encrypt</source> <translation>加密</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="62"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="63"/> <source>Sign</source> <translation>签名</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="64"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="65"/> <source>Non Expired</source> <translation>不过期</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="65"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="66"/> <source>No Passphrase</source> <translation>无密码</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="183"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="188"/> <source>Please give a valid subkey algorithm.</source> <translation>请选择一个有效的子密钥算法。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="192"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="197"/> <source>Time to subkey expiration must not be less than 120 seconds.</source> <translation>距离主密钥过期时间不得少于120秒。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="204"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="209"/> <source>Generating</source> <translation>生成中</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="215"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="220"/> <source>Error</source> <translation>错误</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="216"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="221"/> <source>Unknown error occurred</source> <translation>发生未知错误</translation> </message> @@ -6987,13 +7008,13 @@ If the issue persists, consider seeking technical support or consulting the docu </message> <message> <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="44"/> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="159"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="166"/> <source>Usage</source> <translation>用法</translation> </message> <message> <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="44"/> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="160"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="167"/> <source>Trust</source> <translation>信任</translation> </message> @@ -7019,32 +7040,32 @@ If the issue persists, consider seeking technical support or consulting the docu </message> <message> <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="46"/> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="161"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="168"/> <source>Comment</source> <translation>注释</translation> </message> <message> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="157"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="164"/> <source>ID</source> <translation>ID</translation> </message> <message> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="158"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="165"/> <source>Algo</source> <translation>算法</translation> </message> <message> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="162"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="169"/> <source>No Comment</source> <translation>无备注</translation> </message> <message> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="168"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="175"/> <source>SubKeys (up to 8):</source> <translation>子密钥 (前8个): </translation> </message> <message> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="174"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="181"/> <source>ID: %1 | Algo: %2 | Usage: %3</source> <translation>ID: %1 | 算法: %2 | 用法: %3</translation> </message> @@ -7173,42 +7194,42 @@ If the issue persists, consider seeking technical support or consulting the docu <translation>您没有选中任何要同步的公钥,是否要从密钥服务器同步所有本地公钥?</translation> </message> <message> - <location filename="../../../../src/core/GpgCoreInit.cpp" line="423"/> + <location filename="../../../../src/core/GpgCoreInit.cpp" line="473"/> <source>Cannot Find GpgConf</source> <translation>无法找到 GpgConf</translation> </message> <message> - <location filename="../../../../src/core/GpgCoreInit.cpp" line="431"/> + <location filename="../../../../src/core/GpgCoreInit.cpp" line="481"/> <source>Cannot Find GnuPG</source> <translation>无法找到 GnuPG</translation> </message> <message> - <location filename="../../../../src/core/GpgCoreInit.cpp" line="406"/> + <location filename="../../../../src/core/GpgCoreInit.cpp" line="456"/> <source>Cannot get Infos from GpgConf</source> <translation>无法从GpgConf获取信息</translation> </message> <message> - <location filename="../../../../src/core/GpgCoreInit.cpp" line="446"/> + <location filename="../../../../src/core/GpgCoreInit.cpp" line="496"/> <source>Cannot Find Default Home Path</source> <translation>无法找到默认的GnuPG家目录</translation> </message> <message> - <location filename="../../../../src/core/GpgCoreInit.cpp" line="472"/> + <location filename="../../../../src/core/GpgCoreInit.cpp" line="522"/> <source>GpgME Initiation Failed</source> <translation>GpgME 初始化失败</translation> </message> <message> - <location filename="../../../../src/core/GpgCoreInit.cpp" line="527"/> + <location filename="../../../../src/core/GpgCoreInit.cpp" line="577"/> <source>No valid Key Database</source> <translation>没有有效的密钥数据库</translation> </message> <message> - <location filename="../../../../src/core/GpgCoreInit.cpp" line="556"/> + <location filename="../../../../src/core/GpgCoreInit.cpp" line="607"/> <source>GpgME Default Context Initiation Failed</source> <translation>GpgME 默认上下文初始化失败</translation> </message> <message> - <location filename="../../../../src/core/GpgCoreInit.cpp" line="567"/> + <location filename="../../../../src/core/GpgCoreInit.cpp" line="623"/> <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 7d3e3412..9270bdcc 100644 --- a/resource/lfs/locale/ts/GpgFrontend.zh_TW.ts +++ b/resource/lfs/locale/ts/GpgFrontend.zh_TW.ts @@ -492,7 +492,7 @@ <context> <name>GpgFrontend::KeyGenerateInfo</name> <message> - <location filename="../../../../src/core/model/GpgKeyGenerateInfo.cpp" line="39"/> + <location filename="../../../../src/core/model/GpgKeyGenerateInfo.cpp" line="40"/> <source>None</source> <translation type="unfinished"></translation> </message> @@ -586,22 +586,22 @@ <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/ADSKsPicker.cpp" line="123"/> + <location filename="../../../../src/ui/dialog/ADSKsPicker.cpp" line="122"/> <source>Failed</source> <translation type="unfinished">失敗</translation> </message> <message> - <location filename="../../../../src/ui/dialog/ADSKsPicker.cpp" line="124"/> + <location filename="../../../../src/ui/dialog/ADSKsPicker.cpp" line="123"/> <source>Partially Failed</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/ADSKsPicker.cpp" line="126"/> + <location filename="../../../../src/ui/dialog/ADSKsPicker.cpp" line="125"/> <source>Failed to add all selected subkeys.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/ADSKsPicker.cpp" line="127"/> + <location filename="../../../../src/ui/dialog/ADSKsPicker.cpp" line="126"/> <source>Some subkeys failed to be added as ADSKs.</source> <translation type="unfinished"></translation> </message> @@ -769,13 +769,13 @@ <context> <name>GpgFrontend::UI::CommonUtils</name> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="428"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="436"/> <source>Timeout</source> <translation type="unfinished">暫停</translation> </message> <message> <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="163"/> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="303"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="311"/> <source>Success</source> <translation type="unfinished">成功</translation> </message> @@ -795,122 +795,148 @@ <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="174"/> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="295"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="182"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="303"/> <source>Failure</source> <translation type="unfinished">失敗</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="175"/> - <source>Gpg Operation failed. - -Error code: %1 -Source: %2 -Description: %3</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="210"/> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="217"/> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="485"/> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="647"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="218"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="225"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="493"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="655"/> <source>Error</source> <translation type="unfinished">錯誤</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="202"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="210"/> <source>Open Key</source> <translation type="unfinished">開關鍵</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="203"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="172"/> + <source>Operation Not Supported</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="173"/> + <source>The current GnuPG version is too low and does not support this operation. Please upgrade your GnuPG version to continue.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="183"/> + <source>Gpg Operation failed.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="184"/> + <source>Error code: %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="185"/> + <source>Source: %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="186"/> + <source>Description: %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="187"/> + <source>Error Message: %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="211"/> <source>Keyring files</source> <translation type="unfinished">鑰匙圈文件</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="211"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="219"/> <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="218"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="226"/> <source>The target file is too large for a keyring.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="224"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="232"/> <source>File Open Failed</source> <translation type="unfinished">文件打開失敗</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="225"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="233"/> <source>Failed to open file: </source> <translation type="unfinished">開啟檔案失敗原因 : </translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="276"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="284"/> <source>Processing</source> <translation type="unfinished">加工</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="296"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="304"/> <source>Failed to execute command.</source> <translation type="unfinished">無法執行命令。</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="304"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="312"/> <source>Succeed in executing command.</source> <translation type="unfinished">成功執行命令。</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="306"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="314"/> <source>Warning</source> <translation type="unfinished">警告</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="307"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="315"/> <source>Finished executing command.</source> <translation type="unfinished">命令執行完畢。</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="327"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="335"/> <source>Default Keyserver Not Found</source> <translation type="unfinished">未找到預設金鑰伺服器</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="328"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="336"/> <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="425"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="433"/> <source>Key Not Found</source> <translation type="unfinished">未找到金鑰</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="431"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="439"/> <source>Key Server Not Found</source> <translation type="unfinished">未找到金鑰伺服器</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="434"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="442"/> <source>Connection Error</source> <translation type="unfinished">連線錯誤</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="647"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="655"/> <source>Key Not Found.</source> <translation type="unfinished">未找到金鑰。</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="375"/> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="445"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="383"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="453"/> <source>The key has been updated</source> <translation type="unfinished">金鑰已更新</translation> </message> <message> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="377"/> - <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="447"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="385"/> + <location filename="../../../../src/ui/UserInterfaceUtils.cpp" line="455"/> <source>No need to update the key</source> <translation type="unfinished">無需更新金鑰</translation> </message> @@ -1456,70 +1482,70 @@ 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/controller/GnuPGControllerDialog.cpp" line="358"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="359"/> <source>Maximum Key Database Limit Reached</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="359"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="360"/> <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="370"/> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="616"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="371"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="617"/> <source>Duplicate Key Database Paths</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="371"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="372"/> <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="380"/> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="627"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="381"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="628"/> <source>Invalid Key Database Paths</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="381"/> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="628"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="382"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="629"/> <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="428"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="429"/> <source>Active</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="428"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="429"/> <source>Inactive</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="456"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="457"/> <source>Confirm Deletion</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="457"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="458"/> <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="595"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="596"/> <source>No Key Database Selected</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="596"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="597"/> <source>Please select a key database to edit.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="617"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="618"/> <source>The edited key database path duplicates a previously existing one.</source> <translation type="unfinished"></translation> </message> @@ -1556,7 +1582,7 @@ This will result in loss of all cached form positions, statuses, key servers, et <message> <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="326"/> <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="333"/> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="345"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="346"/> <source>Illegal GnuPG Path</source> <translation type="unfinished">非法 GnuPG 路徑</translation> </message> @@ -1571,7 +1597,7 @@ This will result in loss of all cached form positions, statuses, key servers, et <translation type="unfinished">目標 GnuPG 路徑不是絕對路徑。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="346"/> + <location filename="../../../../src/ui/dialog/controller/GnuPGControllerDialog.cpp" line="347"/> <source>Target GnuPG Path contains no "gpgconf" executable.</source> <translation type="unfinished">目標 GnuPG 路徑不包含“gpgconf”可執行文件。</translation> </message> @@ -1602,10 +1628,18 @@ This will result in loss of all cached form positions, statuses, key servers, et <context> <name>GpgFrontend::UI::GpgOperaHelper</name> <message> - <location filename="../../../../src/ui/function/GpgOperaHelper.cpp" line="96"/> - <location filename="../../../../src/ui/function/GpgOperaHelper.cpp" line="132"/> - <location filename="../../../../src/ui/function/GpgOperaHelper.cpp" line="174"/> - <location filename="../../../../src/ui/function/GpgOperaHelper.cpp" line="212"/> + <location filename="../../../../src/ui/function/GpgOperaHelper.cpp" line="94"/> + <location filename="../../../../src/ui/function/GpgOperaHelper.cpp" line="136"/> + <location filename="../../../../src/ui/function/GpgOperaHelper.cpp" line="185"/> + <location filename="../../../../src/ui/function/GpgOperaHelper.cpp" line="228"/> + <source>Operation Not Supported</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/function/GpgOperaHelper.cpp" line="102"/> + <location filename="../../../../src/ui/function/GpgOperaHelper.cpp" line="144"/> + <location filename="../../../../src/ui/function/GpgOperaHelper.cpp" line="191"/> + <location filename="../../../../src/ui/function/GpgOperaHelper.cpp" line="234"/> <source>Critical Error</source> <translation type="unfinished"></translation> </message> @@ -1823,218 +1857,218 @@ This will result in loss of all cached form positions, statuses, key servers, et <context> <name>GpgFrontend::UI::KeyGenerateDialog</name> <message> - <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="575"/> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="581"/> - <source>Custom</source> - <translation type="unfinished"></translation> - </message> - <message> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="64"/> <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="71"/> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="524"/> - <source>3 Months</source> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="580"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="586"/> + <source>Custom</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="72"/> <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="529"/> - <source>6 Months</source> + <source>3 Months</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="73"/> <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="534"/> - <source>1 Year</source> + <source>6 Months</source> <translation type="unfinished"></translation> </message> <message> <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="539"/> - <source>2 Years</source> + <source>1 Year</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="75"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="140"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="145"/> <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="544"/> - <source>5 Years</source> + <source>2 Years</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="76"/> <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="549"/> - <source>10 Years</source> + <source>5 Years</source> <translation type="unfinished"></translation> </message> <message> <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="555"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="554"/> + <source>10 Years</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="78"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="101"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="110"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="560"/> <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="586"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="82"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="295"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="591"/> <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"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="83"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="343"/> <source>Primary Key With Subkey</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="85"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="86"/> <source>Name</source> <translation type="unfinished">姓名</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="86"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="87"/> <source>Email</source> <translation type="unfinished">電子郵件</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="87"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="88"/> <source>Comment</source> <translation type="unfinished">評論</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="88"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="89"/> <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"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="90"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="93"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="103"/> <source>Algorithm</source> <translation type="unfinished">算法</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"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="91"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="94"/> <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"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="95"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="105"/> <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"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="96"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="106"/> <source>Usage</source> <translation type="unfinished">用法</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"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="97"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="107"/> <source>Encrypt</source> <translation type="unfinished">加密</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"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="98"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="108"/> <source>Sign</source> <translation type="unfinished">標誌</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"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="99"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="109"/> <source>Authentication</source> <translation type="unfinished">驗證</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="99"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="100"/> <source>No Passphrase</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="103"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="104"/> <source>Expire Date</source> <translation type="unfinished">到期日期</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="112"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="113"/> <source>Easy Mode</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="113"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="114"/> <source>Primary Key</source> <translation type="unfinished">首要的關鍵</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="114"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="115"/> <source>Subkey</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="117"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="118"/> <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"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="135"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="266"/> <source>None</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="146"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="147"/> <source>Generate Key</source> <translation type="unfinished">生成金鑰</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="156"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="161"/> <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"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="166"/> <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"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="171"/> <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"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="180"/> <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"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="187"/> <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"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="195"/> <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="614"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="619"/> <source>Error</source> <translation type="unfinished">錯誤</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="615"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="620"/> <source>Unknown error occurred</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="627"/> + <location filename="../../../../src/ui/dialog/key_generate/KeyGenerateDialog.cpp" line="632"/> <source>Generating</source> <translation type="unfinished">生成</translation> </message> @@ -2483,7 +2517,7 @@ These keys are no longer available. Do you want to remove them from the group?</ </message> <message> <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="210"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="528"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="533"/> <source>Key Package</source> <translation type="unfinished">鑰匙包</translation> </message> @@ -2605,22 +2639,22 @@ These keys are no longer available. Do you want to remove them from the group?</ <message> <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="406"/> <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="418"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="482"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="493"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="506"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="537"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="545"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="561"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="569"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="585"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="487"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="498"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="511"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="542"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="550"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="566"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="574"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="590"/> <source>Error</source> <translation type="unfinished">錯誤</translation> </message> <message> <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="372"/> <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="387"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="457"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="466"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="462"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="471"/> <source>Forbidden</source> <translation type="unfinished">禁止的</translation> </message> @@ -2632,102 +2666,102 @@ These keys are no longer available. Do you want to remove them from the group?</ </message> <message> <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="380"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="520"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="525"/> <source>key(s) exported</source> <translation type="unfinished">導出的金鑰</translation> </message> <message> <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="396"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="472"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="477"/> <source>Exporting</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="407"/> <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="419"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="483"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="494"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="488"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="499"/> <source>Unknown error occurred</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="441"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="449"/> <source>Invalid Operation</source> <translation type="unfinished">無效操作</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="442"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="450"/> <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="458"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="463"/> <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="467"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="472"/> <source>This operation accepts just a single key.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="507"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="512"/> <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="515"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="520"/> <source>Export OpenSSH Key To File</source> <translation type="unfinished">將 OpenSSH 金鑰導出到文件</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="516"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="521"/> <source>OpenSSH Public Key Files</source> <translation type="unfinished">OpenSSH 公鑰文件</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="528"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="533"/> <source>Import Key Package</source> <translation type="unfinished">導入金鑰包</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="538"/> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="562"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="543"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="567"/> <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="546"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="551"/> <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="551"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="556"/> <source>Import Key Package Passphrase File</source> <translation type="unfinished">導入金鑰包密碼文件</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="552"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="557"/> <source>Key Package Passphrase File</source> <translation type="unfinished">金鑰包密碼文件</translation> </message> <message> - <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="570"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="575"/> <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="575"/> + <location filename="../../../../src/ui/main_window/KeyMgmt.cpp" line="580"/> <source>Importing</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="597"/> <source>key(s) imported</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="591"/> <source>An error occur in importing key package.</source> <translation type="unfinished">導入金鑰包出錯。</translation> </message> @@ -3312,313 +3346,313 @@ Note: For verification, you can find more information here: https://keys.openpgp <context> <name>GpgFrontend::UI::KeyPairSubkeyTab</name> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="81"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="189"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="85"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="193"/> <source>Key ID</source> <translation type="unfinished">鑰匙編號</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="83"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="189"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="87"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="193"/> <source>Algorithm</source> <translation type="unfinished">算法</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="84"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="190"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="88"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="194"/> <source>Algorithm Detail</source> <translation type="unfinished">算法細節</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="86"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="189"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="90"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="193"/> <source>Key Size</source> <translation type="unfinished">金鑰大小</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="87"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="91"/> <source>Usage</source> <translation type="unfinished">用法</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="89"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="93"/> <source>Expires On (Local Time)</source> <translation type="unfinished">到期時間(當地時間)</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="91"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="95"/> <source>Create Date (Local Time)</source> <translation type="unfinished">創建日期(當地時間)</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="92"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="96"/> <source>Existence</source> <translation type="unfinished">存在</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="94"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="98"/> <source>Key in Smart Card</source> <translation type="unfinished">輸入智能卡</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="96"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="100"/> <source>Fingerprint</source> <translation type="unfinished">指紋</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="54"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="53"/> <source>List of the primary key and subkey(s)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="55"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="54"/> <source>Detail of Selected Primary Key/Subkey</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="59"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="58"/> <source>New Subkey</source> <translation type="unfinished">新增子系金鑰</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="60"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="59"/> <source>Add ADSK(s)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="82"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="189"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="86"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="193"/> <source>Key Type</source> <translation type="unfinished">鑰匙類型</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="93"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="97"/> <source>Revoked</source> <translation type="unfinished">撤銷</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="128"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="370"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="132"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="377"/> <source>Export Subkey</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="190"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="194"/> <source>Create Date</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="190"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="194"/> <source>Expire Date</source> <translation type="unfinished">到期日期</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="213"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="374"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="217"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="381"/> <source>Primary Key</source> <translation type="unfinished">首要的關鍵</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="213"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="375"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="217"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="382"/> <source>Subkey</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="214"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="218"/> <source>ADSK</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="238"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="242"/> <source>Never Expire</source> <translation type="unfinished">永不過期</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="309"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="316"/> <source>Never Expires</source> <translation type="unfinished">永不過期</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="333"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="340"/> <source>Exists</source> <translation type="unfinished">存在</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="334"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="341"/> <source>Not Exists</source> <translation type="unfinished">不存在</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="337"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="377"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="344"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="384"/> <source>Yes</source> <translation type="unfinished">是的</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="337"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="377"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="344"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="384"/> <source>No</source> <translation type="unfinished">不</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="369"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="376"/> <source>Export Primary Key</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="391"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="398"/> <source>Edit Expire Date</source> <translation type="unfinished">編輯到期日</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="395"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="402"/> <source>Export</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="399"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="406"/> <source>Delete</source> <translation type="unfinished">刪除</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="403"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="410"/> <source>Revoke</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="456"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="463"/> <source>Exporting Subkey</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="457"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="464"/> <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="458"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="465"/> <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="461"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="468"/> <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="488"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="495"/> <source>Export Key To File</source> <translation type="unfinished">將金鑰導出到文件</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="489"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="496"/> <source>Key Files</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="501"/> <source>Export Error</source> <translation type="unfinished">導出錯誤</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="495"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="502"/> <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="503"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="510"/> <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="509"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="516"/> <source>Delete Subkey Confirmation</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="524"/> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="573"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="531"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="580"/> <source>Illegal Operation</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="532"/> <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="533"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="540"/> <source>Operation Failed</source> <translation type="unfinished">手術失敗</translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="534"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="541"/> <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="540"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="547"/> <source>Operation Successful</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="541"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="548"/> <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="550"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="557"/> <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="557"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="564"/> <source>Revoke Subkey</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="574"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="581"/> <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="579"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="586"/> <source>0 -> No Reason.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="579"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="586"/> <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="580"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="587"/> <source>2 -> Key is outdated.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="580"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="587"/> <source>3 -> Key is no longer used</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="591"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="598"/> <source>Revocation Failed</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="592"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="599"/> <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="595"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="602"/> <source>Revocation Successful</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="596"/> + <location filename="../../../../src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp" line="603"/> <source>The subkey has been successfully revoked.</source> <translation type="unfinished"></translation> </message> @@ -3854,139 +3888,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="54"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="55"/> <source>Close</source> <translation type="unfinished">關閉</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="57"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="58"/> <source>Import ALL</source> <translation type="unfinished">全部導入</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="61"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="62"/> <source>Search</source> <translation type="unfinished">搜索</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="66"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="67"/> <source>Search String</source> <translation type="unfinished">搜索字符串</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="66"/> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="70"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="67"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="71"/> <source>: </source> <translation type="unfinished">: </translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="70"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="71"/> <source>Key Server</source> <translation type="unfinished">金鑰伺服器</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="111"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="112"/> <source>Import Keys from key server</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="154"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="155"/> <source>UID</source> <translation type="unfinished">用戶識別碼</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="154"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="155"/> <source>Creation date</source> <translation type="unfinished">創立日期</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="154"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="155"/> <source>KeyID</source> <translation type="unfinished">金鑰 ID</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="154"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="155"/> <source>Tag</source> <translation type="unfinished">標籤</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="177"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="178"/> <source>Text is empty.</source> <translation type="unfinished">文字為空。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="220"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="221"/> <source>Not Key Found</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="224"/> <source>Timeout</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="227"/> <source>Key Server Not Found</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="230"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="231"/> <source>Connection Error</source> <translation type="unfinished">連線錯誤</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="239"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="240"/> <source>Too many responses from keyserver!</source> <translation type="unfinished">來自金鑰伺服器的響應太多!</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="251"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="252"/> <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="261"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="262"/> <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="268"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="269"/> <source>Insufficiently specific search string!</source> <translation type="unfinished">不夠具體的搜索字符串!</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="303"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="304"/> <source>revoked</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="307"/> <source>disabled</source> <translation type="unfinished">殘疾</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="351"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="352"/> <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="372"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="373"/> <source>Warning</source> <translation type="unfinished">警告</translation> </message> <message> - <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="373"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="374"/> <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="419"/> + <location filename="../../../../src/ui/dialog/import_export/KeyServerImportDialog.cpp" line="420"/> <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="437"/> <source>Processing ...</source> <translation type="unfinished"></translation> </message> @@ -4280,13 +4314,29 @@ 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="157"/> - <location filename="../../../../src/ui/main_window/MainWindow.cpp" line="160"/> + <location filename="../../../../src/ui/main_window/MainWindow.cpp" line="125"/> + <source>GUI Pinentry Not Found</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/main_window/MainWindow.cpp" line="126"/> + <source>No suitable *graphical* Pinentry program was found on your system. + +Please install a GUI-based Pinentry (e.g., 'pinentry-qt', 'pinentry-gnome3', or 'pinentry-mac' on macOS). + +Without a GUI Pinentry, GnuPG cannot prompt you for passwords or passphrases. + +After installing it, please restart GpgFrontend. The configuration file will be updated automatically.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../src/ui/main_window/MainWindow.cpp" line="177"/> + <location filename="../../../../src/ui/main_window/MainWindow.cpp" line="180"/> <source>Critical error occur while loading GpgFrontend.</source> <translation type="unfinished">加載 GpgFrontend 時發生嚴重錯誤。</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindow.cpp" line="159"/> + <location filename="../../../../src/ui/main_window/MainWindow.cpp" line="179"/> <source>Loading Failed</source> <translation type="unfinished">加載失敗</translation> </message> @@ -5068,26 +5118,26 @@ If the issue persists, consider seeking technical support or consulting the docu <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="317"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="331"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="346"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="322"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="340"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="359"/> <source>Successful Operation</source> <translation type="unfinished">成功運作</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="318"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="323"/> <source>Clear password cache successfully</source> <translation type="unfinished">清除密碼緩存成功</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="320"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="335"/> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="350"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="325"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="344"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="363"/> <source>Failed Operation</source> <translation type="unfinished">操作失敗</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="321"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="326"/> <source>Failed to clear password cache of GnuPG</source> <translation type="unfinished">無法清除 GnuPG 的密碼緩存</translation> </message> @@ -5102,12 +5152,12 @@ If the issue persists, consider seeking technical support or consulting the docu <translation type="unfinished">重新加載所有 GnuPG 的組件</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="332"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="341"/> <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="336"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="345"/> <source>Failed to reload all or one of the GnuPG's component(s)</source> <translation type="unfinished">未能重新加載所有或其中一個 GnuPG 組件</translation> </message> @@ -5122,12 +5172,12 @@ If the issue persists, consider seeking technical support or consulting the docu <translation type="unfinished">重新啟動所有 GnuPG 的組件</translation> </message> <message> - <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="347"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="360"/> <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="351"/> + <location filename="../../../../src/ui/main_window/MainWindowSlotUI.cpp" line="364"/> <source>Failed to restart all or one of the GnuPG's component(s)</source> <translation type="unfinished">無法重新啟動所有或其中一個 GnuPG 組件</translation> </message> @@ -5874,495 +5924,464 @@ If the issue persists, consider seeking technical support or consulting the docu <context> <name>GpgFrontend::UI::SmartCardControllerDialog</name> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="50"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="51"/> <source>Smart Card(s):</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="51"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="52"/> <source>Key Stub(s) in Key Database(s):</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="53"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="54"/> <source>Change Name</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="54"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="55"/> <source>Change Language</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="55"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="56"/> <source>Change Gender</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="56"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="57"/> <source>Change Login Data</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="57"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="58"/> <source>Change Public Key URL</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="58"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="59"/> <source>Change PIN</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="59"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="60"/> <source>Change Admin PIN</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="60"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="61"/> <source>Change Reset Code</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="61"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="62"/> <source>Fetch</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="62"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="63"/> <source>Restart All Gpg-Agents</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="63"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="64"/> <source>Generate Card Keys</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="64"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="65"/> <source>Refresh</source> <translation type="unfinished">刷新</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="66"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="67"/> <source>Operations</source> <translation type="unfinished">運作中</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="117"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="123"/> <source>Successful Operation</source> <translation type="unfinished">成功運作</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="118"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="124"/> <source>Restart all the GnuPG's components successfully</source> <translation type="unfinished">成功重啟所有 GnuPG 組件</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="121"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="127"/> <source>Failed Operation</source> <translation type="unfinished">操作失敗</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="122"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="128"/> <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/dialog/controller/SmartCardControllerDialog.cpp" line="135"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="140"/> <source>Generate card key failed.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="156"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="161"/> <source>Smart Card Controller</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="210"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="218"/> <source>OpenPGP Card Information</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="212"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="220"/> <source>Basic Information</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="213"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="221"/> <source>Reader</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="214"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="222"/> <source>Serial Number</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="216"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="224"/> <source>Card Type</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="218"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="226"/> <source>Card Version</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="220"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="228"/> <source>App Type</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="222"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="230"/> <source>App Version</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="224"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="232"/> <source>Manufacturer ID</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="226"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="234"/> <source>Manufacturer</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="228"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="236"/> <source>Card Holder</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="230"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="238"/> <source>Language</source> <translation type="unfinished">語</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="232"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="240"/> <source>Sex</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="237"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="245"/> <source>Signature Counter</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="239"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="247"/> <source>CHV1 Cached</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="241"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="249"/> <source>CHV Max Length</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="247"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="255"/> <source>CHV Retry Left</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="253"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="261"/> <source>KDF Status</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="269"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="277"/> <source>UIF</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="270"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="278"/> <source>Sign</source> <translation type="unfinished">標誌</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="271"/> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="273"/> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="275"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="279"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="281"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="283"/> <source>Enabled</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="271"/> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="273"/> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="275"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="279"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="281"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="283"/> <source>Disabled</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="272"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="280"/> <source>Encrypt</source> <translation type="unfinished">加密</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="274"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="282"/> <source>Authenticate</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="322"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="330"/> <source>Status Indicator</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="467"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="480"/> <source>Cardholder's Surname</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="468"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="481"/> <source>Please enter your surname (e.g., Lee):</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="473"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="486"/> <source>Cardholder's Given Name</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="474"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="487"/> <source>Please enter your given name (e.g., Chris):</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="483"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="496"/> <source>Too Long</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="484"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="497"/> <source>Combined name too long (max 39 characters).</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="499"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="512"/> <source>Male</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="499"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="512"/> <source>Female</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="503"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="516"/> <source>Select sex to store in '%1'</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="518"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="531"/> <source>Enter new value for attribute '%1'</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="236"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="244"/> <source>Status</source> <translation type="unfinished">狀態</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="256"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="264"/> <source>Not enabled</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="259"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="267"/> <source>Enabled (no protection)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="262"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="270"/> <source>Enabled with salt protection</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="265"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="273"/> <source>Unknown</source> <translation type="unfinished">未知</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="279"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="287"/> <source>Key Information</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="283"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="291"/> <source>No key information available.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="286"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="294"/> <source>No.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="286"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="294"/> <source>Fingerprint</source> <translation type="unfinished">指紋</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="287"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="295"/> <source>Created</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="287"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="295"/> <source>Grip</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="288"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="296"/> <source>Type</source> <translation type="unfinished">類型</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="288"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="296"/> <source>Algorithm</source> <translation type="unfinished">算法</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="289"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="297"/> <source>Usage</source> <translation type="unfinished">用法</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="289"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="297"/> <source>Curve</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="307"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="315"/> <source>Extended Capabilities</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="309"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="317"/> <source>Key Info (ki): %1</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="309"/> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="313"/> <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="317"/> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="320"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="321"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="325"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="328"/> <source>Yes</source> <translation type="unfinished">是的</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="309"/> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="313"/> <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="317"/> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="320"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="321"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="325"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="328"/> <source>No</source> <translation type="unfinished">不</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="312"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="320"/> <source>Additional Auth (aac): %1</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="316"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="324"/> <source>Biometric Terminal (bt): %1</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="320"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="328"/> <source>KDF Supported: %1</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="327"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="335"/> <source>Additional Info</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="379"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="387"/> <source>No OpenPGP Smart Card Found</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="380"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="388"/> <source>No OpenPGP-compatible smart card has been detected.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="384"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="392"/> <source>An OpenPGP Smart Card is a physical device that securely stores your private cryptographic keys and can be used for digital signing, encryption, and authentication. Popular examples include YubiKey, Nitrokey, and other GnuPG-compatible tokens.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="392"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="400"/> <source>Make sure your card is inserted and properly recognized by the system. You can also try reconnecting the card or restarting the application.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="398"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="406"/> <source>Note: Smart card support of GpgFrontend requires GnuPG version 2.3.0 or later.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="402"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="410"/> <source>Read the GnuPG Smart Card HOWTO: </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="502"/> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="517"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="515"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="530"/> <source>Modify Card Attribute</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="533"/> - <source>Failed</source> - <translation type="unfinished">失敗</translation> - </message> - <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="534"/> - <source>Failed to set attribute '%1'. Reason: %2. </source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="537"/> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="562"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="549"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="563"/> <source>Success</source> <translation type="unfinished">成功</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="538"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="550"/> <source>Attribute operation completed successfully.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="549"/> - <source>Failed to change Admin PIN.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="551"/> - <source>Failed to set the Reset Code.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="553"/> - <source>Failed to change PIN.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="556"/> - <source>Reason: </source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="134"/> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="558"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="139"/> <source>Error</source> <translation type="unfinished">錯誤</translation> </message> <message> - <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="563"/> + <location filename="../../../../src/ui/dialog/controller/SmartCardControllerDialog.cpp" line="564"/> <source>PIN operation completed successfully.</source> <translation type="unfinished"></translation> </message> @@ -6370,82 +6389,82 @@ 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="82"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="83"/> <source>Tipps: if the key pair has a passphrase, the subkey's passphrase must be equal to it.</source> <translation type="unfinished">提示:如果金鑰對有密碼,則子金鑰的密碼必須與其相等。</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="85"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="86"/> <source>Generate New Subkey</source> <translation type="unfinished">生成新子金鑰</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="63"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="64"/> <source>Authentication</source> <translation type="unfinished">驗證</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="57"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="58"/> <source>Algorithm</source> <translation type="unfinished">算法</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="58"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="59"/> <source>Key Length</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="59"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="60"/> <source>Expire Date</source> <translation type="unfinished">到期日期</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="60"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="61"/> <source>Usage</source> <translation type="unfinished">用法</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="61"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="62"/> <source>Encrypt</source> <translation type="unfinished">加密</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="62"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="63"/> <source>Sign</source> <translation type="unfinished">標誌</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="64"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="65"/> <source>Non Expired</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="65"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="66"/> <source>No Passphrase</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="183"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="188"/> <source>Please give a valid subkey algorithm.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="192"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="197"/> <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="204"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="209"/> <source>Generating</source> <translation type="unfinished">生成</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="215"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="220"/> <source>Error</source> <translation type="unfinished">錯誤</translation> </message> <message> - <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="216"/> + <location filename="../../../../src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp" line="221"/> <source>Unknown error occurred</source> <translation type="unfinished"></translation> </message> @@ -6922,13 +6941,13 @@ If the issue persists, consider seeking technical support or consulting the docu </message> <message> <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="44"/> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="159"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="166"/> <source>Usage</source> <translation type="unfinished">用法</translation> </message> <message> <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="44"/> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="160"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="167"/> <source>Trust</source> <translation type="unfinished">相信</translation> </message> @@ -6954,32 +6973,32 @@ If the issue persists, consider seeking technical support or consulting the docu </message> <message> <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="46"/> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="161"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="168"/> <source>Comment</source> <translation type="unfinished">評論</translation> </message> <message> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="157"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="164"/> <source>ID</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="158"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="165"/> <source>Algo</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="162"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="169"/> <source>No Comment</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="168"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="175"/> <source>SubKeys (up to 8):</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="174"/> + <location filename="../../../../src/core/model/GpgKeyTableModel.cpp" line="181"/> <source>ID: %1 | Algo: %2 | Usage: %3</source> <translation type="unfinished"></translation> </message> @@ -7108,42 +7127,42 @@ If the issue persists, consider seeking technical support or consulting the docu <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/core/GpgCoreInit.cpp" line="423"/> + <location filename="../../../../src/core/GpgCoreInit.cpp" line="473"/> <source>Cannot Find GpgConf</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/core/GpgCoreInit.cpp" line="431"/> + <location filename="../../../../src/core/GpgCoreInit.cpp" line="481"/> <source>Cannot Find GnuPG</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/core/GpgCoreInit.cpp" line="406"/> + <location filename="../../../../src/core/GpgCoreInit.cpp" line="456"/> <source>Cannot get Infos from GpgConf</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/core/GpgCoreInit.cpp" line="446"/> + <location filename="../../../../src/core/GpgCoreInit.cpp" line="496"/> <source>Cannot Find Default Home Path</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/core/GpgCoreInit.cpp" line="472"/> + <location filename="../../../../src/core/GpgCoreInit.cpp" line="522"/> <source>GpgME Initiation Failed</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/core/GpgCoreInit.cpp" line="527"/> + <location filename="../../../../src/core/GpgCoreInit.cpp" line="577"/> <source>No valid Key Database</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/core/GpgCoreInit.cpp" line="556"/> + <location filename="../../../../src/core/GpgCoreInit.cpp" line="607"/> <source>GpgME Default Context Initiation Failed</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../src/core/GpgCoreInit.cpp" line="567"/> + <location filename="../../../../src/core/GpgCoreInit.cpp" line="623"/> <source>Gpg Default Key Database Initiation Failed</source> <translation type="unfinished"></translation> </message> diff --git a/src/core/GpgCoreInit.cpp b/src/core/GpgCoreInit.cpp index b544d071..561c3e24 100644 --- a/src/core/GpgCoreInit.cpp +++ b/src/core/GpgCoreInit.cpp @@ -225,17 +225,17 @@ auto InitGpgME() -> bool { "core", "gpgme.ctx.gnupg_version", QString{}); if (!has_gpgconf) { - FLOG_E() << "cannot get gpgconf backend engine, abort..."; + LOG_E() << "cannot get gpgconf backend engine, abort..."; return false; } if (!has_openpgp) { - FLOG_E() << "cannot get openpgp backend engine, abort..."; + LOG_E() << "cannot get openpgp backend engine, abort..."; return false; } if (!has_cms) { - FLOG_E() << "cannot get cms backend engine, abort..."; + LOG_E() << "cannot get cms backend engine, abort..."; return false; } @@ -387,6 +387,56 @@ auto DecideGnuPGPath(const QString& default_gnupg_path) -> QString { return default_gnupg_path; } +void EnsureGpgAgentConfHasPinentry(GpgContext& ctx) { + auto pinentry_path = DecidePinentry(); + if (pinentry_path.isEmpty()) { + LOG_W() << "no suitable pinentry found."; + return; + } + + QDir gnupg_dir(ctx.HomeDirectory()); + if (!gnupg_dir.exists()) { + gnupg_dir.mkpath("."); + } + + QString config_path = gnupg_dir.filePath("gpg-agent.conf"); + QFile config_file(config_path); + QStringList lines; + + LOG_D() << "checking pinentry config at:" << gnupg_dir; + + bool has_pinentry_line = false; + if (config_file.exists()) { + if (config_file.open(QIODevice::ReadOnly | QIODevice::Text)) { + QTextStream in(&config_file); + while (!in.atEnd()) { + QString line = in.readLine(); + if (line.trimmed().startsWith("pinentry-program")) { + has_pinentry_line = true; + } + lines.append(line); + } + config_file.close(); + } + } + + if (!has_pinentry_line) { + lines.append(QString("pinentry-program %1").arg(pinentry_path)); + if (config_file.open(QIODevice::WriteOnly | QIODevice::Text)) { + QTextStream out(&config_file); + for (const QString& line : lines) { + out << line << '\n'; + } + config_file.close(); + LOG_D() << "updated gpg-agent.conf with pinentry:" << pinentry_path; + } else { + LOG_W() << "failed to write to gpg-agent.conf"; + } + } else { + LOG_D() << "gpg-agent.conf already contains pinentry-program"; + } +} + auto InitBasicPath() -> bool { auto default_gpgconf_path = Module::RetrieveRTValueTypedOrDefault<>( "core", "gpgme.ctx.gpgconf_path", QString{}); @@ -520,8 +570,8 @@ auto InitGpgFrontendCore(CoreInitArgs args) -> int { assert(!key_dbs.isEmpty()); if (key_dbs.isEmpty()) { - FLOG_E() << "Cannot find any valid key database!" - << "GpgFrontend cannot start under this situation!"; + LOG_E() << "Cannot find any valid key database!" + << "GpgFrontend cannot start under this situation!"; Module::UpsertRTValue("core", "env.state.ctx", -1); CoreSignalStation::GetInstance()->SignalBadGnupgEnv( QCoreApplication::tr("No valid Key Database")); @@ -548,20 +598,26 @@ auto InitGpgFrontendCore(CoreInitArgs args) -> int { return ConvertToChannelObjectPtr<>(SecureCreateUniqueObject<GpgContext>( args, kGpgFrontendDefaultChannel)); }); + if (!default_ctx.Good()) { - FLOG_E() << "Init GpgME Default Context failed!" - << "GpgFrontend cannot start under this situation!"; + LOG_E() << "Init GpgME Default Context failed!" + << "GpgFrontend cannot start under this situation!"; Module::UpsertRTValue("core", "env.state.ctx", -1); CoreSignalStation::GetInstance()->SignalBadGnupgEnv( QCoreApplication::tr("GpgME Default Context Initiation Failed")); return -1; } +#if !(defined(_WIN32) || defined(WIN32)) + // auto config pinentry-program + EnsureGpgAgentConfHasPinentry(default_ctx); +#endif + Module::UpsertRTValue("core", "env.state.ctx", 1); if (!GpgKeyGetter::GetInstance(kGpgFrontendDefaultChannel).FlushKeyCache()) { - FLOG_E() << "Init GpgME Default Key Database failed!" - << "GpgFrontend cannot start under this situation!"; + LOG_E() << "Init GpgME Default Key Database failed!" + << "GpgFrontend cannot start under this situation!"; Module::UpsertRTValue("core", "env.state.ctx", -1); CoreSignalStation::GetInstance()->SignalBadGnupgEnv( QCoreApplication::tr("Gpg Default Key Database Initiation Failed")); @@ -602,13 +658,21 @@ auto InitGpgFrontendCore(CoreInitArgs args) -> int { }); if (!ctx.Good()) { - FLOG_E() << "gpgme context init failed, index:" << channel_index; + LOG_E() << "gpgme context init failed, index:" << channel_index; continue; } +#if defined(__linux__) + EnsureGpgAgentConfHasPinentry(ctx); +#endif + +#if defined(__APPLE__) && defined(__MACH__) + EnsureGpgAgentConfHasPinentry(ctx); +#endif + if (!GpgKeyGetter::GetInstance(ctx.GetChannel()).FlushKeyCache()) { - FLOG_E() << "gpgme context init key cache failed, index:" - << channel_index; + LOG_E() << "gpgme context init key cache failed, index:" + << channel_index; continue; } @@ -631,9 +695,16 @@ auto InitGpgFrontendCore(CoreInitArgs args) -> int { .GetTaskRunner(Thread::TaskRunnerGetter::kTaskRunnerType_Default) ->PostTask(task); - if (!args.unit_test_mode && restart_all_gnupg_components_on_start) { - GpgAdvancedOperator::RestartGpgComponents(nullptr); + const auto size = GpgContext::GetAllChannelId().size(); + for (auto i = 0; i < size; i++) { + if (!args.unit_test_mode && restart_all_gnupg_components_on_start) { + assert(GpgAdvancedOperator::GetInstance().RestartGpgComponents()); + } else { + // ensure gpg-agent is running + assert(GpgAdvancedOperator::GetInstance().LaunchAllGpgComponents()); + } } + return 0; } diff --git a/src/core/function/gpg/GpgAdvancedOperator.cpp b/src/core/function/gpg/GpgAdvancedOperator.cpp index 492297c6..c9af8b59 100644 --- a/src/core/function/gpg/GpgAdvancedOperator.cpp +++ b/src/core/function/gpg/GpgAdvancedOperator.cpp @@ -33,91 +33,38 @@ #include "GpgAdvancedOperator.h" #include "core/function/gpg/GpgCommandExecutor.h" -#include "core/module/ModuleManager.h" -#include "core/utils/GpgUtils.h" - namespace GpgFrontend { -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."); - if (cb) cb(-1, TransferParams()); - 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); - - // kill default gpg-agent - key_dbs.push_back({}); - - 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 = !target_home_dir.isEmpty() - ? QStringList{"--homedir", target_home_dir} - : QStringList{}; - 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()); - } - }}); - } -} - -void GpgAdvancedOperator::ClearGpgPasswordCache(OperationCallback cb) { - ExecuteGpgCommand("Clear GPG Password Cache", {"--reload", "gpg-agent"}, - std::move(cb)); +auto GpgAdvancedOperator::ClearGpgPasswordCache() -> bool { + auto [ret, out] = exec_.GpgConfExecuteSync({{"--reload", "gpg-agent"}}); + return ret == 0; } -void GpgAdvancedOperator::ReloadGpgComponents(OperationCallback cb) { - const auto gpgconf_path = Module::RetrieveRTValueTypedOrDefault<>( - "core", "gpgme.ctx.gpgconf_path", QString{}); - ExecuteGpgCommand("Reload GPG Components", {"--reload", "all"}, - std::move(cb)); +auto GpgAdvancedOperator::ReloadAllGpgComponents() -> bool { + auto [ret, out] = exec_.GpgConfExecuteSync({{"--reload", "all"}}); + return ret == 0; } -void GpgAdvancedOperator::KillAllGpgComponents(OperationCallback cb) { - ExecuteGpgCommand("Kill All GPG Components", {"--kill", "all"}, - std::move(cb)); +auto GpgAdvancedOperator::KillAllGpgComponents() -> bool { + auto [ret, out] = exec_.GpgConfExecuteSync({{"--kill", "all"}}); + return ret == 0; } -void GpgAdvancedOperator::ResetConfigures(OperationCallback cb) { - ExecuteGpgCommand("Reset Gnupg Configures", {"--apply-defaults"}, - std::move(cb)); +auto GpgAdvancedOperator::ResetConfigures() -> bool { + auto [ret, out] = exec_.GpgConfExecuteSync({{"--apply-defaults"}}); + return ret == 0; } -void GpgAdvancedOperator::LaunchGpgComponents(OperationCallback cb) { - ExecuteGpgCommand("Launch All GPG Components", {"--launch", "all"}, - std::move(cb)); +auto GpgAdvancedOperator::LaunchAllGpgComponents() -> bool { + auto [ret, out] = exec_.GpgConfExecuteSync({{"--launch", "all"}}); + return ret == 0; } -void GpgAdvancedOperator::RestartGpgComponents(OperationCallback cb) { - KillAllGpgComponents(nullptr); - LaunchGpgComponents(std::move(cb)); +auto GpgAdvancedOperator::RestartGpgComponents() -> bool { + if (!KillAllGpgComponents()) return false; + return LaunchAllGpgComponents(); } +GpgAdvancedOperator::GpgAdvancedOperator(int channel) + : SingletonFunctionObject<GpgAdvancedOperator>(channel) {} } // 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 57279adb..1099c3b3 100644 --- a/src/core/function/gpg/GpgAdvancedOperator.h +++ b/src/core/function/gpg/GpgAdvancedOperator.h @@ -32,19 +32,29 @@ #pragma once +#include "core/function/basic/GpgFunctionObject.h" +#include "core/function/gpg/GpgCommandExecutor.h" #include "core/model/DataObject.h" namespace GpgFrontend { -class GPGFRONTEND_CORE_EXPORT GpgAdvancedOperator { +class GPGFRONTEND_CORE_EXPORT GpgAdvancedOperator + : public SingletonFunctionObject<GpgAdvancedOperator> { public: /** + * @brief Construct a new Gpg Advanced Operator object + * + * @param channel + */ + explicit GpgAdvancedOperator(int channel); + + /** * @brief * * @return true * @return false */ - static void ClearGpgPasswordCache(OperationCallback); + auto ClearGpgPasswordCache() -> bool; /** * @brief @@ -52,7 +62,7 @@ class GPGFRONTEND_CORE_EXPORT GpgAdvancedOperator { * @return true * @return false */ - static void ReloadGpgComponents(OperationCallback); + auto ReloadAllGpgComponents() -> bool; /** * @brief @@ -60,7 +70,7 @@ class GPGFRONTEND_CORE_EXPORT GpgAdvancedOperator { * @return true * @return false */ - static void RestartGpgComponents(OperationCallback); + auto RestartGpgComponents() -> bool; /** * @brief @@ -68,7 +78,7 @@ class GPGFRONTEND_CORE_EXPORT GpgAdvancedOperator { * @return true * @return false */ - static void ResetConfigures(OperationCallback); + auto ResetConfigures() -> bool; /** * @brief @@ -76,13 +86,17 @@ class GPGFRONTEND_CORE_EXPORT GpgAdvancedOperator { * @return true * @return false */ - static void LaunchGpgComponents(OperationCallback); + auto LaunchAllGpgComponents() -> bool; /** * @brief * */ - static void KillAllGpgComponents(OperationCallback); + auto KillAllGpgComponents() -> bool; + + private: + GpgCommandExecutor& exec_ = + GpgCommandExecutor::GetInstance(SingletonFunctionObject::GetChannel()); }; } // namespace GpgFrontend diff --git a/src/core/function/gpg/GpgAssuanHelper.cpp b/src/core/function/gpg/GpgAssuanHelper.cpp index 0d1b9cdc..128ecaa9 100644 --- a/src/core/function/gpg/GpgAssuanHelper.cpp +++ b/src/core/function/gpg/GpgAssuanHelper.cpp @@ -44,14 +44,14 @@ GpgAssuanHelper::~GpgAssuanHelper() { } } -auto GpgAssuanHelper::ConnectToSocket(GpgComponentType type) -> bool { - if (assuan_ctx_.contains(type)) return true; +auto GpgAssuanHelper::ConnectToSocket(GpgComponentType type) -> GpgError { + if (assuan_ctx_.contains(type)) return GPG_ERR_NO_ERROR; auto socket_path = ctx_.ComponentDirectory(type); if (socket_path.isEmpty()) { LOG_W() << "socket path of component: " << component_type_to_q_string(type) << " is empty"; - return false; + return GPG_ERR_ENOPKG; } QFileInfo info(socket_path); @@ -65,7 +65,7 @@ auto GpgAssuanHelper::ConnectToSocket(GpgComponentType type) -> bool { if (!info.exists()) { LOG_W() << "socket path is still not exists: " << socket_path << "abort..."; - return false; + return GPG_ERR_ENOTSOCK; } } @@ -76,7 +76,7 @@ auto GpgAssuanHelper::ConnectToSocket(GpgComponentType type) -> bool { ASSUAN_INVALID_PID, 0); if (err != GPG_ERR_NO_ERROR) { LOG_W() << "failed to connect to socket:" << CheckGpgError(err); - return false; + return err; } LOG_D() << "connected to socket by assuan protocol: " @@ -86,21 +86,23 @@ auto GpgAssuanHelper::ConnectToSocket(GpgComponentType type) -> bool { nullptr, nullptr, nullptr, nullptr); if (err != GPG_ERR_NO_ERROR) { LOG_W() << "failed to test assuan connection:" << CheckGpgError(err); - return false; + return err; } assuan_ctx_[type] = a_ctx; - return true; + return err; } auto GpgAssuanHelper::SendCommand(GpgComponentType type, const QString& command, DataCallback data_cb, InqueryCallback inquery_cb, - StatusCallback status_cb) -> bool { + StatusCallback status_cb) -> GpgError { if (!assuan_ctx_.contains(type)) { LOG_W() << "haven't connect to: " << component_type_to_q_string(type) << ", trying to make a connection"; - if (!ConnectToSocket(type)) return false; + + auto err = CheckGpgError(ConnectToSocket(type)); + if (err != GPG_ERR_NO_ERROR) return err; } auto context = QSharedPointer<AssuanCallbackContext>::create(); @@ -122,15 +124,15 @@ auto GpgAssuanHelper::SendCommand(GpgComponentType type, const QString& command, if (CheckGpgError(err) == 32877) { assuan_ctx_.remove(type); } - return false; + return err; } - return true; + return err; } auto GpgAssuanHelper::SendStatusCommand(GpgComponentType type, const QString& command) - -> std::tuple<bool, QStringList> { + -> std::tuple<GpgError, QStringList> { GpgAssuanHelper::DataCallback d_cb = [&](const QSharedPointer<GpgAssuanHelper::AssuanCallbackContext>& ctx) -> gpg_error_t { @@ -147,29 +149,29 @@ auto GpgAssuanHelper::SendStatusCommand(GpgComponentType type, return 0; }; - QStringList status_lines; + QStringList lines; GpgAssuanHelper::StatusCallback s_cb = [&](const QSharedPointer<GpgAssuanHelper::AssuanCallbackContext>& ctx) -> gpg_error_t { LOG_D() << "status callback of command: " << command << ": " << ctx->status; - status_lines.append(ctx->status); + lines.append(ctx->status); return 0; }; auto ret = SendCommand(type, command, d_cb, i_cb, s_cb); - return {ret, status_lines}; + return {ret, lines}; } auto GpgAssuanHelper::SendDataCommand(GpgComponentType type, const QString& command) -> std::tuple<bool, QStringList> { - QStringList data_lines; + QStringList lines; GpgAssuanHelper::DataCallback d_cb = [&](const QSharedPointer<GpgAssuanHelper::AssuanCallbackContext>& ctx) -> gpg_error_t { LOG_D() << "data callback of command " << command << ": " << ctx->buffer; - data_lines.push_back(QString::fromUtf8(ctx->buffer)); + lines.push_back(QString::fromUtf8(ctx->buffer)); return 0; }; @@ -192,7 +194,7 @@ auto GpgAssuanHelper::SendDataCommand(GpgComponentType type, }; auto ret = SendCommand(type, command, d_cb, i_cb, s_cb); - return {ret, data_lines}; + return {ret, lines}; } auto GpgAssuanHelper::default_data_callback(void* opaque, const void* buffer, diff --git a/src/core/function/gpg/GpgAssuanHelper.h b/src/core/function/gpg/GpgAssuanHelper.h index 294d33e0..7f3854b6 100644 --- a/src/core/function/gpg/GpgAssuanHelper.h +++ b/src/core/function/gpg/GpgAssuanHelper.h @@ -81,7 +81,7 @@ class GPGFRONTEND_CORE_EXPORT GpgAssuanHelper * @return true * @return false */ - auto ConnectToSocket(GpgComponentType) -> bool; + auto ConnectToSocket(GpgComponentType) -> GpgError; /** * @brief @@ -96,7 +96,7 @@ class GPGFRONTEND_CORE_EXPORT GpgAssuanHelper */ auto SendCommand(GpgComponentType type, const QString& command, DataCallback data_cb, InqueryCallback inquery_cb, - StatusCallback status_cb) -> bool; + StatusCallback status_cb) -> GpgError; /** * @brief @@ -106,7 +106,7 @@ class GPGFRONTEND_CORE_EXPORT GpgAssuanHelper * @return std::tuple<bool, QStringList> */ auto SendStatusCommand(GpgComponentType type, const QString& command) - -> std::tuple<bool, QStringList>; + -> std::tuple<GpgError, QStringList>; /** * @brief diff --git a/src/core/function/gpg/GpgAutomatonHandler.cpp b/src/core/function/gpg/GpgAutomatonHandler.cpp index 656bb018..afa55299 100644 --- a/src/core/function/gpg/GpgAutomatonHandler.cpp +++ b/src/core/function/gpg/GpgAutomatonHandler.cpp @@ -39,65 +39,61 @@ GpgAutomatonHandler::GpgAutomatonHandler(int channel) auto InteratorCbFunc(void* handle, const char* status, const char* args, int fd) -> gpgme_error_t { - auto* handle_struct = static_cast<AutomatonHandelStruct*>(handle); - QString status_s = status; - QString args_s = args; + auto* handel = static_cast<AutomatonHandelStruct*>(handle); + const auto status_s = QString::fromUtf8(status); + const auto args_s = QString::fromUtf8(args); if (status_s == "KEY_CONSIDERED") { auto tokens = QString(args).split(' '); - if (handle_struct->KeyFpr().isEmpty()) return 0; + if (handel->KeyFpr().isEmpty()) return GPG_ERR_NO_ERROR; - if (tokens.empty() || tokens[0] != handle_struct->KeyFpr()) { - LOG_W() << "handle struct key fpr: " << handle_struct->KeyFpr() + if (tokens.empty() || tokens[0] != handel->KeyFpr()) { + LOG_W() << "handle struct key fpr: " << handel->KeyFpr() << "mismatch token: " << tokens[0] << ", exit..."; - + handel->SetSuccess(false); return -1; } - return 0; + return GPG_ERR_NO_ERROR; } if (status_s == "CARDCTRL") { auto tokens = QString(args).split(' '); - if (handle_struct->SerialNumber().isEmpty()) return 0; + if (handel->SerialNumber().isEmpty()) return GPG_ERR_NO_ERROR; - if (tokens.empty() || tokens[0] != handle_struct->SerialNumber()) { - LOG_W() << "handle struct serial number: " - << handle_struct->SerialNumber() + if (tokens.empty() || tokens[0] != handel->SerialNumber()) { + LOG_W() << "handle struct serial number: " << handel->SerialNumber() << "mismatch token: " << tokens[0] << ", exit..."; - + handel->SetSuccess(false); return -1; } - return 0; + return GPG_ERR_NO_ERROR; } if (status_s == "GOT_IT" || status_s.isEmpty()) { FLOG_D("gpg reply is GOT_IT, continue..."); - return 0; + return GPG_ERR_NO_ERROR; } - LOG_D() << "current state" << handle_struct->CurrentStatus() + LOG_D() << "current state" << handel->CurrentStatus() << "gpg status: " << status_s << ", args: " << args_s; - handle_struct->SetPromptStatus(status_s, args_s); + handel->SetPromptStatus(status_s, args_s); - AutomatonState next_state = handle_struct->NextState(status_s, args_s); + AutomatonState next_state = handel->NextState(status_s, args_s); if (next_state == GpgAutomatonHandler::kAS_ERROR) { - FLOG_D("handle struct next state caught error, abort..."); + FLOG_D("handel next state caught error, abort..."); + handel->SetSuccess(false); return -1; } - LOG_D() << "next state" << next_state; - - if (next_state == GpgAutomatonHandler::kAS_SAVE) { - handle_struct->SetSuccess(true); - } + LOG_D() << "next state:" << next_state; // set state and preform action - handle_struct->SetStatus(next_state); - GpgAutomatonHandler::Command cmd = handle_struct->Action(); + handel->SetStatus(next_state); + GpgAutomatonHandler::Command cmd = handel->Action(); LOG_D() << "next action, cmd:" << cmd; @@ -110,32 +106,33 @@ auto InteratorCbFunc(void* handle, const char* status, const char* args, return GPG_ERR_FALSE; } - return 0; + return GPG_ERR_NO_ERROR; } auto DoInteractImpl(GpgContext& ctx_, const GpgKeyPtr& key, bool card_edit, const QString& id, AutomatonNextStateHandler next_state_handler, - AutomatonActionHandler action_handler, int flags) -> bool { + AutomatonActionHandler action_handler, + int flags) -> std::tuple<GpgError, bool> { gpgme_key_t p_key = key == nullptr ? nullptr : static_cast<gpgme_key_t>(*key); - AutomatonHandelStruct handel_struct(card_edit, id); - handel_struct.SetHandler(std::move(next_state_handler), - std::move(action_handler)); + AutomatonHandelStruct handel(card_edit, id); + handel.SetHandler(std::move(next_state_handler), std::move(action_handler)); GpgData data_out; auto err = gpgme_op_interact(ctx_.DefaultContext(), p_key, flags, InteratorCbFunc, - static_cast<void*>(&handel_struct), data_out); - return CheckGpgError(err) == GPG_ERR_NO_ERROR && handel_struct.Success(); + static_cast<void*>(&handel), data_out); + return {err, handel.Success()}; } auto GpgAutomatonHandler::DoInteract( const GpgKeyPtr& key, AutomatonNextStateHandler next_state_handler, - AutomatonActionHandler action_handler, int flags) -> bool { + AutomatonActionHandler action_handler, + int flags) -> std::tuple<GpgError, bool> { assert(key != nullptr); - if (key == nullptr) return false; + if (key == nullptr) return {GPG_ERR_USER_1, false}; return DoInteractImpl(ctx_, key, false, key->ID(), std::move(next_state_handler), std::move(action_handler), flags); @@ -143,7 +140,7 @@ auto GpgAutomatonHandler::DoInteract( auto GpgAutomatonHandler::DoCardInteract( const QString& serial_number, AutomatonNextStateHandler next_state_handler, - AutomatonActionHandler action_handler) -> bool { + AutomatonActionHandler action_handler) -> std::tuple<GpgError, bool> { return DoInteractImpl(ctx_, nullptr, true, serial_number, std::move(next_state_handler), std::move(action_handler), GPGME_INTERACT_CARD); diff --git a/src/core/function/gpg/GpgAutomatonHandler.h b/src/core/function/gpg/GpgAutomatonHandler.h index 4363cf30..34c23455 100644 --- a/src/core/function/gpg/GpgAutomatonHandler.h +++ b/src/core/function/gpg/GpgAutomatonHandler.h @@ -28,14 +28,13 @@ #pragma once -#include "core/GpgFrontendCore.h" #include "core/function/basic/GpgFunctionObject.h" #include "core/function/gpg/GpgContext.h" #include "core/typedef/GpgTypedef.h" namespace GpgFrontend { -class GpgAutomatonHandler +class GPGFRONTEND_CORE_EXPORT GpgAutomatonHandler : public SingletonFunctionObject<GpgAutomatonHandler> { public: using Command = QString; @@ -83,7 +82,7 @@ class GpgAutomatonHandler AutomatonState current_state_ = kAS_START; AutomatonNextStateHandler next_state_handler_; AutomatonActionHandler action_handler_; - bool success_ = false; + bool success_ = true; bool card_edit_; QString id_; QString prompt_status_; @@ -110,7 +109,8 @@ class GpgAutomatonHandler */ auto DoInteract(const GpgKeyPtr& key, AutomatonNextStateHandler next_state_handler, - AutomatonActionHandler action_handler, int flags = 0) -> bool; + AutomatonActionHandler action_handler, + int flags = 0) -> std::tuple<GpgError, bool>; /** * @brief @@ -122,7 +122,8 @@ class GpgAutomatonHandler */ auto DoCardInteract(const QString& serial_number, AutomatonNextStateHandler next_state_handler, - AutomatonActionHandler action_handler) -> bool; + AutomatonActionHandler action_handler) + -> std::tuple<GpgError, bool>; private: GpgContext& ctx_ = diff --git a/src/core/function/gpg/GpgBasicOperator.cpp b/src/core/function/gpg/GpgBasicOperator.cpp index 2f624b60..bdb687bc 100644 --- a/src/core/function/gpg/GpgBasicOperator.cpp +++ b/src/core/function/gpg/GpgBasicOperator.cpp @@ -88,39 +88,43 @@ void GpgBasicOperator::Encrypt(const GpgAbstractKeyPtrList& keys, const GFBuffer& in_buffer, bool ascii, const GpgOperationCallback& cb) { RunGpgOperaAsync( + GetChannel(), [=](const DataObjectPtr& data_object) { return EncryptImpl(ctx_, keys, in_buffer, ascii, data_object); }, - cb, "gpgme_op_encrypt", "2.1.0"); + cb, "gpgme_op_encrypt", "2.2.0"); } auto GpgBasicOperator::EncryptSync(const GpgAbstractKeyPtrList& keys, const GFBuffer& in_buffer, bool ascii) -> std::tuple<GpgError, DataObjectPtr> { return RunGpgOperaSync( + GetChannel(), [=](const DataObjectPtr& data_object) { return EncryptImpl(ctx_, keys, in_buffer, ascii, data_object); }, - "gpgme_op_encrypt", "2.1.0"); + "gpgme_op_encrypt", "2.2.0"); } void GpgBasicOperator::EncryptSymmetric(const GFBuffer& in_buffer, bool ascii, const GpgOperationCallback& cb) { RunGpgOperaAsync( + GetChannel(), [=](const DataObjectPtr& data_object) { return EncryptImpl(ctx_, {}, in_buffer, ascii, data_object); }, - cb, "gpgme_op_encrypt_symmetric", "2.1.0"); + cb, "gpgme_op_encrypt_symmetric", "2.2.0"); } auto GpgBasicOperator::EncryptSymmetricSync(const GFBuffer& in_buffer, bool ascii) -> std::tuple<GpgError, DataObjectPtr> { return RunGpgOperaSync( + GetChannel(), [=](const DataObjectPtr& data_object) { return EncryptImpl(ctx_, {}, in_buffer, ascii, data_object); }, - "gpgme_op_encrypt_symmetric", "2.1.0"); + "gpgme_op_encrypt_symmetric", "2.2.0"); } auto DecryptImpl(GpgContext& ctx_, const GFBuffer& in_buffer, @@ -141,19 +145,21 @@ auto DecryptImpl(GpgContext& ctx_, const GFBuffer& in_buffer, void GpgBasicOperator::Decrypt(const GFBuffer& in_buffer, const GpgOperationCallback& cb) { RunGpgOperaAsync( + GetChannel(), [=](const DataObjectPtr& data_object) { return DecryptImpl(ctx_, in_buffer, data_object); }, - cb, "gpgme_op_decrypt", "2.1.0"); + cb, "gpgme_op_decrypt", "2.2.0"); } auto GpgBasicOperator::DecryptSync(const GFBuffer& in_buffer) -> std::tuple<GpgError, DataObjectPtr> { return RunGpgOperaSync( + GetChannel(), [=](const DataObjectPtr& data_object) { return DecryptImpl(ctx_, in_buffer, data_object); }, - "gpgme_op_decrypt", "2.1.0"); + "gpgme_op_decrypt", "2.2.0"); } auto VerifyImpl(GpgContext& ctx_, const GFBuffer& in_buffer, @@ -185,20 +191,22 @@ void GpgBasicOperator::Verify(const GFBuffer& in_buffer, const GFBuffer& sig_buffer, const GpgOperationCallback& cb) { RunGpgOperaAsync( + GetChannel(), [=](const DataObjectPtr& data_object) -> GpgError { return VerifyImpl(ctx_, in_buffer, sig_buffer, data_object); }, - cb, "gpgme_op_verify", "2.1.0"); + cb, "gpgme_op_verify", "2.2.0"); } auto GpgBasicOperator::VerifySync(const GFBuffer& in_buffer, const GFBuffer& sig_buffer) -> std::tuple<GpgError, DataObjectPtr> { return RunGpgOperaSync( + GetChannel(), [=](const DataObjectPtr& data_object) { return VerifyImpl(ctx_, in_buffer, sig_buffer, data_object); }, - "gpgme_op_verify", "2.1.0"); + "gpgme_op_verify", "2.2.0"); } auto SignImpl(GpgContext& ctx_, const GpgAbstractKeyPtrList& signers, @@ -228,20 +236,22 @@ void GpgBasicOperator::Sign(const GpgAbstractKeyPtrList& signers, const GFBuffer& in_buffer, GpgSignMode mode, bool ascii, const GpgOperationCallback& cb) { RunGpgOperaAsync( + GetChannel(), [=](const DataObjectPtr& data_object) { return SignImpl(ctx_, signers, in_buffer, mode, ascii, data_object); }, - cb, "gpgme_op_sign", "2.1.0"); + cb, "gpgme_op_sign", "2.2.0"); } auto GpgBasicOperator::SignSync( const GpgAbstractKeyPtrList& signers, const GFBuffer& in_buffer, GpgSignMode mode, bool ascii) -> std::tuple<GpgError, DataObjectPtr> { return RunGpgOperaSync( + GetChannel(), [=](const DataObjectPtr& data_object) { return SignImpl(ctx_, signers, in_buffer, mode, ascii, data_object); }, - "gpgme_op_sign", "2.1.0"); + "gpgme_op_sign", "2.2.0"); } auto DecryptVerifyImpl(GpgContext& ctx_, const GFBuffer& in_buffer, @@ -266,19 +276,21 @@ auto DecryptVerifyImpl(GpgContext& ctx_, const GFBuffer& in_buffer, void GpgBasicOperator::DecryptVerify(const GFBuffer& in_buffer, const GpgOperationCallback& cb) { RunGpgOperaAsync( + GetChannel(), [=](const DataObjectPtr& data_object) { return DecryptVerifyImpl(ctx_, in_buffer, data_object); }, - cb, "gpgme_op_decrypt_verify", "2.1.0"); + cb, "gpgme_op_decrypt_verify", "2.2.0"); } auto GpgBasicOperator::DecryptVerifySync(const GFBuffer& in_buffer) -> std::tuple<GpgError, DataObjectPtr> { return RunGpgOperaSync( + GetChannel(), [=](const DataObjectPtr& data_object) -> GpgError { return DecryptVerifyImpl(ctx_, in_buffer, data_object); }, - "gpgme_op_decrypt_verify", "2.1.0"); + "gpgme_op_decrypt_verify", "2.2.0"); } auto EncryptSignImpl(GpgContext& ctx_, const GpgAbstractKeyPtrList& keys, @@ -315,11 +327,12 @@ void GpgBasicOperator::EncryptSign(const GpgAbstractKeyPtrList& keys, const GFBuffer& in_buffer, bool ascii, const GpgOperationCallback& cb) { RunGpgOperaAsync( + GetChannel(), [=](const DataObjectPtr& data_object) -> GpgError { return EncryptSignImpl(ctx_, keys, signers, in_buffer, ascii, data_object); }, - cb, "gpgme_op_encrypt_sign", "2.1.0"); + cb, "gpgme_op_encrypt_sign", "2.2.0"); } auto GpgBasicOperator::EncryptSignSync(const GpgAbstractKeyPtrList& keys, @@ -327,11 +340,12 @@ auto GpgBasicOperator::EncryptSignSync(const GpgAbstractKeyPtrList& keys, const GFBuffer& in_buffer, bool ascii) -> std::tuple<GpgError, DataObjectPtr> { return RunGpgOperaSync( + GetChannel(), [=](const DataObjectPtr& data_object) -> GpgError { return EncryptSignImpl(ctx_, keys, signers, in_buffer, ascii, data_object); }, - "gpgme_op_encrypt_sign", "2.1.0"); + "gpgme_op_encrypt_sign", "2.2.0"); } void GpgBasicOperator::SetSigners(const GpgAbstractKeyPtrList& signers, @@ -346,7 +360,7 @@ auto GpgBasicOperator::GetSigners(bool ascii) -> KeyArgsList { 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(key)); } return signers; } diff --git a/src/core/function/gpg/GpgCommandExecutor.cpp b/src/core/function/gpg/GpgCommandExecutor.cpp index dd8a500e..72988a55 100644 --- a/src/core/function/gpg/GpgCommandExecutor.cpp +++ b/src/core/function/gpg/GpgCommandExecutor.cpp @@ -41,26 +41,25 @@ auto BuildTaskFromExecCtx(const GpgCommandExecutor::ExecuteContext &context) -> Thread::Task * { const auto &cmd = context.cmd; const auto &arguments = context.arguments; - const auto &interact_function = context.int_func; - const auto &cmd_executor_callback = context.cb_func; + const auto &int_func = context.int_func; + const auto &cb = context.cb_func; - Thread::Task::TaskCallback result_callback = - [cmd](int /*rtn*/, const DataObjectPtr &data_object) { - LOG_D() << "data object args count of cmd executor result callback:" - << data_object->GetObjectSize(); + Thread::Task::TaskCallback result_callback = [cmd](int /*rtn*/, + const DataObjectPtr &obj) { + LOG_D() << "data object args count of cmd executor result callback:" + << obj->GetObjectSize(); - if (!data_object->Check<int, QString, GpgCommandExecutorCallback>()) { - FLOG_W("data object checking failed"); - return; - } + if (!obj->Check<int, QByteArray, GpgCommandExecutorCallback>()) { + FLOG_W("data object checking failed"); + return; + } - auto exit_code = ExtractParams<int>(data_object, 0); - auto process_stdout = ExtractParams<QString>(data_object, 1); - auto callback = - ExtractParams<GpgCommandExecutorCallback>(data_object, 2); + auto code = ExtractParams<int>(obj, 0); + auto out = ExtractParams<QByteArray>(obj, 1); + auto cb = ExtractParams<GpgCommandExecutorCallback>(obj, 2); - callback(exit_code, process_stdout, {}); - }; + cb(code, out, {}); + }; Thread::Task::TaskRunnable runner = [](const DataObjectPtr &data_object) -> int { @@ -82,71 +81,67 @@ auto BuildTaskFromExecCtx(const GpgCommandExecutor::ExecuteContext &context) const QString joined_argument = arguments.join(" "); // create process - auto *cmd_process = new QProcess(); + auto *pcs = new QProcess(); // move to current thread // - cmd_process->moveToThread(QThread::currentThread()); + pcs->moveToThread(QThread::currentThread()); // set process channel mode // this is to make sure we can get all output from stdout and stderr - cmd_process->setProcessChannelMode(QProcess::MergedChannels); - cmd_process->setProgram(cmd); + pcs->setProcessChannelMode(QProcess::MergedChannels); + pcs->setProgram(cmd); // set arguments QStringList q_arguments; for (const auto &argument : arguments) { q_arguments.append(argument); } - cmd_process->setArguments(q_arguments); + pcs->setArguments(q_arguments); + QObject::connect(pcs, &QProcess::started, [cmd, joined_argument]() -> void { + LOG_D() << "\n== Process Execute Started ==\nCommand: " << cmd + << "\nArguments: " << joined_argument + << " \n========================"; + }); + QObject::connect(pcs, &QProcess::readyReadStandardOutput, + [interact_func, pcs]() { interact_func(pcs); }); QObject::connect( - cmd_process, &QProcess::started, [cmd, joined_argument]() -> void { - LOG_D() << "\n== Process Execute Started ==\nCommand: " << cmd - << "\nArguments: " << joined_argument - << " \n========================"; + pcs, &QProcess::errorOccurred, [=](QProcess::ProcessError error) { + LOG_W() << "caught error while executing command: " << cmd + << joined_argument << ", error:" << error; }); - QObject::connect( - cmd_process, &QProcess::readyReadStandardOutput, - [interact_func, cmd_process]() { interact_func(cmd_process); }); - QObject::connect(cmd_process, &QProcess::errorOccurred, - [=](QProcess::ProcessError error) { - LOG_W() - << "caught error while executing command: " << cmd - << joined_argument << ", error:" << error; - }); LOG_D() << "\n== Process Execute Ready ==\nCommand: " << cmd << "\nArguments: " << joined_argument << "\n========================"; - cmd_process->start(); - cmd_process->waitForFinished(); + pcs->start(); + pcs->waitForFinished(); - QString process_stdout = cmd_process->readAllStandardOutput(); - int exit_code = cmd_process->exitCode(); + auto out = pcs->readAllStandardOutput(); + auto code = pcs->exitCode(); LOG_D() << "\n==== Process Execution Summary ====\n" << "Command: " << cmd << "\n" << "Arguments: " << joined_argument << "\n" - << "Exit Code: " << exit_code << "\n" + << "Exit Code: " << code << "\n" << "---- Standard Output ----\n" - << process_stdout << "\n" + << out << "\n" << "==============================="; - cmd_process->close(); - cmd_process->deleteLater(); + pcs->close(); + pcs->deleteLater(); - data_object->Swap({exit_code, process_stdout, callback}); + data_object->Swap({code, out, callback}); return 0; }; return new Thread::Task( std::move(runner), QString("GpgCommamdExecutor(%1){%2}").arg(cmd).arg(arguments.join(' ')), - TransferParams(cmd, arguments, interact_function, cmd_executor_callback), - std::move(result_callback)); + TransferParams(cmd, arguments, int_func, cb), std::move(result_callback)); } -void GpgCommandExecutor::ExecuteSync(ExecuteContext context) { +void GpgCommandExecutor::ExecuteSync(const ExecuteContext &context) { Thread::Task *task = BuildTaskFromExecCtx(context); QPointer<Thread::Task> p_t = task; @@ -174,8 +169,9 @@ void GpgCommandExecutor::ExecuteSync(ExecuteContext context) { looper->deleteLater(); } -void GpgCommandExecutor::ExecuteConcurrentlyAsync(ExecuteContexts contexts) { - for (auto &context : contexts) { +void GpgCommandExecutor::ExecuteConcurrentlyAsync( + const ExecuteContexts &contexts) { + for (const auto &context : contexts) { Thread::Task *task = BuildTaskFromExecCtx(context); if (context.task_runner != nullptr) { @@ -189,12 +185,13 @@ void GpgCommandExecutor::ExecuteConcurrentlyAsync(ExecuteContexts contexts) { } } -void GpgCommandExecutor::ExecuteConcurrentlySync(ExecuteContexts contexts) { +void GpgCommandExecutor::ExecuteConcurrentlySync( + const ExecuteContexts &contexts) { QEventLoop looper; auto remaining_tasks = contexts.size(); Thread::TaskRunnerPtr target_task_runner = nullptr; - for (auto &context : contexts) { + for (const auto &context : contexts) { const auto &cmd = context.cmd; LOG_D() << "gpg concurrently called cmd: " << cmd; @@ -235,24 +232,30 @@ GpgCommandExecutor::ExecuteContext::ExecuteContext( int_func(std::move(int_func)), task_runner(std::move(task_runner)) {} +GpgCommandExecutor::ExecuteContext::ExecuteContext( + QStringList arguments, GpgCommandExecutorCallback callback, + Module::TaskRunnerPtr task_runner, GpgCommandExecutorInterator int_func) + : arguments(std::move(arguments)), + cb_func(std::move(callback)), + int_func(std::move(int_func)), + task_runner(std::move(task_runner)) {} + GpgCommandExecutor::GpgCommandExecutor(int channel) : GpgFrontend::SingletonFunctionObject<GpgCommandExecutor>(channel) {} -void GpgCommandExecutor::GpgExecuteSync(const ExecuteContext &context) { - const auto gpg_path = Module::RetrieveRTValueTypedOrDefault<>( - "core", "gpgme.ctx.app_path", QString{}); - - if (context.cmd.isEmpty() && gpg_path.isEmpty()) { +auto PrepareContext(const GpgContext &ctx_, const QString &path, + const GpgCommandExecutor::ExecuteContext &context) + -> std::tuple<bool, GpgCommandExecutor::ExecuteContext> { + if (context.cmd.isEmpty() && path.isEmpty()) { LOG_E() << "failed to execute gpg command, gpg binary path is empty."; - return; + return {false, {}}; } - LOG_D() << "got gpg binary path:" << gpg_path; - LOG_D() << "context channel:" << GetChannel() + LOG_D() << "got path:" << path << "context channel:" << ctx_.GetChannel() << "home path: " << ctx_.HomeDirectory(); - ExecuteContext ctx = { - context.cmd.isEmpty() ? gpg_path : context.cmd, + GpgCommandExecutor::ExecuteContext ctx = { + context.cmd.isEmpty() ? path : context.cmd, context.arguments, context.cb_func, context.task_runner, @@ -260,10 +263,71 @@ void GpgCommandExecutor::GpgExecuteSync(const ExecuteContext &context) { }; if (!ctx.arguments.contains("--homedir") && !ctx_.HomeDirectory().isEmpty()) { - ctx.arguments.append("--homedir"); - ctx.arguments.append(ctx_.HomeDirectory()); + ctx.arguments.prepend(QDir::toNativeSeparators((ctx_.HomeDirectory()))); + ctx.arguments.prepend("--homedir"); + } + + return {true, ctx}; +} + +auto PrepareExecuteSyncContext(const GpgContext &ctx_, const QString &path, + const GpgCommandExecutor::ExecuteContext + &context) -> std::tuple<int, QString> { + auto ctx = context; + + int pcs_exit_code; + QString pcs_stdout; + + // proxy + ctx.cb_func = [&](int exit_code, const QString &out, const QString &) { + pcs_exit_code = exit_code; + pcs_stdout = out; + }; + + auto [ret, ctx2] = PrepareContext(ctx_, path, ctx); + if (ret) { + GpgFrontend::GpgCommandExecutor::ExecuteSync(ctx2); + return {pcs_exit_code, pcs_stdout}; } + return {-1, "invalid context"}; +} + +void PrepareExecuteAsyncContext( + const GpgContext &ctx_, const QString &path, + const GpgCommandExecutor::ExecuteContext &context) { + auto [ret, ctx] = PrepareContext(ctx_, path, context); + GpgFrontend::GpgCommandExecutor::ExecuteConcurrentlyAsync({ctx}); +} + +auto GpgCommandExecutor::GpgExecuteSync(const ExecuteContext &context) + -> std::tuple<int, QString> { + return PrepareExecuteSyncContext(ctx_, + Module::RetrieveRTValueTypedOrDefault<>( + "core", "gpgme.ctx.app_path", QString{}), + context); +} + +auto GpgCommandExecutor::GpgConfExecuteSync(const ExecuteContext &context) + + -> std::tuple<int, QString> { + return PrepareExecuteSyncContext( + ctx_, + Module::RetrieveRTValueTypedOrDefault<>("core", "gpgme.ctx.gpgconf_path", + QString{}), + context); +} + +void GpgCommandExecutor::GpgExecuteAsync(const ExecuteContext &context) { + PrepareExecuteAsyncContext(ctx_, + Module::RetrieveRTValueTypedOrDefault<>( + "core", "gpgme.ctx.app_path", QString{}), + context); +} - return ExecuteSync(ctx); +void GpgCommandExecutor::GpgConfExecuteAsync(const ExecuteContext &context) { + PrepareExecuteAsyncContext(ctx_, + Module::RetrieveRTValueTypedOrDefault<>( + "core", "gpgme.ctx.gpgconf_path", QString{}), + context); } } // namespace GpgFrontend
\ No newline at end of file diff --git a/src/core/function/gpg/GpgCommandExecutor.h b/src/core/function/gpg/GpgCommandExecutor.h index fd2181d3..046b61e4 100644 --- a/src/core/function/gpg/GpgCommandExecutor.h +++ b/src/core/function/gpg/GpgCommandExecutor.h @@ -51,12 +51,42 @@ class GPGFRONTEND_CORE_EXPORT GpgCommandExecutor GpgCommandExecutorInterator int_func; Module::TaskRunnerPtr task_runner = nullptr; + /** + * @brief Construct a new Execute Context object + * + */ + ExecuteContext() = default; + + /** + * @brief Construct a new Execute Context object + * + * @param cmd + * @param arguments + * @param callback + * @param task_runner + * @param int_func + */ ExecuteContext( QString cmd, QStringList arguments, GpgCommandExecutorCallback callback = [](int, const QString &, const QString &) {}, Module::TaskRunnerPtr task_runner = nullptr, GpgCommandExecutorInterator int_func = [](QProcess *) {}); + + /** + * @brief Construct a new Execute Context object + * + * @param arguments + * @param callback + * @param task_runner + * @param int_func + */ + ExecuteContext( + QStringList arguments, + GpgCommandExecutorCallback callback = [](int, const QString &, + const QString &) {}, + Module::TaskRunnerPtr task_runner = nullptr, + GpgCommandExecutorInterator int_func = [](QProcess *) {}); }; using ExecuteContexts = QContainer<ExecuteContext>; @@ -69,13 +99,45 @@ class GPGFRONTEND_CORE_EXPORT GpgCommandExecutor * @param arguments Command parameters * @param interact_func Command answering function */ - static void ExecuteSync(ExecuteContext); + static void ExecuteSync(const ExecuteContext &); + + /** + * @brief + * + */ + static void ExecuteConcurrentlyAsync(const ExecuteContexts &); + + /** + * @brief + * + */ + static void ExecuteConcurrentlySync(const ExecuteContexts &); - static void ExecuteConcurrentlyAsync(ExecuteContexts); + /** + * @brief + * + */ + auto GpgExecuteSync(const ExecuteContext &) -> std::tuple<int, QString>; + + /** + * @brief + * + */ + auto GpgConfExecuteSync(const ExecuteContext &) -> std::tuple<int, QString>; - static void ExecuteConcurrentlySync(ExecuteContexts); + /** + * @brief + * + * @param context + */ + void GpgExecuteAsync(const ExecuteContext &); - void GpgExecuteSync(const ExecuteContext &); + /** + * @brief + * + * @param context + */ + void GpgConfExecuteAsync(const ExecuteContext &); private: GpgContext &ctx_ = diff --git a/src/core/function/gpg/GpgComponentInfoGetter.cpp b/src/core/function/gpg/GpgComponentInfoGetter.cpp new file mode 100644 index 00000000..317f334f --- /dev/null +++ b/src/core/function/gpg/GpgComponentInfoGetter.cpp @@ -0,0 +1,64 @@ +/** + * 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 "GpgComponentInfoGetter.h" + +namespace GpgFrontend { + +GpgComponentInfoGetter::GpgComponentInfoGetter(int channel) + : GpgFrontend::SingletonFunctionObject<GpgComponentInfoGetter>(channel) {} + +auto GpgComponentInfoGetter::GetGpgAgentVersion() -> QString { + if (!gpg_agent_version_.isEmpty()) return gpg_agent_version_; + + auto [r, s] = + assuan_.SendDataCommand(GpgComponentType::kGPG_AGENT, "GETINFO version"); + if (s.isEmpty()) { + LOG_D() << "invalid response of GETINFO version: " << s; + return {}; + } + + gpg_agent_version_ = s.front(); + return gpg_agent_version_; +} + +auto GpgComponentInfoGetter::GetScdaemonVersion() -> QString { + if (!scdaemon_version_.isEmpty()) return scdaemon_version_; + + auto [r, s] = assuan_.SendDataCommand(GpgComponentType::kGPG_AGENT, + "SCD GETINFO version"); + if (s.isEmpty()) { + LOG_D() << "invalid response of SCD GETINFO version: " << s; + return {}; + } + + scdaemon_version_ = s.front(); + return scdaemon_version_; +} + +} // namespace GpgFrontend
\ No newline at end of file diff --git a/src/core/function/gpg/GpgComponentInfoGetter.h b/src/core/function/gpg/GpgComponentInfoGetter.h new file mode 100644 index 00000000..3f8b560b --- /dev/null +++ b/src/core/function/gpg/GpgComponentInfoGetter.h @@ -0,0 +1,72 @@ +/** + * 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/function/gpg/GpgAssuanHelper.h" +#include "core/function/gpg/GpgContext.h" + +namespace GpgFrontend { + +class GPGFRONTEND_CORE_EXPORT GpgComponentInfoGetter + : public SingletonFunctionObject<GpgComponentInfoGetter> { + public: + /** + * @brief Construct a new Gpg Assuan Helper object + * + * @param channel + */ + explicit GpgComponentInfoGetter(int channel); + + /** + * @brief + * + * @return true + * @return false + */ + auto GetGpgAgentVersion() -> QString; + + /** + * @brief + * + * @return true + * @return false + */ + auto GetScdaemonVersion() -> QString; + + private: + GpgContext& ctx_ = + GpgContext::GetInstance(SingletonFunctionObject::GetChannel()); + GpgAssuanHelper& assuan_ = + GpgAssuanHelper::GetInstance(SingletonFunctionObject::GetChannel()); + + QString gpg_agent_version_; + QString scdaemon_version_; +}; + +}; // namespace GpgFrontend
\ No newline at end of file diff --git a/src/core/function/gpg/GpgContext.cpp b/src/core/function/gpg/GpgContext.cpp index de450356..ca00c452 100644 --- a/src/core/function/gpg/GpgContext.cpp +++ b/src/core/function/gpg/GpgContext.cpp @@ -43,7 +43,7 @@ #include "core/utils/GpgUtils.h" #include "core/utils/MemoryUtils.h" -#ifdef _WIN32 +#if defined(_WIN32) || defined(WIN32) #include <windows.h> #endif @@ -408,7 +408,7 @@ class GpgContext::Impl { auto configuration_name = info_split_list[0].trimmed(); auto configuration_value = info_split_list[1].trimmed(); -#ifdef __MINGW32__ +#if defined(_WIN32) || defined(WIN32) // replace some special substrings on windows // platform configuration_value.replace("%3a", ":"); diff --git a/src/core/function/gpg/GpgFileOpera.cpp b/src/core/function/gpg/GpgFileOpera.cpp index 334aae6f..b498461f 100644 --- a/src/core/function/gpg/GpgFileOpera.cpp +++ b/src/core/function/gpg/GpgFileOpera.cpp @@ -32,7 +32,6 @@ #include "core/model/GpgData.h" #include "core/model/GpgDecryptResult.h" #include "core/model/GpgEncryptResult.h" -#include "core/model/GpgKey.h" #include "core/model/GpgSignResult.h" #include "core/model/GpgVerifyResult.h" #include "core/utils/AsyncUtils.h" @@ -95,22 +94,24 @@ void GpgFileOpera::EncryptFile(const GpgAbstractKeyPtrList& keys, const QString& out_path, const GpgOperationCallback& cb) { RunGpgOperaAsync( + GetChannel(), [=](const DataObjectPtr& data_object) { return EncryptFileImpl(ctx_, keys, in_path, ascii, out_path, data_object); }, - cb, "gpgme_op_encrypt", "2.1.0"); + cb, "gpgme_op_encrypt", "2.2.0"); } auto GpgFileOpera::EncryptFileSync( const GpgAbstractKeyPtrList& keys, const QString& in_path, bool ascii, const QString& out_path) -> std::tuple<GpgError, DataObjectPtr> { return RunGpgOperaSync( + GetChannel(), [=](const DataObjectPtr& data_object) { return EncryptFileImpl(ctx_, keys, in_path, ascii, out_path, data_object); }, - "gpgme_op_encrypt", "2.1.0"); + "gpgme_op_encrypt", "2.2.0"); } void GpgFileOpera::EncryptDirectory(const GpgAbstractKeyPtrList& keys, @@ -120,6 +121,7 @@ void GpgFileOpera::EncryptDirectory(const GpgAbstractKeyPtrList& keys, auto ex = CreateStandardGFDataExchanger(); RunGpgOperaAsync( + GetChannel(), [=](const DataObjectPtr& data_object) -> GpgError { GpgData data_in(ex); GpgData data_out(out_path, false); @@ -127,7 +129,7 @@ void GpgFileOpera::EncryptDirectory(const GpgAbstractKeyPtrList& keys, return EncryptFileGpgDataImpl(ctx_, keys, data_in, ascii, data_out, data_object); }, - cb, "gpgme_op_encrypt", "2.1.0"); + cb, "gpgme_op_encrypt", "2.2.0"); CreateArchiveHelper(in_path, ex); } @@ -155,20 +157,22 @@ auto DecryptFileImpl(GpgContext& ctx_, const QString& in_path, void GpgFileOpera::DecryptFile(const QString& in_path, const QString& out_path, const GpgOperationCallback& cb) { RunGpgOperaAsync( + GetChannel(), [=](const DataObjectPtr& data_object) { return DecryptFileImpl(ctx_, in_path, out_path, data_object); }, - cb, "gpgme_op_decrypt", "2.1.0"); + cb, "gpgme_op_decrypt", "2.2.0"); } auto GpgFileOpera::DecryptFileSync(const QString& in_path, const QString& out_path) -> std::tuple<GpgError, DataObjectPtr> { return RunGpgOperaSync( + GetChannel(), [=](const DataObjectPtr& data_object) { return DecryptFileImpl(ctx_, in_path, out_path, data_object); }, - "gpgme_op_decrypt", "2.1.0"); + "gpgme_op_decrypt", "2.2.0"); } void GpgFileOpera::DecryptArchive(const QString& in_path, @@ -177,13 +181,14 @@ void GpgFileOpera::DecryptArchive(const QString& in_path, auto ex = ExtractArchiveHelper(out_path); RunGpgOperaAsync( + GetChannel(), [=](const DataObjectPtr& data_object) -> GpgError { GpgData data_in(in_path, true); GpgData data_out(ex); return DecryptFileGpgDataImpl(ctx_, data_in, data_out, data_object); }, - cb, "gpgme_op_decrypt", "2.1.0"); + cb, "gpgme_op_decrypt", "2.2.0"); } auto SignFileGpgDataImpl(GpgContext& ctx_, GpgBasicOperator& basic_opera_, @@ -221,22 +226,24 @@ void GpgFileOpera::SignFile(const GpgAbstractKeyPtrList& keys, const QString& out_path, const GpgOperationCallback& cb) { RunGpgOperaAsync( + GetChannel(), [=](const DataObjectPtr& data_object) { return SignFileImpl(ctx_, basic_opera_, keys, in_path, ascii, out_path, data_object); }, - cb, "gpgme_op_sign", "2.1.0"); + cb, "gpgme_op_sign", "2.2.0"); } auto GpgFileOpera::SignFileSync( const GpgAbstractKeyPtrList& keys, const QString& in_path, bool ascii, const QString& out_path) -> std::tuple<GpgError, DataObjectPtr> { return RunGpgOperaSync( + GetChannel(), [=](const DataObjectPtr& data_object) { return SignFileImpl(ctx_, basic_opera_, keys, in_path, ascii, out_path, data_object); }, - "gpgme_op_sign", "2.1.0"); + "gpgme_op_sign", "2.2.0"); } auto VerifyFileImpl(GpgContext& ctx_, const QString& data_path, @@ -266,20 +273,22 @@ void GpgFileOpera::VerifyFile(const QString& data_path, const QString& sign_path, const GpgOperationCallback& cb) { RunGpgOperaAsync( + GetChannel(), [=](const DataObjectPtr& data_object) -> GpgError { return VerifyFileImpl(ctx_, data_path, sign_path, data_object); }, - cb, "gpgme_op_verify", "2.1.0"); + cb, "gpgme_op_verify", "2.2.0"); } auto GpgFileOpera::VerifyFileSync(const QString& data_path, const QString& sign_path) -> std::tuple<GpgError, DataObjectPtr> { return RunGpgOperaSync( + GetChannel(), [=](const DataObjectPtr& data_object) -> GpgError { return VerifyFileImpl(ctx_, data_path, sign_path, data_object); }, - "gpgme_op_verify", "2.1.0"); + "gpgme_op_verify", "2.2.0"); } auto EncryptSignFileGpgDataImpl(GpgContext& ctx_, @@ -324,11 +333,12 @@ void GpgFileOpera::EncryptSignFile(const GpgAbstractKeyPtrList& keys, const QString& out_path, const GpgOperationCallback& cb) { RunGpgOperaAsync( + GetChannel(), [=](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"); + cb, "gpgme_op_encrypt_sign", "2.2.0"); } auto GpgFileOpera::EncryptSignFileSync( @@ -336,11 +346,12 @@ auto GpgFileOpera::EncryptSignFileSync( const QString& in_path, bool ascii, const QString& out_path) -> std::tuple<GpgError, DataObjectPtr> { return RunGpgOperaSync( + GetChannel(), [=](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"); + "gpgme_op_encrypt_sign", "2.2.0"); } void GpgFileOpera::EncryptSignDirectory( @@ -350,6 +361,7 @@ void GpgFileOpera::EncryptSignDirectory( auto ex = CreateStandardGFDataExchanger(); RunGpgOperaAsync( + GetChannel(), [=](const DataObjectPtr& data_object) -> GpgError { GpgData data_in(ex); GpgData data_out(out_path, false); @@ -358,7 +370,7 @@ void GpgFileOpera::EncryptSignDirectory( data_in, ascii, data_out, data_object); }, - cb, "gpgme_op_encrypt_sign", "2.1.0"); + cb, "gpgme_op_encrypt_sign", "2.2.0"); CreateArchiveHelper(in_path, ex); } @@ -389,20 +401,22 @@ void GpgFileOpera::DecryptVerifyFile(const QString& in_path, const QString& out_path, const GpgOperationCallback& cb) { RunGpgOperaAsync( + GetChannel(), [=](const DataObjectPtr& data_object) -> GpgError { return DecryptVerifyFileImpl(ctx_, in_path, out_path, data_object); }, - cb, "gpgme_op_decrypt_verify", "2.1.0"); + cb, "gpgme_op_decrypt_verify", "2.2.0"); } auto GpgFileOpera::DecryptVerifyFileSync(const QString& in_path, const QString& out_path) -> std::tuple<GpgError, DataObjectPtr> { return RunGpgOperaSync( + GetChannel(), [=](const DataObjectPtr& data_object) -> GpgError { return DecryptVerifyFileImpl(ctx_, in_path, out_path, data_object); }, - "gpgme_op_decrypt_verify", "2.1.0"); + "gpgme_op_decrypt_verify", "2.2.0"); } void GpgFileOpera::DecryptVerifyArchive(const QString& in_path, @@ -411,33 +425,36 @@ void GpgFileOpera::DecryptVerifyArchive(const QString& in_path, auto ex = ExtractArchiveHelper(out_path); RunGpgOperaAsync( + GetChannel(), [=](const DataObjectPtr& data_object) -> GpgError { GpgData data_in(in_path, true); GpgData data_out(ex); return DecryptVerifyFileGpgDataImpl(ctx_, data_in, data_out, data_object); }, - cb, "gpgme_op_decrypt_verify", "2.1.0"); + cb, "gpgme_op_decrypt_verify", "2.2.0"); } void GpgFileOpera::EncryptFileSymmetric(const QString& in_path, bool ascii, const QString& out_path, const GpgOperationCallback& cb) { RunGpgOperaAsync( + GetChannel(), [=](const DataObjectPtr& data_object) -> GpgError { return EncryptFileImpl(ctx_, {}, in_path, ascii, out_path, data_object); }, - cb, "gpgme_op_encrypt_symmetric", "2.1.0"); + cb, "gpgme_op_encrypt_symmetric", "2.2.0"); } auto GpgFileOpera::EncryptFileSymmetricSync(const QString& in_path, bool ascii, const QString& out_path) -> std::tuple<GpgError, DataObjectPtr> { return RunGpgOperaSync( + GetChannel(), [=](const DataObjectPtr& data_object) -> GpgError { return EncryptFileImpl(ctx_, {}, in_path, ascii, out_path, data_object); }, - "gpgme_op_encrypt_symmetric", "2.1.0"); + "gpgme_op_encrypt_symmetric", "2.2.0"); } void GpgFileOpera::EncryptDirectorySymmetric(const QString& in_path, bool ascii, @@ -446,6 +463,7 @@ void GpgFileOpera::EncryptDirectorySymmetric(const QString& in_path, bool ascii, auto ex = CreateStandardGFDataExchanger(); RunGpgOperaAsync( + GetChannel(), [=](const DataObjectPtr& data_object) { GpgData data_in(ex); GpgData data_out(out_path, false); @@ -453,7 +471,7 @@ void GpgFileOpera::EncryptDirectorySymmetric(const QString& in_path, bool ascii, return EncryptFileGpgDataImpl(ctx_, {}, data_in, ascii, data_out, data_object); }, - cb, "gpgme_op_encrypt_symmetric", "2.1.0"); + cb, "gpgme_op_encrypt_symmetric", "2.2.0"); CreateArchiveHelper(in_path, ex); } @@ -466,6 +484,7 @@ auto GpgFileOpera::EncryptDirectorySymmetricSync( CreateArchiveHelper(in_path, ex); return RunGpgOperaSync( + GetChannel(), [=](const DataObjectPtr& data_object) -> GpgError { GpgData data_in(ex); GpgData data_out(out_path, false); @@ -473,7 +492,7 @@ auto GpgFileOpera::EncryptDirectorySymmetricSync( return EncryptFileGpgDataImpl(ctx_, {}, data_in, ascii, data_out, data_object); }, - "gpgme_op_encrypt_symmetric", "2.1.0"); + "gpgme_op_encrypt_symmetric", "2.2.0"); } } // namespace GpgFrontend
\ No newline at end of file diff --git a/src/core/function/gpg/GpgKeyImportExporter.cpp b/src/core/function/gpg/GpgKeyImportExporter.cpp index eda36273..4e306233 100644 --- a/src/core/function/gpg/GpgKeyImportExporter.cpp +++ b/src/core/function/gpg/GpgKeyImportExporter.cpp @@ -105,6 +105,7 @@ void GpgKeyImportExporter::ExportKeys(const GpgAbstractKeyPtrList& keys, bool ssh_mode, const GpgOperationCallback& cb) const { RunGpgOperaAsync( + GetChannel(), [=](const DataObjectPtr& data_object) -> GpgError { if (keys.empty()) return GPG_ERR_CANCELED; @@ -139,6 +140,7 @@ void GpgKeyImportExporter::ExportAllKeys(const GpgAbstractKeyPtrList& keys, bool secret, bool ascii, const GpgOperationCallback& cb) const { RunGpgOperaAsync( + GetChannel(), [=](const DataObjectPtr& data_object) -> GpgError { if (keys.empty()) return GPG_ERR_CANCELED; diff --git a/src/core/function/gpg/GpgKeyManager.cpp b/src/core/function/gpg/GpgKeyManager.cpp index 1fa050bb..5fca4ed4 100644 --- a/src/core/function/gpg/GpgKeyManager.cpp +++ b/src/core/function/gpg/GpgKeyManager.cpp @@ -31,7 +31,6 @@ #include "core/function/gpg/GpgAutomatonHandler.h" #include "core/function/gpg/GpgBasicOperator.h" #include "core/function/gpg/GpgKeyGetter.h" -#include "core/model/GpgData.h" #include "core/utils/GpgUtils.h" namespace GpgFrontend { @@ -69,9 +68,9 @@ auto GpgKeyManager::RevSign(const GpgKeyPtr& key, auto signing_key = key_getter.GetKey(sign_id.first); assert(signing_key.IsGood()); - auto err = CheckGpgError( - gpgme_op_revsig(ctx_.DefaultContext(), gpgme_key_t(*key), - gpgme_key_t(signing_key), sign_id.second.toUtf8(), 0)); + auto err = CheckGpgError(gpgme_op_revsig( + ctx_.DefaultContext(), static_cast<gpgme_key_t>(*key), + static_cast<gpgme_key_t>(signing_key), sign_id.second.toUtf8(), 0)); if (CheckGpgError(err) != GPG_ERR_NO_ERROR) return false; } return true; @@ -102,7 +101,7 @@ auto GpgKeyManager::SetOwnerTrustLevel(const GpgKeyPtr& key, } GpgAutomatonHandler::AutomatonNextStateHandler next_state_handler = - [](AutomatonState state, QString status, QString args) { + [](AutomatonState state, const QString& status, const QString& args) { auto tokens = args.split(' '); switch (state) { @@ -162,15 +161,14 @@ auto GpgKeyManager::SetOwnerTrustLevel(const GpgKeyPtr& key, return QString("Y"); case GpgAutomatonHandler::kAS_START: case GpgAutomatonHandler::kAS_ERROR: - return QString(""); default: return QString(""); } return QString(""); }; - return GpgAutomatonHandler::GetInstance(GetChannel()) - .DoInteract(key, next_state_handler, action_handler); + auto [err, succ] = auto_.DoInteract(key, next_state_handler, action_handler); + return err == GPG_ERR_NO_ERROR && !succ; } auto GpgKeyManager::DeleteSubkey(const GpgKeyPtr& key, @@ -182,7 +180,7 @@ auto GpgKeyManager::DeleteSubkey(const GpgKeyPtr& key, } AutomatonNextStateHandler next_state_handler = - [](AutomatonState state, QString status, QString args) { + [](AutomatonState state, const QString& status, const QString& args) { auto tokens = args.split(' '); switch (state) { @@ -247,8 +245,8 @@ auto GpgKeyManager::DeleteSubkey(const GpgKeyPtr& key, return QString(""); }; - return GpgAutomatonHandler::GetInstance(GetChannel()) - .DoInteract(key, next_state_handler, action_handler); + auto [err, succ] = auto_.DoInteract(key, next_state_handler, action_handler); + return err == GPG_ERR_NO_ERROR && !succ; } auto GpgKeyManager::RevokeSubkey(const GpgKeyPtr& key, int subkey_index, @@ -270,7 +268,7 @@ auto GpgKeyManager::RevokeSubkey(const GpgKeyPtr& key, int subkey_index, reason_text.split('\n', Qt::SkipEmptyParts)); AutomatonNextStateHandler next_state_handler = - [](AutomatonState state, QString status, QString args) { + [](AutomatonState state, const QString& status, const QString& args) { auto tokens = args.split(' '); switch (state) { @@ -363,8 +361,8 @@ auto GpgKeyManager::RevokeSubkey(const GpgKeyPtr& key, int subkey_index, return QString(""); }; - return GpgAutomatonHandler::GetInstance(GetChannel()) - .DoInteract(key, next_state_handler, action_handler); + auto [err, succ] = auto_.DoInteract(key, next_state_handler, action_handler); + return err == GPG_ERR_NO_ERROR && !succ; } } // namespace GpgFrontend
\ No newline at end of file diff --git a/src/core/function/gpg/GpgKeyManager.h b/src/core/function/gpg/GpgKeyManager.h index ccf69b53..384319f8 100644 --- a/src/core/function/gpg/GpgKeyManager.h +++ b/src/core/function/gpg/GpgKeyManager.h @@ -29,6 +29,7 @@ #pragma once #include "core/function/basic/GpgFunctionObject.h" +#include "core/function/gpg/GpgAutomatonHandler.h" #include "core/function/gpg/GpgContext.h" #include "core/typedef/GpgTypedef.h" @@ -114,6 +115,8 @@ class GPGFRONTEND_CORE_EXPORT GpgKeyManager private: GpgContext& ctx_ = GpgContext::GetInstance(SingletonFunctionObject::GetChannel()); ///< + GpgAutomatonHandler& auto_ = GpgAutomatonHandler::GetInstance( + SingletonFunctionObject::GetChannel()); ///< }; } // namespace GpgFrontend diff --git a/src/core/function/gpg/GpgKeyOpera.cpp b/src/core/function/gpg/GpgKeyOpera.cpp index e97eebd8..bcc3cc44 100644 --- a/src/core/function/gpg/GpgKeyOpera.cpp +++ b/src/core/function/gpg/GpgKeyOpera.cpp @@ -215,19 +215,21 @@ auto GenerateKeyImpl(GpgContext& ctx, void GpgKeyOpera::GenerateKey(const QSharedPointer<KeyGenerateInfo>& params, const GpgOperationCallback& callback) { RunGpgOperaAsync( + GetChannel(), [=](const DataObjectPtr& data_object) -> GpgError { return GenerateKeyImpl(ctx_, params, data_object); }, - callback, "gpgme_op_createkey", "2.1.0"); + callback, "gpgme_op_createkey", "2.2.0"); } auto GpgKeyOpera::GenerateKeySync(const QSharedPointer<KeyGenerateInfo>& params) -> std::tuple<GpgError, DataObjectPtr> { return RunGpgOperaSync( + GetChannel(), [=](const DataObjectPtr& data_object) -> GpgError { return GenerateKeyImpl(ctx_, params, data_object); }, - "gpgme_op_createkey", "2.1.0"); + "gpgme_op_createkey", "2.2.0"); } auto GenerateSubKeyImpl(GpgContext& ctx, const GpgKeyPtr& key, @@ -270,6 +272,7 @@ void GpgKeyOpera::GenerateSubkey(const GpgKeyPtr& key, const QSharedPointer<KeyGenerateInfo>& params, const GpgOperationCallback& callback) { RunGpgOperaAsync( + GetChannel(), [=](const DataObjectPtr& data_object) -> GpgError { return GenerateSubKeyImpl(ctx_, key, params, data_object); }, @@ -280,6 +283,7 @@ auto GpgKeyOpera::GenerateSubkeySync( const GpgKeyPtr& key, const QSharedPointer<KeyGenerateInfo>& params) -> std::tuple<GpgError, DataObjectPtr> { return RunGpgOperaSync( + GetChannel(), [=](const DataObjectPtr& data_object) -> GpgError { return GenerateSubKeyImpl(ctx_, key, params, data_object); }, @@ -318,11 +322,12 @@ void GpgKeyOpera::GenerateKeyWithSubkey( const QSharedPointer<KeyGenerateInfo>& s_params, const GpgOperationCallback& callback) { RunGpgOperaAsync( + GetChannel(), [=](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"); + callback, "gpgme_op_createkey&gpgme_op_createsubkey", "2.2.0"); } auto GpgKeyOpera::GenerateKeyWithSubkeySync( @@ -330,36 +335,35 @@ auto GpgKeyOpera::GenerateKeyWithSubkeySync( const QSharedPointer<KeyGenerateInfo>& s_params) -> std::tuple<GpgError, DataObjectPtr> { return RunGpgOperaSync( + GetChannel(), [=](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"); + "gpgme_op_createkey&gpgme_op_createsubkey", "2.2.0"); } void GpgKeyOpera::ModifyPassword(const GpgKeyPtr& key, const GpgOperationCallback& callback) { RunGpgOperaAsync( + GetChannel(), [&key, &ctx = ctx_](const DataObjectPtr&) -> GpgError { return gpgme_op_passwd(ctx.DefaultContext(), static_cast<gpgme_key_t>(*key), 0); }, - callback, "gpgme_op_passwd", "2.0.15"); + callback, "gpgme_op_passwd", "2.2.0"); } auto GpgKeyOpera::ModifyTOFUPolicy( const GpgKeyPtr& key, gpgme_tofu_policy_t tofu_policy) -> GpgError { - const auto gnupg_version = Module::RetrieveRTValueTypedOrDefault<>( - "core", "gpgme.ctx.gnupg_version", QString{"2.0.0"}); - LOG_D() << "got gnupg version from rt: " << gnupg_version; - - if (GFCompareSoftwareVersion(gnupg_version, "2.1.10") < 0) { - FLOG_W("operator not support"); - return GPG_ERR_NOT_SUPPORTED; - } + auto [err, obj] = RunGpgOperaSync( + GetChannel(), + [=](const DataObjectPtr&) -> GpgError { + return gpgme_op_tofu_policy( + ctx_.DefaultContext(), static_cast<gpgme_key_t>(*key), tofu_policy); + }, + "gpgme_op_tofu_policy", "2.2.0"); - auto err = gpgme_op_tofu_policy(ctx_.DefaultContext(), - static_cast<gpgme_key_t>(*key), tofu_policy); return CheckGpgError(err); } @@ -388,6 +392,7 @@ auto AddADSKImpl(GpgContext& ctx, const GpgKeyPtr& key, const GpgSubKey& adsk, void GpgKeyOpera::AddADSK(const GpgKeyPtr& key, const GpgSubKey& adsk, const GpgOperationCallback& callback) { RunGpgOperaAsync( + GetChannel(), [=](const DataObjectPtr& data_object) -> GpgError { return AddADSKImpl(ctx_, key, adsk, data_object); }, @@ -397,6 +402,7 @@ void GpgKeyOpera::AddADSK(const GpgKeyPtr& key, const GpgSubKey& adsk, auto GpgKeyOpera::AddADSKSync(const GpgKeyPtr& key, const GpgSubKey& adsk) -> std::tuple<GpgError, DataObjectPtr> { return RunGpgOperaSync( + GetChannel(), [=](const DataObjectPtr& data_object) -> GpgError { return AddADSKImpl(ctx_, key, adsk, data_object); }, diff --git a/src/core/function/gpg/GpgSmartCardManager.cpp b/src/core/function/gpg/GpgSmartCardManager.cpp index 5442ea88..203c36ec 100644 --- a/src/core/function/gpg/GpgSmartCardManager.cpp +++ b/src/core/function/gpg/GpgSmartCardManager.cpp @@ -30,17 +30,16 @@ #include "core/function/gpg/GpgAutomatonHandler.h" #include "core/utils/CommonUtils.h" +#include "core/utils/GpgUtils.h" namespace GpgFrontend { GpgSmartCardManager::GpgSmartCardManager(int channel) : SingletonFunctionObject<GpgSmartCardManager>(channel) {} -auto GpgSmartCardManager::Fetch(const QString& serial_number) -> bool { +auto GpgSmartCardManager::Fetch(const QString& serial_number) -> GpgError { GpgAutomatonHandler::AutomatonNextStateHandler next_state_handler = - [=](AutomatonState state, QString status, QString args) { - auto tokens = args.split(' '); - + [=](AutomatonState state, const QString& status, const QString& args) { switch (state) { case GpgAutomatonHandler::kAS_START: if (status == "GET_LINE" && args == "cardedit.prompt") { @@ -63,7 +62,7 @@ auto GpgSmartCardManager::Fetch(const QString& serial_number) -> bool { }; }; - AutomatonActionHandler action_handler = [](AutomatonHandelStruct& handler, + AutomatonActionHandler action_handler = [](AutomatonHandelStruct&, AutomatonState state) { switch (state) { case GpgAutomatonHandler::kAS_COMMAND: @@ -78,25 +77,22 @@ auto GpgSmartCardManager::Fetch(const QString& serial_number) -> bool { return QString(""); }; - return GpgAutomatonHandler::GetInstance(GetChannel()) - .DoCardInteract(serial_number, next_state_handler, action_handler); + auto [err, succ] = + GpgAutomatonHandler::GetInstance(GetChannel()) + .DoCardInteract(serial_number, next_state_handler, action_handler); + + if (err == GPG_ERR_NO_ERROR && !succ) return GPG_ERR_USER_1; + return err; } auto GpgSmartCardManager::IsSCDVersionSupported() -> bool { - auto [r, s] = assuan_.SendDataCommand(GpgComponentType::kGPG_AGENT, - "SCD GETINFO version"); - if (s.isEmpty()) { - LOG_D() << "invalid response of SCD GETINFO version: " << s; - return false; - } - - return GFCompareSoftwareVersion(s.front(), "2.3.0") > 0; + return GFSoftwareVersionGreaterThan(info_.GetScdaemonVersion(), "2.3.0"); } auto GpgSmartCardManager::GetSerialNumbers() -> QStringList { auto [r, s] = assuan_.SendStatusCommand(GpgComponentType::kGPG_AGENT, "SCD SERIALNO --all"); - if (!r) { + if (r != GPG_ERR_NO_ERROR) { cached_scd_serialno_status_hash_.clear(); cache_scd_card_serial_numbers_.clear(); return {}; @@ -112,9 +108,9 @@ auto GpgSmartCardManager::GetSerialNumbers() -> QStringList { cached_scd_serialno_status_hash_.clear(); cache_scd_card_serial_numbers_.clear(); - auto [ret, status] = assuan_.SendStatusCommand(GpgComponentType::kGPG_AGENT, + auto [err, status] = assuan_.SendStatusCommand(GpgComponentType::kGPG_AGENT, "SCD GETINFO all_active_apps"); - if (!ret || status.empty()) { + if (err != GPG_ERR_NO_ERROR || status.empty()) { LOG_D() << "command SCD GETINFO all_active_apps failed, resetting..."; return {}; } @@ -142,14 +138,14 @@ auto GpgSmartCardManager::GetSerialNumbers() -> QStringList { } auto GpgSmartCardManager::SelectCardBySerialNumber(const QString& serial_number) - -> std::tuple<bool, QString> { + -> std::tuple<GpgError, QString> { if (serial_number.isEmpty()) return {false, "Serial Number is empty."}; - auto [ret, status] = assuan_.SendStatusCommand( + auto [err, status] = assuan_.SendStatusCommand( GpgComponentType::kGPG_AGENT, QString("SCD SERIALNO --demand=%1 openpgp").arg(serial_number)); - if (!ret || status.isEmpty()) { - return {false, status.join(' ')}; + if (err != GPG_ERR_NO_ERROR || status.isEmpty()) { + return {err, status.join(' ')}; } auto line = status.front(); @@ -157,22 +153,21 @@ auto GpgSmartCardManager::SelectCardBySerialNumber(const QString& serial_number) if (token.size() != 2) { LOG_E() << "invalid response of command SERIALNO: " << line; - return {false, line}; + return {GPG_ERR_USER_1, line}; } LOG_D() << "selected smart card by serial number: " << serial_number; - - return {true, {}}; + return {err, {}}; } auto GpgSmartCardManager::FetchCardInfoBySerialNumber( const QString& serial_number) -> QSharedPointer<GpgOpenPGPCard> { if (serial_number.trimmed().isEmpty()) return nullptr; - auto [ret, status] = assuan_.SendStatusCommand( + auto [err, status] = assuan_.SendStatusCommand( GpgComponentType::kGPG_AGENT, "SCD LEARN --force " + serial_number); - if (!ret || status.isEmpty()) { - LOG_E() << "scd learn failed: " << status; + if (err != GPG_ERR_NO_ERROR || status.isEmpty()) { + LOG_E() << "scd learn failed, err: " << CheckGpgError(err) << "" << status; return nullptr; } @@ -201,7 +196,7 @@ auto PercentDataEscape(const QByteArray& data, bool plus_escape = false, } } - for (unsigned char ch : data) { + for (char ch : data) { if (ch == '\0') { result += "%00"; } else if (ch == '%') { @@ -219,29 +214,25 @@ auto PercentDataEscape(const QByteArray& data, bool plus_escape = false, } auto GpgSmartCardManager::ModifyAttr(const QString& attr, const QString& value) - -> std::tuple<bool, QString> { + -> std::tuple<GpgError, QString> { if (attr.trimmed().isEmpty() || value.trimmed().isEmpty()) { - return {false, "ATTR or Value is empty"}; + return {GPG_ERR_INV_ARG, "ATTR or Value is empty"}; } const auto command = QString("SCD SETATTR %1 ").arg(attr); const auto escaped_command = PercentDataEscape(value.trimmed().toUtf8(), true, command); - auto [r, s] = + auto [err, status] = assuan_.SendStatusCommand(GpgComponentType::kGPG_AGENT, escaped_command); - - if (!r) { - LOG_E() << "SCD SETATTR command failed for attr" << attr; - return {false, s.join(' ')}; - } - - return {true, {}}; + return {err, status.join(' ')}; } auto GpgSmartCardManager::ModifyPin(const QString& pin_ref) - -> std::tuple<bool, QString> { - if (pin_ref.trimmed().isEmpty()) return {false, "PIN Reference is empty"}; + -> std::tuple<GpgError, QString> { + if (pin_ref.trimmed().isEmpty()) { + return {GPG_ERR_INV_ARG, "PIN Reference is empty"}; + } QString command; if (pin_ref == "OPENPGP.1") { @@ -254,23 +245,17 @@ auto GpgSmartCardManager::ModifyPin(const QString& pin_ref) command = QString("SCD PASSWD %1").arg(pin_ref); } - auto [success, status] = + auto [err, status] = assuan_.SendStatusCommand(GpgComponentType::kGPG_AGENT, command); - - if (!success) { - LOG_E() << "modify pin of smart failed: " << status; - return {false, status.join(' ')}; - } - - return {true, {}}; + return {err, status.join(' ')}; } auto GpgSmartCardManager::GenerateKey( const QString& serial_number, const QString& name, const QString& email, const QString& comment, const QDateTime& expire, - bool non_expire) -> std::tuple<bool, QString> { + bool non_expire) -> std::tuple<GpgError, QString> { if (name.isEmpty() || email.isEmpty()) { - return {false, "name or email is empty"}; + return {GPG_ERR_INV_ARG, "name or email is empty"}; } qint64 days_before_expire = 0; @@ -280,8 +265,6 @@ auto GpgSmartCardManager::GenerateKey( GpgAutomatonHandler::AutomatonNextStateHandler next_state_handler = [=](AutomatonState state, const QString& status, const QString& args) { - auto tokens = args.split(' '); - switch (state) { case GpgAutomatonHandler::kAS_START: if (status == "GET_LINE" && args == "cardedit.prompt") { @@ -382,9 +365,10 @@ auto GpgSmartCardManager::GenerateKey( return QString{}; }; - return { + auto [err, succ] = GpgAutomatonHandler::GetInstance(GetChannel()) - .DoCardInteract(serial_number, next_state_handler, action_handler), - "unknown error"}; + .DoCardInteract(serial_number, next_state_handler, action_handler); + if (err == GPG_ERR_NO_ERROR && !succ) return {GPG_ERR_USER_1, {}}; + return {err, {}}; } } // namespace GpgFrontend
\ No newline at end of file diff --git a/src/core/function/gpg/GpgSmartCardManager.h b/src/core/function/gpg/GpgSmartCardManager.h index 2fe194f3..02b07fa2 100644 --- a/src/core/function/gpg/GpgSmartCardManager.h +++ b/src/core/function/gpg/GpgSmartCardManager.h @@ -30,9 +30,9 @@ #include "core/function/basic/GpgFunctionObject.h" #include "core/function/gpg/GpgAssuanHelper.h" +#include "core/function/gpg/GpgComponentInfoGetter.h" #include "core/function/gpg/GpgContext.h" #include "core/model/GpgOpenPGPCard.h" -#include "core/typedef/GpgTypedef.h" namespace GpgFrontend { @@ -63,7 +63,8 @@ class GPGFRONTEND_CORE_EXPORT GpgSmartCardManager * * @return std::tuple<bool, QString> */ - auto SelectCardBySerialNumber(const QString&) -> std::tuple<bool, QString>; + auto SelectCardBySerialNumber(const QString&) + -> std::tuple<GpgError, QString>; /** * @brief @@ -81,7 +82,7 @@ class GPGFRONTEND_CORE_EXPORT GpgSmartCardManager * @return true * @return false */ - auto Fetch(const QString& serial_number) -> bool; + auto Fetch(const QString& serial_number) -> GpgError; /** * @brief @@ -89,7 +90,7 @@ class GPGFRONTEND_CORE_EXPORT GpgSmartCardManager * @return std::tuple<bool, QString> */ auto ModifyAttr(const QString& attr, - const QString& value) -> std::tuple<bool, QString>; + const QString& value) -> std::tuple<GpgError, QString>; /** * @brief @@ -97,7 +98,7 @@ class GPGFRONTEND_CORE_EXPORT GpgSmartCardManager * @param pin_ref * @return std::tuple<bool, QString> */ - auto ModifyPin(const QString& pin_ref) -> std::tuple<bool, QString>; + auto ModifyPin(const QString& pin_ref) -> std::tuple<GpgError, QString>; /** * @brief @@ -107,7 +108,7 @@ class GPGFRONTEND_CORE_EXPORT GpgSmartCardManager auto GenerateKey(const QString& serial_number, const QString& name, const QString& email, const QString& comment, const QDateTime& expire, - bool non_expire) -> std::tuple<bool, QString>; + bool non_expire) -> std::tuple<GpgError, QString>; /** * @brief @@ -122,6 +123,9 @@ class GPGFRONTEND_CORE_EXPORT GpgSmartCardManager GpgContext::GetInstance(SingletonFunctionObject::GetChannel()); ///< GpgAssuanHelper& assuan_ = GpgAssuanHelper::GetInstance(SingletonFunctionObject::GetChannel()); ///< + GpgComponentInfoGetter& info_ = GpgComponentInfoGetter::GetInstance( + SingletonFunctionObject::GetChannel()); ///< + QString cached_scd_serialno_status_hash_; QContainer<QString> cache_scd_card_serial_numbers_; }; diff --git a/src/core/function/gpg/GpgUIDOperator.cpp b/src/core/function/gpg/GpgUIDOperator.cpp index e07b4192..ca056be0 100644 --- a/src/core/function/gpg/GpgUIDOperator.cpp +++ b/src/core/function/gpg/GpgUIDOperator.cpp @@ -29,7 +29,6 @@ #include "GpgUIDOperator.h" #include "core/function/gpg/GpgAutomatonHandler.h" -#include "core/model/GpgData.h" #include "core/utils/GpgUtils.h" namespace GpgFrontend { @@ -65,8 +64,8 @@ auto GpgUIDOperator::DeleteUID(const GpgKeyPtr& key, int uid_index) -> bool { } AutomatonNextStateHandler next_state_handler = [](AutomatonState state, - QString status, - QString args) { + const QString& status, + const QString& args) { auto tokens = args.split(' '); switch (state) { @@ -124,15 +123,14 @@ auto GpgUIDOperator::DeleteUID(const GpgKeyPtr& key, int uid_index) -> bool { return QString("Y"); case GpgAutomatonHandler::kAS_START: case GpgAutomatonHandler::kAS_ERROR: - return QString(""); default: return QString(""); } return QString(""); }; - return GpgAutomatonHandler::GetInstance(GetChannel()) - .DoInteract(key, next_state_handler, action_handler); + auto [err, succ] = auto_.DoInteract(key, next_state_handler, action_handler); + return err == GPG_ERR_NO_ERROR && !succ; } auto GpgUIDOperator::RevokeUID(const GpgKeyPtr& key, int uid_index, @@ -153,8 +151,8 @@ auto GpgUIDOperator::RevokeUID(const GpgKeyPtr& key, int uid_index, reason_text.split('\n', Qt::SkipEmptyParts)); AutomatonNextStateHandler next_state_handler = [](AutomatonState state, - QString status, - QString args) { + const QString& status, + const QString& args) { auto tokens = args.split(' '); switch (state) { @@ -240,15 +238,14 @@ auto GpgUIDOperator::RevokeUID(const GpgKeyPtr& key, int uid_index, return QString("Y"); case GpgAutomatonHandler::kAS_START: case GpgAutomatonHandler::kAS_ERROR: - return QString(""); default: return QString(""); } return QString(""); }; - return GpgAutomatonHandler::GetInstance(GetChannel()) - .DoInteract(key, next_state_handler, action_handler); + auto [err, succ] = auto_.DoInteract(key, next_state_handler, action_handler); + return err == GPG_ERR_NO_ERROR && !succ; } } // namespace GpgFrontend diff --git a/src/core/function/gpg/GpgUIDOperator.h b/src/core/function/gpg/GpgUIDOperator.h index e5e2f190..0e222388 100644 --- a/src/core/function/gpg/GpgUIDOperator.h +++ b/src/core/function/gpg/GpgUIDOperator.h @@ -28,6 +28,7 @@ #pragma once +#include "core/function/gpg/GpgAutomatonHandler.h" #include "core/function/gpg/GpgContext.h" #include "core/typedef/GpgTypedef.h" @@ -100,6 +101,8 @@ class GPGFRONTEND_CORE_EXPORT GpgUIDOperator private: GpgContext& ctx_ = GpgContext::GetInstance(SingletonFunctionObject::GetChannel()); ///< + GpgAutomatonHandler& auto_ = GpgAutomatonHandler::GetInstance( + SingletonFunctionObject::GetChannel()); ///< }; } // namespace GpgFrontend diff --git a/src/core/model/GpgKeyGenerateInfo.cpp b/src/core/model/GpgKeyGenerateInfo.cpp index b1dcaa7a..0d8aa23c 100644 --- a/src/core/model/GpgKeyGenerateInfo.cpp +++ b/src/core/model/GpgKeyGenerateInfo.cpp @@ -30,8 +30,9 @@ #include <cassert> -#include "module/ModuleManager.h" -#include "utils/CommonUtils.h" +#include "core/module/ModuleManager.h" +#include "core/utils/CommonUtils.h" +#include "core/utils/GpgUtils.h" namespace GpgFrontend { @@ -98,14 +99,12 @@ const QContainer<KeyAlgo> KeyGenerateInfo::kSubKeyAlgos = { {"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"}); - +auto KeyGenerateInfo::GetSupportedKeyAlgo(int channel) -> QContainer<KeyAlgo> { QContainer<KeyAlgo> algos; for (const auto &algo : kPrimaryKeyAlgos) { - if (!algo.IsSupported(gnupg_version)) continue; + if (!CheckGpgVersion(channel, algo.SupportedVersion())) continue; + algos.append(algo); } @@ -116,14 +115,13 @@ auto KeyGenerateInfo::GetSupportedKeyAlgo() -> QContainer<KeyAlgo> { return algos; } -auto KeyGenerateInfo::GetSupportedSubkeyAlgo() -> QContainer<KeyAlgo> { - const auto gnupg_version = Module::RetrieveRTValueTypedOrDefault<>( - "core", "gpgme.ctx.gnupg_version", QString{"2.0.0"}); - +auto KeyGenerateInfo::GetSupportedSubkeyAlgo(int channel) + -> QContainer<KeyAlgo> { QContainer<KeyAlgo> algos; for (const auto &algo : kSubKeyAlgos) { - if (!algo.IsSupported(gnupg_version)) continue; + if (!CheckGpgVersion(channel, algo.SupportedVersion())) continue; + algos.append(algo); } @@ -490,9 +488,7 @@ 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::SupportedVersion() const -> QString { return supported_version_; } auto KeyAlgo::operator==(const KeyAlgo &o) const -> bool { return this->id_ == o.id_; diff --git a/src/core/model/GpgKeyGenerateInfo.h b/src/core/model/GpgKeyGenerateInfo.h index 2956a00d..b3f3b2c7 100644 --- a/src/core/model/GpgKeyGenerateInfo.h +++ b/src/core/model/GpgKeyGenerateInfo.h @@ -62,7 +62,7 @@ class GPGFRONTEND_CORE_EXPORT KeyAlgo { [[nodiscard]] auto CanCert() const -> bool; - [[nodiscard]] auto IsSupported(const QString &version) const -> bool; + [[nodiscard]] auto SupportedVersion() const -> QString; private: QString id_; @@ -96,14 +96,14 @@ class GPGFRONTEND_CORE_EXPORT KeyGenerateInfo : public QObject { * * @return const QContainer<KeyGenAlgo>& */ - static auto GetSupportedKeyAlgo() -> QContainer<KeyAlgo>; + static auto GetSupportedKeyAlgo(int channel) -> QContainer<KeyAlgo>; /** * @brief Get the Supported Subkey Algo object * * @return const QContainer<KeyGenAlgo>& */ - static auto GetSupportedSubkeyAlgo() -> QContainer<KeyAlgo>; + static auto GetSupportedSubkeyAlgo(int channel) -> QContainer<KeyAlgo>; /** * @brief diff --git a/src/core/utils/AsyncUtils.cpp b/src/core/utils/AsyncUtils.cpp index a4bc66fa..a3ab9eb8 100644 --- a/src/core/utils/AsyncUtils.cpp +++ b/src/core/utils/AsyncUtils.cpp @@ -28,24 +28,20 @@ #include "AsyncUtils.h" +#include "core/model/DataObject.h" #include "core/module/ModuleManager.h" #include "core/thread/Task.h" #include "core/thread/TaskRunnerGetter.h" -#include "core/utils/CommonUtils.h" -#include "model/DataObject.h" +#include "core/utils/GpgUtils.h" namespace GpgFrontend { -auto RunGpgOperaAsync(const GpgOperaRunnable& runnable, +auto RunGpgOperaAsync(int channel, const GpgOperaRunnable& runnable, const GpgOperationCallback& callback, - const QString& operation, const QString& minial_version) + const QString& operation, const QString& minimal_version) -> Thread::Task::TaskHandler { - const auto gnupg_version = Module::RetrieveRTValueTypedOrDefault<>( - "core", "gpgme.ctx.gnupg_version", minial_version); - - if (GFCompareSoftwareVersion(gnupg_version, minial_version) < 0) { - LOG_W() << "operation" << operation - << " not support for gnupg version: " << gnupg_version; + if (!CheckGpgVersion(channel, minimal_version)) { + LOG_W() << "operation: " << operation << "is not supported."; callback(GPG_ERR_NOT_SUPPORTED, TransferParams()); return Thread::Task::TaskHandler(nullptr); } @@ -75,15 +71,11 @@ auto RunGpgOperaAsync(const GpgOperaRunnable& runnable, return handler; } -auto RunGpgOperaSync(const GpgOperaRunnable& runnable, const QString& operation, - const QString& minial_version) +auto RunGpgOperaSync(int channel, const GpgOperaRunnable& runnable, + const QString& operation, const QString& minimal_version) -> std::tuple<GpgError, DataObjectPtr> { - const auto gnupg_version = Module::RetrieveRTValueTypedOrDefault<>( - "core", "gpgme.ctx.gnupg_version", minial_version); - - if (GFCompareSoftwareVersion(gnupg_version, minial_version) < 0) { - LOG_W() << "operation" << operation - << " not support for gnupg version: " << gnupg_version; + if (!CheckGpgVersion(channel, minimal_version)) { + LOG_W() << "operation: " << operation << "is not supported."; return {GPG_ERR_NOT_SUPPORTED, TransferParams()}; } diff --git a/src/core/utils/AsyncUtils.h b/src/core/utils/AsyncUtils.h index eb55cf89..5be3b230 100644 --- a/src/core/utils/AsyncUtils.h +++ b/src/core/utils/AsyncUtils.h @@ -41,24 +41,24 @@ namespace GpgFrontend { * @param runnable * @param callback * @param operation - * @param minial_version + * @param minimal_version */ auto GPGFRONTEND_CORE_EXPORT -RunGpgOperaAsync(const GpgOperaRunnable& runnable, +RunGpgOperaAsync(int channel, const GpgOperaRunnable& runnable, const GpgOperationCallback& callback, const QString& operation, - const QString& minial_version) -> Thread::Task::TaskHandler; + const QString& minimal_version) -> Thread::Task::TaskHandler; /** * @brief * * @param runnable * @param operation - * @param minial_version + * @param minimal_version * @return std::tuple<GpgError, DataObjectPtr> */ auto GPGFRONTEND_CORE_EXPORT RunGpgOperaSync( - const GpgOperaRunnable& runnable, const QString& operation, - const QString& minial_version) -> std::tuple<GpgError, DataObjectPtr>; + int channel, const GpgOperaRunnable& runnable, const QString& operation, + const QString& minimal_version) -> std::tuple<GpgError, DataObjectPtr>; /** * @brief diff --git a/src/core/utils/CommonUtils.cpp b/src/core/utils/CommonUtils.cpp index ce36c71e..eec5deef 100644 --- a/src/core/utils/CommonUtils.cpp +++ b/src/core/utils/CommonUtils.cpp @@ -74,6 +74,11 @@ auto GFCompareSoftwareVersion(const QString& a, const QString& b) -> int { return 0; } +auto GFSoftwareVersionGreaterThan(const QString& a, const QString& b) -> bool { + if (a.isEmpty()) return false; + return GFCompareSoftwareVersion(a, b) > 0; +} + auto GFStrDup(const QString& s) -> char* { if (s.isEmpty()) return nullptr; diff --git a/src/core/utils/CommonUtils.h b/src/core/utils/CommonUtils.h index d62f4867..b7d18891 100644 --- a/src/core/utils/CommonUtils.h +++ b/src/core/utils/CommonUtils.h @@ -90,4 +90,14 @@ auto GPGFRONTEND_CORE_EXPORT ParseHexEncodedVersionTuple(const QString &s) */ auto GPGFRONTEND_CORE_EXPORT IsEmailAddress(const QString &) -> bool; +/** + * @brief if a > b + * + * @param a + * @param b + * @return auto + */ +auto GPGFRONTEND_CORE_EXPORT +GFSoftwareVersionGreaterThan(const QString &a, const QString &b) -> bool; + } // namespace GpgFrontend
\ No newline at end of file diff --git a/src/core/utils/GpgUtils.cpp b/src/core/utils/GpgUtils.cpp index b8824673..d8f147bb 100644 --- a/src/core/utils/GpgUtils.cpp +++ b/src/core/utils/GpgUtils.cpp @@ -30,12 +30,15 @@ #include "core/function/GlobalSettingStation.h" #include "core/function/gpg/GpgAbstractKeyGetter.h" +#include "core/function/gpg/GpgComponentInfoGetter.h" #include "core/model/GpgKey.h" #include "core/model/GpgKeyGroup.h" #include "core/model/KeyDatabaseInfo.h" #include "core/model/SettingsObject.h" #include "core/module/ModuleManager.h" #include "core/struct/settings_object/KeyDatabaseListSO.h" +#include "core/utils/CommonUtils.h" + namespace GpgFrontend { inline auto Trim(QString& s) -> QString { return s.trimmed(); } @@ -424,4 +427,54 @@ auto GPGFRONTEND_CORE_EXPORT IsKeyGroupID(const KeyId& id) -> bool { return id.startsWith("#&"); } +auto GPGFRONTEND_CORE_EXPORT +GpgAgentVersionGreaterThan(int channel, const QString& v) -> bool { + return GFSoftwareVersionGreaterThan( + GpgComponentInfoGetter::GetInstance(channel).GetGpgAgentVersion(), v); +} + +auto GPGFRONTEND_CORE_EXPORT CheckGpgVersion(int channel, + const QString& v) -> bool { + const auto ver = + GpgComponentInfoGetter::GetInstance(channel).GetGpgAgentVersion(); + + if (ver.isEmpty() || !GFSoftwareVersionGreaterThan(ver, v)) { + LOG_W() << "operation not support for gpg-agent version: " << ver + << "minimal version: " << v; + return false; + } + + const auto gnupg_version = Module::RetrieveRTValueTypedOrDefault<>( + "core", "gpgme.ctx.gnupg_version", QString{}); + + if (gnupg_version.isEmpty() || + GFCompareSoftwareVersion(gnupg_version, v) < 0) { + LOG_W() << "operation not support for gnupg version: " << gnupg_version + << "minimal version: " << v; + return false; + } + + return true; +} + +auto GPGFRONTEND_CORE_EXPORT DecidePinentry() -> QString { +#ifdef __linux__ + QStringList preferred_list = {"pinentry-gnome3", + "pinentry-qt" + "pinentry-gtk2"}; +#elif defined(__APPLE__) && defined(__MACH__) + QStringList preferred_list = {"pinentry-mac", "pinentry-qt"}; +#else + QStringList preferred_list = {"pinentry-qt"}; +#endif + + for (const QString& name : preferred_list) { + QString path = QStandardPaths::findExecutable(name); + if (!path.isEmpty()) { + return path; + } + } + + return {}; +} } // namespace GpgFrontend diff --git a/src/core/utils/GpgUtils.h b/src/core/utils/GpgUtils.h index 13612b4f..f005bbfc 100644 --- a/src/core/utils/GpgUtils.h +++ b/src/core/utils/GpgUtils.h @@ -202,4 +202,29 @@ auto GPGFRONTEND_CORE_EXPORT GetGpgKeyByGpgAbstractKey(GpgAbstractKey*) * @return false */ auto GPGFRONTEND_CORE_EXPORT IsKeyGroupID(const KeyId& id) -> bool; + +/** + * @brief + * + * @return bool + */ +auto GPGFRONTEND_CORE_EXPORT GpgAgentVersionGreaterThan(int channel, + const QString&) -> bool; + +/** + * @brief + * + * @param channel + * @return true + * @return false + */ +auto GPGFRONTEND_CORE_EXPORT CheckGpgVersion(int channel, + const QString&) -> bool; + +/** + * @brief + * + * @return QString + */ +auto GPGFRONTEND_CORE_EXPORT DecidePinentry() -> QString; } // namespace GpgFrontend
\ No newline at end of file diff --git a/src/init.cpp b/src/init.cpp index 71f24668..3d1f344b 100644 --- a/src/init.cpp +++ b/src/init.cpp @@ -184,9 +184,15 @@ void ShutdownGlobalBasicEnv(const GFCxtWPtr &p_ctx) { .toBool(); if (ctx->unit_test_mode || kill_all_gnupg_daemon_at_close) { - GpgAdvancedOperator::KillAllGpgComponents(nullptr); + const auto size = GpgContext::GetAllChannelId().size(); + for (auto i = 0; i < size; i++) { + assert(GpgAdvancedOperator::GetInstance().KillAllGpgComponents()); + } } else if (!ctx->unit_test_mode && clear_gpg_password_cache) { - GpgAdvancedOperator::ClearGpgPasswordCache(nullptr); + const auto size = GpgContext::GetAllChannelId().size(); + for (auto i = 0; i < size; i++) { + assert(GpgAdvancedOperator::GetInstance().ClearGpgPasswordCache()); + } } // first should shutdown the module system diff --git a/src/ui/UserInterfaceUtils.cpp b/src/ui/UserInterfaceUtils.cpp index 8d277ab4..dbc3f7e3 100644 --- a/src/ui/UserInterfaceUtils.cpp +++ b/src/ui/UserInterfaceUtils.cpp @@ -167,16 +167,24 @@ void CommonUtils::RaiseMessageBox(QWidget *parent, GpgError err) { } } -void CommonUtils::RaiseFailureMessageBox(QWidget *parent, GpgError err) { +void CommonUtils::RaiseMessageBoxNotSupported(QWidget *parent) { + QMessageBox::warning( + parent, tr("Operation Not Supported"), + tr("The current GnuPG version is too low and does not support this " + "operation. Please upgrade your GnuPG version to continue.")); +} + +void CommonUtils::RaiseFailureMessageBox(QWidget *parent, GpgError err, + const QString &msg) { GpgErrorDesc desc = DescribeGpgErrCode(err); GpgErrorCode err_code = CheckGpgError2ErrCode(err); QMessageBox::critical(parent, tr("Failure"), - tr("Gpg Operation failed.\n\nError code: %1\nSource: " - " %2\nDescription: %3") - .arg(err_code) - .arg(desc.first) - .arg(desc.second)); + tr("Gpg Operation failed.") + "\n\n" + + tr("Error code: %1").arg(err_code) + "\n\n\n" + + tr("Source: %1").arg(desc.first) + "\n" + + tr("Description: %1").arg(desc.second) + "\n" + + tr("Error Message: %1").arg(msg)); } void CommonUtils::SlotImportKeys(QWidget *parent, int channel, diff --git a/src/ui/UserInterfaceUtils.h b/src/ui/UserInterfaceUtils.h index fe912fcf..86b83e7f 100644 --- a/src/ui/UserInterfaceUtils.h +++ b/src/ui/UserInterfaceUtils.h @@ -113,7 +113,15 @@ class CommonUtils : public QWidget { * * @param err */ - static void RaiseFailureMessageBox(QWidget* parent, GpgError err); + static void RaiseMessageBoxNotSupported(QWidget* parent); + + /** + * @brief + * + * @param err + */ + static void RaiseFailureMessageBox(QWidget* parent, GpgError err, + const QString& msg = {}); /** * @brief diff --git a/src/ui/dialog/ADSKsPicker.cpp b/src/ui/dialog/ADSKsPicker.cpp index 878c5e96..56039a15 100644 --- a/src/ui/dialog/ADSKsPicker.cpp +++ b/src/ui/dialog/ADSKsPicker.cpp @@ -115,8 +115,7 @@ void ADSKsPicker::slot_add_adsk(const QContainer<GpgSubKey>& s_keys) { for (const auto& info : err_sub_key_infos) { failed_info.append(info); } - QString details = failed_info.join("\n\n"); - + auto details = failed_info.join("\n\n"); auto* msg_box = new QMessageBox(nullptr); msg_box->setIcon(QMessageBox::Warning); msg_box->setWindowTitle(err_sub_key_infos.size() == s_keys.size() diff --git a/src/ui/dialog/controller/GnuPGControllerDialog.cpp b/src/ui/dialog/controller/GnuPGControllerDialog.cpp index 5dacae65..3f21b57b 100644 --- a/src/ui/dialog/controller/GnuPGControllerDialog.cpp +++ b/src/ui/dialog/controller/GnuPGControllerDialog.cpp @@ -333,7 +333,8 @@ auto GnuPGControllerDialog::check_custom_gnupg_path(QString path) -> bool { QMessageBox::critical(this, tr("Illegal GnuPG Path"), tr("Target GnuPG Path is not an absolute path.")); } -#ifdef __MINGW32__ + +#if defined(_WIN32) || defined(WIN32) QFileInfo const gpgconf_info(path + "/gpgconf.exe"); #else QFileInfo const gpgconf_info(path + "/gpgconf"); diff --git a/src/ui/dialog/controller/SmartCardControllerDialog.cpp b/src/ui/dialog/controller/SmartCardControllerDialog.cpp index 73dd48b9..797fe052 100644 --- a/src/ui/dialog/controller/SmartCardControllerDialog.cpp +++ b/src/ui/dialog/controller/SmartCardControllerDialog.cpp @@ -33,6 +33,7 @@ #include "core/function/gpg/GpgSmartCardManager.h" #include "core/utils/GpgUtils.h" #include "ui/UISignalStation.h" +#include "ui/UserInterfaceUtils.h" #include "ui/dialog/key_generate/GenerateCardKeyDialog.h" // @@ -110,18 +111,22 @@ SmartCardControllerDialog::SmartCardControllerDialog(QWidget* parent) [=](bool) { modify_key_pin("OPENPGP.2"); }); connect(ui_->restartGpgAgentButton, &QPushButton::clicked, this, [=](bool) { - GpgFrontend::GpgAdvancedOperator::RestartGpgComponents( - [=](int err, DataObjectPtr) { - if (err >= 0) { - QMessageBox::information( - this, tr("Successful Operation"), - tr("Restart all the GnuPG's components successfully")); - } else { - QMessageBox::critical( - this, tr("Failed Operation"), - tr("Failed to restart all or one of the GnuPG's component(s)")); - } - }); + bool ret = true; + const auto size = GpgContext::GetAllChannelId().size(); + for (auto i = 0; i < size; i++) { + ret = GpgAdvancedOperator::GetInstance().RestartGpgComponents(); + if (!ret) break; + } + + if (ret) { + QMessageBox::information( + this, tr("Successful Operation"), + tr("Restart all the GnuPG's components successfully")); + } else { + QMessageBox::critical( + this, tr("Failed Operation"), + tr("Failed to restart all or one of the GnuPG's component(s)")); + } }); connect(ui_->generateKeysButton, &QPushButton::clicked, this, [=](bool) { @@ -163,11 +168,13 @@ void SmartCardControllerDialog::select_smart_card_by_serial_number( return; } - auto [ret, err] = + auto [err, status] = GpgSmartCardManager::GetInstance(channel_).SelectCardBySerialNumber( serial_number); - if (!ret) { - LOG_E() << "select card by serial number failed: " << err; + if (err != GPG_ERR_NO_ERROR) { + LOG_E() << "select card by serial number failed, err:" << CheckGpgError(err) + << "status:" << status; + CommonUtils::RaiseFailureMessageBox(this, err, status); reset_status(); return; } @@ -188,6 +195,7 @@ void SmartCardControllerDialog::fetch_smart_card_info( GpgSmartCardManager::GetInstance(channel_).FetchCardInfoBySerialNumber( serial_number); if (card_info == nullptr) { + LOG_E() << "card info is nullptr, serial number:" << serial_number; reset_status(); return; } @@ -446,9 +454,14 @@ void SmartCardControllerDialog::slot_disable_controllers(bool disable) { void SmartCardControllerDialog::slot_fetch_smart_card_keys() { ui_->fetchButton->setDisabled(true); - GpgSmartCardManager::GetInstance().Fetch( + auto err = GpgSmartCardManager::GetInstance().Fetch( ui_->currentCardComboBox->currentText()); + if (err != GPG_ERR_NO_ERROR) { + CommonUtils::RaiseFailureMessageBox(this, err); + return; + } + QTimer::singleShot(1000, [=]() { GpgCommandExecutor::GetInstance(channel_).GpgExecuteSync( {{}, @@ -524,14 +537,13 @@ void SmartCardControllerDialog::modify_key_attribute(const QString& attr) { } } - auto [r, err] = + auto [err, status] = GpgSmartCardManager::GetInstance(channel_).ModifyAttr(attr, value); - if (!r) { - LOG_D() << "SCD SETATTR command failed for attr" << attr; - QMessageBox::critical( - this, tr("Failed"), - tr("Failed to set attribute '%1'. Reason: %2. ").arg(attr).arg(err)); + if (err != GPG_ERR_NO_ERROR) { + LOG_D() << "SCD SETATTR command failed for attr:" << attr + << ", err:" << CheckGpgError(err); + CommonUtils::RaiseFailureMessageBox(this, err, status); return; } QMessageBox::information(this, tr("Success"), @@ -540,22 +552,11 @@ void SmartCardControllerDialog::modify_key_attribute(const QString& attr) { } void SmartCardControllerDialog::modify_key_pin(const QString& pinref) { - auto [success, err] = + auto [err, status] = GpgSmartCardManager::GetInstance(channel_).ModifyPin(pinref); - if (!success) { - QString message; - if (pinref == "OPENPGP.3") { - message = tr("Failed to change Admin PIN."); - } else if (pinref == "OPENPGP.2") { - message = tr("Failed to set the Reset Code."); - } else { - message = tr("Failed to change PIN."); - } - - message += tr("Reason: ") + err; - - QMessageBox::critical(this, tr("Error"), message); + if (err != GPG_ERR_NO_ERROR) { + CommonUtils::RaiseFailureMessageBox(this, err, status); return; } diff --git a/src/ui/dialog/key_generate/KeyGenerateDialog.cpp b/src/ui/dialog/key_generate/KeyGenerateDialog.cpp index d738029d..df8b5232 100644 --- a/src/ui/dialog/key_generate/KeyGenerateDialog.cpp +++ b/src/ui/dialog/key_generate/KeyGenerateDialog.cpp @@ -49,8 +49,9 @@ KeyGenerateDialog::KeyGenerateDialog(int channel, QWidget* 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()), + supported_primary_key_algos_( + KeyGenerateInfo::GetSupportedKeyAlgo(channel)), + supported_subkey_algos_(KeyGenerateInfo::GetSupportedSubkeyAlgo(channel)), channel_(channel) { ui_->setupUi(this); @@ -146,6 +147,10 @@ KeyGenerateDialog::KeyGenerateDialog(int channel, QWidget* parent) this->setWindowTitle(tr("Generate Key")); this->setAttribute(Qt::WA_DeleteOnClose); this->setModal(true); + + this->show(); + this->raise(); + this->activateWindow(); } void KeyGenerateDialog::slot_key_gen_accept() { diff --git a/src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp b/src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp index fd592733..68c68765 100644 --- a/src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp +++ b/src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp @@ -50,7 +50,8 @@ SubkeyGenerateDialog::SubkeyGenerateDialog(int channel, GpgKeyPtr key, current_gpg_context_channel_(channel), key_(std::move(key)), gen_subkey_info_(QSharedPointer<KeyGenerateInfo>::create(true)), - supported_subkey_algos_(KeyGenerateInfo::GetSupportedSubkeyAlgo()) { + supported_subkey_algos_(KeyGenerateInfo::GetSupportedSubkeyAlgo( + current_gpg_context_channel_)) { ui_->setupUi(this); assert(key_ != nullptr); @@ -88,6 +89,10 @@ SubkeyGenerateDialog::SubkeyGenerateDialog(int channel, GpgKeyPtr key, set_signal_slot_config(); refresh_widgets_state(); + + this->show(); + this->raise(); + this->activateWindow(); } void SubkeyGenerateDialog::set_signal_slot_config() { diff --git a/src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp b/src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp index 73e7f4e5..64e4d029 100644 --- a/src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp +++ b/src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp @@ -31,7 +31,6 @@ #include "core/function/gpg/GpgKeyGetter.h" #include "core/function/gpg/GpgKeyImportExporter.h" #include "core/function/gpg/GpgKeyManager.h" -#include "core/function/gpg/GpgKeyOpera.h" #include "core/utils/CommonUtils.h" #include "core/utils/GpgUtils.h" #include "core/utils/IOUtils.h" @@ -66,6 +65,11 @@ KeyPairSubkeyTab::KeyPairSubkeyTab(int channel, GpgKeyPtr key, QWidget* parent) add_adsk_button->hide(); } + if (!CheckGpgVersion(channel, "2.4.1")) { + add_adsk_button->setDisabled(true); + add_adsk_button->hide(); + } + uid_buttons_layout->addWidget(add_subkey_button, 0, 0); uid_buttons_layout->addWidget(add_adsk_button, 0, 1); @@ -277,9 +281,12 @@ void KeyPairSubkeyTab::slot_refresh_subkey_list() { } void KeyPairSubkeyTab::slot_add_subkey() { - auto* dialog = - new SubkeyGenerateDialog(current_gpg_context_channel_, key_, this); - dialog->show(); + if (!CheckGpgVersion(current_gpg_context_channel_, "2.2.0")) { + CommonUtils::RaiseMessageBoxNotSupported(this); + return; + } + + new SubkeyGenerateDialog(current_gpg_context_channel_, key_, this); } void KeyPairSubkeyTab::slot_add_adsk() { diff --git a/src/ui/dialog/keypair_details/KeyPairSubkeyTab.h b/src/ui/dialog/keypair_details/KeyPairSubkeyTab.h index 3d9eeb50..c7d7a08a 100644 --- a/src/ui/dialog/keypair_details/KeyPairSubkeyTab.h +++ b/src/ui/dialog/keypair_details/KeyPairSubkeyTab.h @@ -47,55 +47,13 @@ class KeyPairSubkeyTab : public QWidget { */ KeyPairSubkeyTab(int channel, GpgKeyPtr key, QWidget* parent); - private: - /** - * @brief Create a subkey list object - * - */ - void create_subkey_list(); - - /** - * @brief Create a subkey opera menu object - * - */ - void create_subkey_opera_menu(); - + protected: /** - * @brief Get the selected subkey object + * @brief * - * @return const GpgSubKey& + * @param event */ - auto get_selected_subkey() -> const GpgSubKey&; - - int current_gpg_context_channel_; - GpgKeyPtr key_; ///< - QTableWidget* subkey_list_{}; ///< - QContainer<GpgSubKey> buffered_subkeys_; ///< - - QGroupBox* list_box_; ///< - QGroupBox* detail_box_; ///< - - QMenu* subkey_opera_menu_{}; ///< - - QLabel* key_type_var_label_; - QLabel* key_size_var_label_; ///< Label containing the keys key size - QLabel* expire_var_label_; ///< Label containing the keys expiration date - QLabel* revoke_var_label_; - QLabel* created_var_label_; ///< Label containing the keys creation date - QLabel* algorithm_var_label_; ///< Label containing the keys algorithm - QLabel* algorithm_detail_var_label_; ///< - QLabel* key_id_var_label_; ///< Label containing the keys keyid - QLabel* fingerprint_var_label_; ///< Label containing the keys fingerprint - QLabel* usage_var_label_; ///< - QLabel* master_key_exist_var_label_; ///< - QLabel* card_key_label_; ///< - - QPushButton* export_subkey_button_; - QAction* export_subkey_act_; - - QAction* edit_subkey_act_; - QAction* delete_subkey_act_; - QAction* revoke_subkey_act_; + void contextMenuEvent(QContextMenuEvent* event) override; private slots: @@ -161,13 +119,55 @@ class KeyPairSubkeyTab : public QWidget { */ void SignalKeyDatabaseRefresh(); - protected: + private: + int current_gpg_context_channel_; + GpgKeyPtr key_; ///< + QTableWidget* subkey_list_{}; ///< + QContainer<GpgSubKey> buffered_subkeys_; ///< + + QGroupBox* list_box_; ///< + QGroupBox* detail_box_; ///< + + QMenu* subkey_opera_menu_{}; ///< + + QLabel* key_type_var_label_; + QLabel* key_size_var_label_; ///< Label containing the keys key size + QLabel* expire_var_label_; ///< Label containing the keys expiration date + QLabel* revoke_var_label_; + QLabel* created_var_label_; ///< Label containing the keys creation date + QLabel* algorithm_var_label_; ///< Label containing the keys algorithm + QLabel* algorithm_detail_var_label_; ///< + QLabel* key_id_var_label_; ///< Label containing the keys keyid + QLabel* fingerprint_var_label_; ///< Label containing the keys fingerprint + QLabel* usage_var_label_; ///< + QLabel* master_key_exist_var_label_; ///< + QLabel* card_key_label_; ///< + + QPushButton* export_subkey_button_; + QAction* export_subkey_act_; + + QAction* edit_subkey_act_; + QAction* delete_subkey_act_; + QAction* revoke_subkey_act_; + /** - * @brief + * @brief Create a subkey list object * - * @param event */ - void contextMenuEvent(QContextMenuEvent* event) override; + void create_subkey_list(); + + /** + * @brief Create a subkey opera menu object + * + */ + void create_subkey_opera_menu(); + + /** + * @brief Get the selected subkey object + * + * @return const GpgSubKey& + */ + auto get_selected_subkey() -> const GpgSubKey&; }; } // namespace GpgFrontend::UI diff --git a/src/ui/function/GpgOperaHelper.cpp b/src/ui/function/GpgOperaHelper.cpp index 91bc6c38..82742b93 100644 --- a/src/ui/function/GpgOperaHelper.cpp +++ b/src/ui/function/GpgOperaHelper.cpp @@ -90,6 +90,12 @@ auto GpgOperaHelper::BuildSimpleGpgFileOperasHelper( // stop waiting op_hd(); + if (CheckGpgError(err) == GPG_ERR_NOT_SUPPORTED) { + opera_results.append({-1, "# " + tr("Operation Not Supported"), + QFileInfo(path).fileName()}); + return; + } + if (CheckGpgError(err) == GPG_ERR_USER_1 || data_obj == nullptr || !data_obj->Check<ResultType>()) { opera_results.append( @@ -126,6 +132,12 @@ auto GpgOperaHelper::BuildComplexGpgFileOperasHelper( // stop waiting op_hd(); + if (CheckGpgError(err) == GPG_ERR_NOT_SUPPORTED) { + opera_results.append({-1, "# " + tr("Operation Not Supported"), + QFileInfo(path).fileName()}); + return; + } + if (CheckGpgError(err) == GPG_ERR_USER_1 || data_obj == nullptr || !data_obj->Check<ResultTypeA, ResultTypeB>()) { opera_results.append( @@ -169,6 +181,11 @@ auto GpgOperaHelper::BuildSimpleGpgOperasHelper( // stop waiting op_hd(); + if (CheckGpgError(err) == GPG_ERR_NOT_SUPPORTED) { + opera_results.append({-1, "# " + tr("Operation Not Supported"), {}}); + return; + } + if (CheckGpgError(err) == GPG_ERR_USER_1 || data_obj == nullptr || !data_obj->Check<ResultType, GFBuffer>()) { opera_results.append({-1, "# " + tr("Critical Error"), {}}); @@ -207,6 +224,11 @@ auto GpgOperaHelper::BuildComplexGpgOperasHelper( // stop waiting op_hd(); + if (CheckGpgError(err) == GPG_ERR_NOT_SUPPORTED) { + opera_results.append({-1, "# " + tr("Operation Not Supported"), {}}); + return; + } + if (CheckGpgError(err) == GPG_ERR_USER_1 || data_obj == nullptr || !data_obj->Check<ResultTypeA, ResultTypeB, GFBuffer>()) { opera_results.append({-1, "# " + tr("Critical Error"), {}}); diff --git a/src/ui/main_window/KeyMgmt.cpp b/src/ui/main_window/KeyMgmt.cpp index e3128231..f9364ecf 100644 --- a/src/ui/main_window/KeyMgmt.cpp +++ b/src/ui/main_window/KeyMgmt.cpp @@ -428,12 +428,20 @@ void KeyMgmt::SlotExportKeyToClipboard() { } void KeyMgmt::SlotGenerateKeyDialog() { - (new KeyGenerateDialog(key_list_->GetCurrentGpgContextChannel(), this)) - ->exec(); - this->raise(); + if (!CheckGpgVersion(key_list_->GetCurrentGpgContextChannel(), "2.2.0")) { + CommonUtils::RaiseMessageBoxNotSupported(this); + return; + } + + new KeyGenerateDialog(key_list_->GetCurrentGpgContextChannel(), this); } void KeyMgmt::SlotGenerateSubKey() { + if (!CheckGpgVersion(key_list_->GetCurrentGpgContextChannel(), "2.2.0")) { + CommonUtils::RaiseMessageBoxNotSupported(this); + return; + } + auto key = key_list_->GetSelectedGpgKey(); if (key == nullptr) return; @@ -444,10 +452,7 @@ void KeyMgmt::SlotGenerateSubKey() { return; } - (new SubkeyGenerateDialog(key_list_->GetCurrentGpgContextChannel(), key, - this)) - ->exec(); - this->raise(); + new SubkeyGenerateDialog(key_list_->GetCurrentGpgContextChannel(), key, this); } void KeyMgmt::SlotExportAsOpenSSHFormat() { diff --git a/src/ui/main_window/MainWindow.cpp b/src/ui/main_window/MainWindow.cpp index 104f54d8..8c8fd55e 100644 --- a/src/ui/main_window/MainWindow.cpp +++ b/src/ui/main_window/MainWindow.cpp @@ -31,6 +31,8 @@ #include "core/function/GlobalSettingStation.h" #include "core/model/SettingsObject.h" #include "core/module/ModuleManager.h" +#include "core/utils/CommonUtils.h" +#include "core/utils/GpgUtils.h" #include "ui/UISignalStation.h" #include "ui/main_window/GeneralMainWindow.h" #include "ui/struct/settings_object/AppearanceSO.h" @@ -115,6 +117,25 @@ void MainWindow::Init() noexcept { &UISignalStation::SignalMainWindowOpenFile, this, &MainWindow::SlotOpenFile); +#if !(defined(_WIN32) || defined(WIN32)) + connect(this, &MainWindow::SignalLoaded, this, [=]() { + QTimer::singleShot(3000, [self = QPointer<MainWindow>(this)]() { + if (self != nullptr && DecidePinentry().isEmpty() && !IsFlatpakENV()) { + QMessageBox::warning( + self, tr("GUI Pinentry Not Found"), + tr("No suitable *graphical* Pinentry program was found on your " + "system.\n\n" + "Please install a GUI-based Pinentry (e.g., 'pinentry-qt', " + "'pinentry-gnome3', or 'pinentry-mac' on macOS).\n\n" + "Without a GUI Pinentry, GnuPG cannot prompt you for " + "passwords or passphrases.\n\n" + "After installing it, please restart GpgFrontend. The " + "configuration file will be updated automatically.")); + } + }); + }); +#endif + popup_menu_ = new QMenu(this); popup_menu_->addAction(append_selected_keys_act_); @@ -152,7 +173,6 @@ void MainWindow::Init() noexcept { // loading process is done emit SignalLoaded(); Module::TriggerEvent("APPLICATION_LOADED"); - } catch (...) { LOG_W() << tr("Critical error occur while loading GpgFrontend."); QMessageBox::critical( diff --git a/src/ui/main_window/MainWindow.h b/src/ui/main_window/MainWindow.h index 15fb9fb1..16092609 100644 --- a/src/ui/main_window/MainWindow.h +++ b/src/ui/main_window/MainWindow.h @@ -528,7 +528,7 @@ class MainWindow : public GeneralMainWindow { * * @param results */ - void slot_update_operations_menu_by_checked_keys(unsigned int type); + void slot_update_operations_menu_by_checked_keys(unsigned int mask); /** * @brief diff --git a/src/ui/main_window/MainWindowSlotUI.cpp b/src/ui/main_window/MainWindowSlotUI.cpp index e0a72ed1..6b945beb 100644 --- a/src/ui/main_window/MainWindowSlotUI.cpp +++ b/src/ui/main_window/MainWindowSlotUI.cpp @@ -311,46 +311,58 @@ void MainWindow::SlotGeneralDecryptVerify(bool) { } void MainWindow::slot_clean_gpg_password_cache(bool) { - GpgFrontend::GpgAdvancedOperator::ClearGpgPasswordCache( - [=](int err, DataObjectPtr) { - if (err >= 0) { - QMessageBox::information(this, tr("Successful Operation"), - tr("Clear password cache successfully")); - } else { - QMessageBox::critical(this, tr("Failed Operation"), - tr("Failed to clear password cache of GnuPG")); - } - }); + bool ret = true; + const auto size = GpgContext::GetAllChannelId().size(); + for (auto i = 0; i < size; i++) { + ret = GpgAdvancedOperator::GetInstance().ClearGpgPasswordCache(); + if (!ret) break; + } + + if (ret) { + QMessageBox::information(this, tr("Successful Operation"), + tr("Clear password cache successfully")); + } else { + QMessageBox::critical(this, tr("Failed Operation"), + tr("Failed to clear password cache of GnuPG")); + } } void MainWindow::slot_reload_gpg_components(bool) { - GpgFrontend::GpgAdvancedOperator::ReloadGpgComponents( - [=](int err, DataObjectPtr) { - if (err >= 0) { - QMessageBox::information( - this, tr("Successful Operation"), - tr("Reload all the GnuPG's components successfully")); - } else { - QMessageBox::critical( - this, tr("Failed Operation"), - tr("Failed to reload all or one of the GnuPG's component(s)")); - } - }); + bool ret = true; + const auto size = GpgContext::GetAllChannelId().size(); + for (auto i = 0; i < size; i++) { + ret = GpgAdvancedOperator::GetInstance().ReloadAllGpgComponents(); + if (!ret) break; + } + + if (ret) { + QMessageBox::information( + this, tr("Successful Operation"), + tr("Reload all the GnuPG's components successfully")); + } else { + QMessageBox::critical( + this, tr("Failed Operation"), + tr("Failed to reload all or one of the GnuPG's component(s)")); + } } void MainWindow::slot_restart_gpg_components(bool) { - GpgFrontend::GpgAdvancedOperator::RestartGpgComponents( - [=](int err, DataObjectPtr) { - if (err >= 0) { - QMessageBox::information( - this, tr("Successful Operation"), - tr("Restart all the GnuPG's components successfully")); - } else { - QMessageBox::critical( - this, tr("Failed Operation"), - tr("Failed to restart all or one of the GnuPG's component(s)")); - } - }); + bool ret = true; + const auto size = GpgContext::GetAllChannelId().size(); + for (auto i = 0; i < size; i++) { + ret = GpgAdvancedOperator::GetInstance().RestartGpgComponents(); + if (!ret) break; + } + + if (ret) { + QMessageBox::information( + this, tr("Successful Operation"), + tr("Restart all the GnuPG's components successfully")); + } else { + QMessageBox::critical( + this, tr("Failed Operation"), + tr("Failed to restart all or one of the GnuPG's component(s)")); + } } void MainWindow::slot_update_operations_menu_by_checked_keys( |