aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsaturneric <[email protected]>2025-04-18 17:56:51 +0000
committersaturneric <[email protected]>2025-04-18 17:56:51 +0000
commita7ea8e6de4bb205d2a3783d5cb9bde8bee0086b9 (patch)
tree54838273836a155033d33b246ec4a4200291825b
parentfix: issues found by testing (diff)
parentfix: spelling mistake on project config by nightly build (diff)
downloadGpgFrontend-a7ea8e6de4bb205d2a3783d5cb9bde8bee0086b9.tar.gz
GpgFrontend-a7ea8e6de4bb205d2a3783d5cb9bde8bee0086b9.zip
Merge branch 'develop'
-rw-r--r--.github/workflows/testing-nightly.yml2
-rw-r--r--resource/lfs/locale/ts/GpgFrontend.de_DE.ts905
-rw-r--r--resource/lfs/locale/ts/GpgFrontend.en_US.ts881
-rw-r--r--resource/lfs/locale/ts/GpgFrontend.fr_FR.ts895
-rw-r--r--resource/lfs/locale/ts/GpgFrontend.it_IT.ts899
-rw-r--r--resource/lfs/locale/ts/GpgFrontend.zh_CN.ts905
-rw-r--r--resource/lfs/locale/ts/GpgFrontend.zh_TW.ts891
-rw-r--r--src/core/GpgCoreInit.cpp99
-rw-r--r--src/core/function/gpg/GpgAdvancedOperator.cpp93
-rw-r--r--src/core/function/gpg/GpgAdvancedOperator.h28
-rw-r--r--src/core/function/gpg/GpgAssuanHelper.cpp38
-rw-r--r--src/core/function/gpg/GpgAssuanHelper.h6
-rw-r--r--src/core/function/gpg/GpgAutomatonHandler.cpp69
-rw-r--r--src/core/function/gpg/GpgAutomatonHandler.h11
-rw-r--r--src/core/function/gpg/GpgBasicOperator.cpp44
-rw-r--r--src/core/function/gpg/GpgCommandExecutor.cpp190
-rw-r--r--src/core/function/gpg/GpgCommandExecutor.h70
-rw-r--r--src/core/function/gpg/GpgComponentInfoGetter.cpp64
-rw-r--r--src/core/function/gpg/GpgComponentInfoGetter.h72
-rw-r--r--src/core/function/gpg/GpgContext.cpp4
-rw-r--r--src/core/function/gpg/GpgFileOpera.cpp61
-rw-r--r--src/core/function/gpg/GpgKeyImportExporter.cpp2
-rw-r--r--src/core/function/gpg/GpgKeyManager.cpp26
-rw-r--r--src/core/function/gpg/GpgKeyManager.h3
-rw-r--r--src/core/function/gpg/GpgKeyOpera.cpp36
-rw-r--r--src/core/function/gpg/GpgSmartCardManager.cpp96
-rw-r--r--src/core/function/gpg/GpgSmartCardManager.h16
-rw-r--r--src/core/function/gpg/GpgUIDOperator.cpp19
-rw-r--r--src/core/function/gpg/GpgUIDOperator.h3
-rw-r--r--src/core/model/GpgKeyGenerateInfo.cpp26
-rw-r--r--src/core/model/GpgKeyGenerateInfo.h6
-rw-r--r--src/core/utils/AsyncUtils.cpp28
-rw-r--r--src/core/utils/AsyncUtils.h12
-rw-r--r--src/core/utils/CommonUtils.cpp5
-rw-r--r--src/core/utils/CommonUtils.h10
-rw-r--r--src/core/utils/GpgUtils.cpp53
-rw-r--r--src/core/utils/GpgUtils.h25
-rw-r--r--src/init.cpp10
-rw-r--r--src/ui/UserInterfaceUtils.cpp20
-rw-r--r--src/ui/UserInterfaceUtils.h10
-rw-r--r--src/ui/dialog/ADSKsPicker.cpp3
-rw-r--r--src/ui/dialog/controller/GnuPGControllerDialog.cpp3
-rw-r--r--src/ui/dialog/controller/SmartCardControllerDialog.cpp73
-rw-r--r--src/ui/dialog/key_generate/KeyGenerateDialog.cpp9
-rw-r--r--src/ui/dialog/key_generate/SubkeyGenerateDialog.cpp7
-rw-r--r--src/ui/dialog/keypair_details/KeyPairSubkeyTab.cpp15
-rw-r--r--src/ui/dialog/keypair_details/KeyPairSubkeyTab.h100
-rw-r--r--src/ui/function/GpgOperaHelper.cpp22
-rw-r--r--src/ui/main_window/KeyMgmt.cpp19
-rw-r--r--src/ui/main_window/MainWindow.cpp22
-rw-r--r--src/ui/main_window/MainWindow.h2
-rw-r--r--src/ui/main_window/MainWindowSlotUI.cpp80
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&apos;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 &quot;gpgconf&quot; 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&apos;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&apos;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>&lt;h3&gt;You are about to delete the subkey:&lt;/h3&gt;&lt;br /&gt;&lt;b&gt;KeyID:&lt;/b&gt; %1&lt;br /&gt;&lt;br /&gt;This action is irreversible. Please confirm.</source>
<translation>&lt;h3&gt;Sie sind dabei, den Unterschlüssel zu löschen:&lt;/h3&gt;&lt;br /&gt;&lt;b&gt;KeyID:&lt;/b&gt; %1&lt;br /&gt;&lt;br /&gt;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>&lt;h3&gt;Revoke Subkey Confirmation&lt;/h3&gt;&lt;br /&gt;&lt;b&gt;KeyID:&lt;/b&gt; %1&lt;br /&gt;&lt;br /&gt;Revoking a subkey will make it permanently unusable. This action is &lt;b&gt;irreversible&lt;/b&gt;.&lt;br /&gt;Are you sure you want to revoke this subkey?</source>
<translation>&lt;h3&gt;Unterschlüssel widerrufen Bestätigung&lt;/h3&gt;&lt;br /&gt;&lt;b&gt;KeyID:&lt;/b&gt; %1&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Das Widerrufen eines Unterschlüssels macht ihn dauerhaft unbrauchbar. Diese Aktion ist &lt;b&gt;irreversibel&lt;/b&gt;.&lt;br /&gt;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 -&gt; No Reason.</source>
<translation>0 -&gt; 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 -&gt; This key is no more safe.</source>
<translation>1 -&gt; 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 -&gt; Key is outdated.</source>
<translation>2 -&gt; 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 -&gt; Key is no longer used</source>
<translation>3 -&gt; 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., &apos;pinentry-qt&apos;, &apos;pinentry-gnome3&apos;, or &apos;pinentry-mac&apos; 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. &quot;pinentry-qt&quot;, &quot;pinentry-gnome3&quot; oder &quot;pinentry-mac&quot; 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&apos;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&apos;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&apos;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&apos;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&apos;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&apos;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&apos;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.&#x202f;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&apos;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.&#x202f;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 &apos;%1&apos;</source>
<translation>Geschlecht zur Speicherung in &apos;%1&apos; 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 &apos;%1&apos;</source>
<translation>Neuen Wert für Attribut &apos;%1&apos; 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 &apos;%1&apos;. 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&apos;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&apos;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 &quot;gpgconf&quot; 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&apos;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&apos;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>&lt;h3&gt;You are about to delete the subkey:&lt;/h3&gt;&lt;br /&gt;&lt;b&gt;KeyID:&lt;/b&gt; %1&lt;br /&gt;&lt;br /&gt;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>&lt;h3&gt;Revoke Subkey Confirmation&lt;/h3&gt;&lt;br /&gt;&lt;b&gt;KeyID:&lt;/b&gt; %1&lt;br /&gt;&lt;br /&gt;Revoking a subkey will make it permanently unusable. This action is &lt;b&gt;irreversible&lt;/b&gt;.&lt;br /&gt;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 -&gt; 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 -&gt; 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 -&gt; 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 -&gt; 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., &apos;pinentry-qt&apos;, &apos;pinentry-gnome3&apos;, or &apos;pinentry-mac&apos; 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&apos;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&apos;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&apos;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&apos;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&apos;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&apos;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&apos;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&apos;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 &apos;%1&apos;</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 &apos;%1&apos;</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 &apos;%1&apos;. 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&apos;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&apos;opération Gpg a échoué.
-
-Code d&apos;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&apos;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&apos;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&apos;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&apos;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&apos;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&apos;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&amp;#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 &quot;gpgconf&quot; executable.</source>
<translation type="unfinished">Le chemin GnuPG cible ne contient pas d&amp;#39;exécutable &amp;quot;gpgconf&amp;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&apos;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&apos;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&apos;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&apos;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&apos;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&apos;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&apos;est produite lors de l&apos;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&apos;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&apos;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&apos;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&apos;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&apos;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&apos;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&apos;t open %1 for writing</source>
<translation type="unfinished">Impossible d&apos;ouvrir %1 pour l&apos;é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>&lt;h3&gt;You are about to delete the subkey:&lt;/h3&gt;&lt;br /&gt;&lt;b&gt;KeyID:&lt;/b&gt; %1&lt;br /&gt;&lt;br /&gt;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&apos;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>&lt;h3&gt;Revoke Subkey Confirmation&lt;/h3&gt;&lt;br /&gt;&lt;b&gt;KeyID:&lt;/b&gt; %1&lt;br /&gt;&lt;br /&gt;Revoking a subkey will make it permanently unusable. This action is &lt;b&gt;irreversible&lt;/b&gt;.&lt;br /&gt;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 -&gt; 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 -&gt; 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 -&gt; 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 -&gt; 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&#xa0;!</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&apos;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&#xa0;!</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&#xa0;!</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&apos;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., &apos;pinentry-qt&apos;, &apos;pinentry-gnome3&apos;, or &apos;pinentry-mac&apos; 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&apos;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&apos;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&apos;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&apos;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&apos;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&apos;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&apos;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&apos;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&apos;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&apos;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&apos;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&apos;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 &apos;%1&apos;</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 &apos;%1&apos;</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 &apos;%1&apos;. 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&apos;s passphrase must be equal to it.</source>
<translation type="unfinished">Conseil&#xa0;: 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&apos;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&apos;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&apos;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&apos;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 &quot;gpgconf&quot; executable.</source>
<translation>Il percorso GnuPG di destinazione non contiene l&apos;eseguibile &quot;gpgconf&quot;.</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&apos;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&apos;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&apos;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&apos;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&apos;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>&lt;h3&gt;You are about to delete the subkey:&lt;/h3&gt;&lt;br /&gt;&lt;b&gt;KeyID:&lt;/b&gt; %1&lt;br /&gt;&lt;br /&gt;This action is irreversible. Please confirm.</source>
<translation>&lt;h3&gt;Stai per eliminare la sottochiave:&lt;/h3&gt;&lt;br /&gt;&lt;b&gt;KeyID:&lt;/b&gt; %1&lt;br /&gt;&lt;br /&gt;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>&lt;h3&gt;Revoke Subkey Confirmation&lt;/h3&gt;&lt;br /&gt;&lt;b&gt;KeyID:&lt;/b&gt; %1&lt;br /&gt;&lt;br /&gt;Revoking a subkey will make it permanently unusable. This action is &lt;b&gt;irreversible&lt;/b&gt;.&lt;br /&gt;Are you sure you want to revoke this subkey?</source>
<translation>&lt;h3&gt;Conferma revoca sottochiave&lt;/h3&gt;&lt;br /&gt;&lt;b&gt;KeyID:&lt;/b&gt; %1&lt;br /&gt;&lt;br /&gt;La revoca di una sottochiave la renderà definitivamente inutilizzabile. Questa azione è &lt;b&gt;irreversibile&lt;/b&gt;.&lt;br /&gt;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 -&gt; No Reason.</source>
<translation>0 -&gt; 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 -&gt; This key is no more safe.</source>
<translation>1 -&gt; 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 -&gt; Key is outdated.</source>
<translation>2 -&gt; 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 -&gt; Key is no longer used</source>
<translation>3 -&gt; 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&apos;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., &apos;pinentry-qt&apos;, &apos;pinentry-gnome3&apos;, or &apos;pinentry-mac&apos; 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&apos;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&apos;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&apos;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&apos;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&apos;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&apos;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&apos;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&apos;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 &apos;%1&apos;</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 &apos;%1&apos;</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 &apos;%1&apos;. 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&apos;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&apos;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&apos;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&apos;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 &quot;gpgconf&quot; 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&apos;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&apos;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>&lt;h3&gt;You are about to delete the subkey:&lt;/h3&gt;&lt;br /&gt;&lt;b&gt;KeyID:&lt;/b&gt; %1&lt;br /&gt;&lt;br /&gt;This action is irreversible. Please confirm.</source>
<translation>&lt;h3&gt;您即将删除子密钥:&lt;/h3&gt;&lt;br /&gt;&lt;b&gt;KeyID:&lt;/b&gt; %1&lt;br /&gt;&lt;br /&gt;此操作不可逆。请确认。</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>&lt;h3&gt;Revoke Subkey Confirmation&lt;/h3&gt;&lt;br /&gt;&lt;b&gt;KeyID:&lt;/b&gt; %1&lt;br /&gt;&lt;br /&gt;Revoking a subkey will make it permanently unusable. This action is &lt;b&gt;irreversible&lt;/b&gt;.&lt;br /&gt;Are you sure you want to revoke this subkey?</source>
<translation>&lt;h3&gt;子密钥吊销确认&lt;/h3&gt;&lt;br /&gt;&lt;b&gt;KeyID:&lt;/b&gt;%1&lt;br /&gt;&lt;br /&gt;吊销子密钥将使其永久不可用。此操作是 &lt;b&gt;不可逆的&lt;/b&gt;。&lt;br /&gt;您确定要撤销此子密钥吗?</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 -&gt; No Reason.</source>
<translation>0 -&gt; 无理由。</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 -&gt; This key is no more safe.</source>
<translation>1 -&gt; 密钥不再安全。</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 -&gt; Key is outdated.</source>
<translation>2 -&gt; 密钥已经过时。</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 -&gt; Key is no longer used</source>
<translation>3 -&gt; 密钥不再被使用。</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., &apos;pinentry-qt&apos;, &apos;pinentry-gnome3&apos;, or &apos;pinentry-mac&apos; 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&apos;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&apos;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&apos;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&apos;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&apos;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&apos;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&apos;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&apos;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 &apos;%1&apos;</source>
<translation>选择存储在 &apos;%1&apos; 中的性别</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 &apos;%1&apos;</source>
<translation>请输入 &apos;%1&apos; 的新值</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 &apos;%1&apos;. Reason: %2. </source>
- <translation>修改属性 &apos;%1&apos; 失败。 原因: %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&apos;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&apos;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 &quot;gpgconf&quot; 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&apos;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&apos;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>&lt;h3&gt;You are about to delete the subkey:&lt;/h3&gt;&lt;br /&gt;&lt;b&gt;KeyID:&lt;/b&gt; %1&lt;br /&gt;&lt;br /&gt;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>&lt;h3&gt;Revoke Subkey Confirmation&lt;/h3&gt;&lt;br /&gt;&lt;b&gt;KeyID:&lt;/b&gt; %1&lt;br /&gt;&lt;br /&gt;Revoking a subkey will make it permanently unusable. This action is &lt;b&gt;irreversible&lt;/b&gt;.&lt;br /&gt;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 -&gt; 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 -&gt; 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 -&gt; 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 -&gt; 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., &apos;pinentry-qt&apos;, &apos;pinentry-gnome3&apos;, or &apos;pinentry-mac&apos; 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&apos;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&apos;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&apos;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&apos;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&apos;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&apos;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&apos;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&apos;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 &apos;%1&apos;</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 &apos;%1&apos;</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 &apos;%1&apos;. 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&apos;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(