aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.github/workflows/release-ci.yml24
-rw-r--r--.github/workflows/release.yml25
-rw-r--r--README.md3
-rw-r--r--include/GpgFrontend.h.in22
-rw-r--r--include/GpgFrontendBuildInfo.h.in13
-rw-r--r--include/MainWindow.h10
-rw-r--r--include/advance/UnknownSignersChecker.h52
-rw-r--r--include/gpg/GpgConstants.h1
-rw-r--r--include/gpg/GpgContext.h46
-rw-r--r--include/gpg/GpgInfo.h (renamed from src/ui/keygen/KeygenThread.cpp)27
-rw-r--r--include/gpg/GpgKeySignature.h7
-rw-r--r--include/gpg/GpgUID.h5
-rw-r--r--include/gpg/result_analyse/DecryptResultAnalyse.h29
-rw-r--r--include/gpg/result_analyse/EncryptResultAnalyse.h29
-rw-r--r--include/gpg/result_analyse/ResultAnalyse.h30
-rw-r--r--include/gpg/result_analyse/SignResultAnalyse.h33
-rw-r--r--include/gpg/result_analyse/VerifyResultAnalyse.h26
-rw-r--r--include/server/BaseAPI.h73
-rw-r--r--include/server/ComUtils.h79
-rw-r--r--include/server/api/PubkeyGetter.h (renamed from include/ui/keygen/SubkeyGenerateThread.h)32
-rw-r--r--include/server/api/PubkeyUploader.h58
-rwxr-xr-xinclude/ui/FileEncryptionDialog.h14
-rw-r--r--include/ui/KeyImportDetailDialog.h1
-rwxr-xr-xinclude/ui/KeyMgmt.h1
-rwxr-xr-xinclude/ui/SettingsDialog.h18
-rw-r--r--include/ui/ShowCopyDialog.h (renamed from src/ui/keygen/SubkeyGenerateThread.cpp)32
-rw-r--r--include/ui/Wizard.h66
-rw-r--r--include/ui/help/AboutDialog.h13
-rw-r--r--include/ui/help/VersionCheckThread.h26
-rw-r--r--include/ui/keygen/KeygenDialog.h5
-rw-r--r--include/ui/keygen/SubkeyGenerateDialog.h10
-rw-r--r--include/ui/keypair_details/EditSubKeyDialog.h26
-rw-r--r--include/ui/widgets/InfoBoardWidget.h2
-rw-r--r--include/ui/widgets/SignersPicker.h (renamed from include/ui/keygen/KeygenThread.h)26
-rw-r--r--resource/conf/gpgfrontend.ini36
-rw-r--r--resource/css/default.qss1238
-rw-r--r--resource/icons/check.pngbin0 -> 4779 bytes
-rw-r--r--resource/icons/down.pngbin0 -> 4859 bytes
-rw-r--r--resource/icons/up-arrow.pngbin0 -> 4969 bytes
-rw-r--r--resource/ts/gpgfrontend_en_us.ts1360
-rw-r--r--resource/ts/gpgfrontend_es.ts2620
-rw-r--r--resource/ts/gpgfrontend_fr.ts2536
-rw-r--r--resource/ts/gpgfrontend_ru.ts2564
-rw-r--r--resource/ts/gpgfrontend_zh_cn.ts2630
-rw-r--r--src/CMakeLists.txt21
-rw-r--r--src/MainWindow.cpp2
-rw-r--r--src/advance/CMakeLists.txt6
-rw-r--r--src/advance/UnknownSignersChecker.cpp81
-rw-r--r--src/gpg/CMakeLists.txt1
-rw-r--r--src/gpg/GpgConstants.cpp1
-rw-r--r--src/gpg/GpgContext.cpp1234
-rw-r--r--src/gpg/GpgFileOpera.cpp7
-rw-r--r--src/gpg/GpgInfo.cpp25
-rw-r--r--src/gpg/GpgUID.cpp26
-rw-r--r--src/gpg/gpg_context/GpgContext.cpp410
-rw-r--r--src/gpg/gpg_context/GpgContextBasicOpera.cpp315
-rw-r--r--src/gpg/gpg_context/GpgContextKeyInfo.cpp110
-rw-r--r--src/gpg/gpg_context/GpgContextKeyOpera.cpp410
-rw-r--r--src/gpg/gpg_context/GpgContextSubkeyOpera.cpp61
-rw-r--r--src/gpg/gpg_context/GpgContextUIDOpera.cpp80
-rw-r--r--src/gpg/result_analyse/DecryptResultAnalyse.cpp67
-rw-r--r--src/gpg/result_analyse/EncryptResultAnalyse.cpp49
-rw-r--r--src/gpg/result_analyse/ResultAnalyse.cpp26
-rw-r--r--src/gpg/result_analyse/SignResultAnalyse.cpp53
-rw-r--r--src/gpg/result_analyse/VerifyResultAnalyse.cpp76
-rw-r--r--src/main.cpp4
-rw-r--r--src/server/BaseAPI.cpp70
-rw-r--r--src/server/CMakeLists.txt7
-rw-r--r--src/server/ComUtils.cpp197
-rw-r--r--src/server/api/PubkeyGetter.cpp96
-rw-r--r--src/server/api/PubkeyUploader.cpp106
-rw-r--r--src/ui/CMakeLists.txt1
-rwxr-xr-xsrc/ui/FileEncryptionDialog.cpp2
-rwxr-xr-xsrc/ui/KeyMgmt.cpp106
-rw-r--r--src/ui/KeyUploadDialog.cpp2
-rwxr-xr-xsrc/ui/SettingsDialog.cpp777
-rw-r--r--src/ui/ShowCopyDialog.cpp53
-rw-r--r--src/ui/Wizard.cpp242
-rw-r--r--src/ui/help/AboutDialog.cpp54
-rw-r--r--src/ui/help/VersionCheckThread.cpp26
-rw-r--r--src/ui/keygen/KeygenDialog.cpp42
-rw-r--r--src/ui/keygen/SubkeyGenerateDialog.cpp41
-rw-r--r--src/ui/keypair_details/EditSubKeyDialog.cpp26
-rw-r--r--src/ui/keypair_details/KeyPairDetailTab.cpp18
-rw-r--r--src/ui/keypair_details/KeyPairSubkeyTab.cpp3
-rw-r--r--src/ui/keypair_details/KeyUIDSignDialog.cpp3
-rw-r--r--src/ui/main_window/MainWindowFileSlotFunction.cpp610
-rw-r--r--src/ui/main_window/MainWindowServerSlotFunction.cpp238
-rw-r--r--src/ui/main_window/MainWindowSlotFunction.cpp774
-rw-r--r--src/ui/settings/SettingsAdvanced.cpp67
-rw-r--r--src/ui/settings/SettingsAppearance.cpp187
-rw-r--r--src/ui/settings/SettingsDialog.cpp205
-rw-r--r--src/ui/settings/SettingsGeneral.cpp358
-rw-r--r--src/ui/settings/SettingsKeyServer.cpp148
-rw-r--r--src/ui/settings/SettingsSendMail.cpp193
-rw-r--r--src/ui/widgets/EditorPage.cpp2
-rw-r--r--src/ui/widgets/InfoBoardWidget.cpp37
-rw-r--r--src/ui/widgets/KeyList.cpp150
-rw-r--r--src/ui/widgets/SignersPicker.cpp59
99 files changed, 13417 insertions, 8396 deletions
diff --git a/.github/workflows/release-ci.yml b/.github/workflows/release-ci.yml
index e4371bfc..2823e056 100644
--- a/.github/workflows/release-ci.yml
+++ b/.github/workflows/release-ci.yml
@@ -42,6 +42,16 @@ jobs:
sudo apt-get -y install libglu1-mesa-dev libfontconfig1-dev libx11-xcb-dev libicu-dev libxcb-*
if: matrix.os == 'ubuntu-16.04'
+ - name: Codesign Configuration (macOS)
+ run: |
+ echo ${{secrets.MACOS_CERTIFICATE}} | base64 --decode > certificate.p12
+ security create-keychain -p gpgfrontend build.keychain
+ security default-keychain -s build.keychain
+ security unlock-keychain -p gpgfrontend build.keychain
+ security import certificate.p12 -k build.keychain -P ${{secrets.MAOS_CERTIFICATE_PWD}} -T /usr/bin/codesign
+ security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k gpgfrontend build.keychain
+ if: matrix.os == 'macos-latest'
+
- name: Install Dependence (macOS)
run: |
brew install cmake git autoconf automake qt@5 gcc texinfo gettext libgpg-error libassuan gpgme openssl
@@ -132,13 +142,25 @@ jobs:
run: cmake --build ${{github.workspace}}/build --config $env.BUILD_TYPE}} -- -j 2
if: matrix.os == 'ubuntu-16.04' || matrix.os == 'macos-latest'
- - name: Package App Bundle (macOS)
+ - name: Build & Sign App Bundle (macOS)
run: |
macdeployqt ${{github.workspace}}/build/release/GpgFrontend.app
+ codesign --deep --force --options=runtime -s "Developer ID Application: Yu Hu (4279AWUL3X)" ${{github.workspace}}/build/release/GpgFrontend.app -v
mkdir ${{github.workspace}}/build/tmp/
+ if: matrix.os == 'macos-latest'
+
+ - name: Package & Sign App Bundle (macOS)
+ run: |
hdiutil create ${{github.workspace}}/build/tmp/tmp.dmg -ov -volname "GpgFrontend" -fs HFS+ -srcfolder ${{github.workspace}}/build/release/
mkdir ${{github.workspace}}/build/artifactOut
hdiutil convert ${{github.workspace}}/build/tmp/tmp.dmg -format UDZO -o ${{github.workspace}}/build/artifactOut/GpgFrontend.dmg
+ codesign -s "Developer ID Application: Yu Hu (4279AWUL3X)" ${{github.workspace}}/build/artifactOut/GpgFrontend.dmg
+ mv ${{github.workspace}}/build/artifactOut/GpgFrontend.dmg ${{github.workspace}}/build/artifactOut/GpgFrontend-${{steps.vars.outputs.sha_short}}-x86_64.dmg
+ if: matrix.os == 'macos-latest'
+
+ - name: Notarize Release Build (macOS)
+ run: |
+ xcrun altool --notarize-app -f ${{github.workspace}}/build/artifactOut/GpgFrontend-${{steps.vars.outputs.sha_short}}-x86_64.dmg --primary-bundle-id pub.gpgfrontend.gpgfrontend -u ${{secrets.APPLE_DEVELOPER_ID}} -p ${{secrets.APPLE_DEVELOPER_ID_SECRET}}
if: matrix.os == 'macos-latest'
- name: Package App Image (Linux)
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 3ad2246c..31e2babb 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -42,6 +42,16 @@ jobs:
sudo apt-get -y install libglu1-mesa-dev libfontconfig1-dev libx11-xcb-dev libicu-dev libxcb-*
if: matrix.os == 'ubuntu-16.04'
+ - name: Codesign Configuration (macOS)
+ run: |
+ echo ${{secrets.MACOS_CERTIFICATE}} | base64 --decode > certificate.p12
+ security create-keychain -p gpgfrontend build.keychain
+ security default-keychain -s build.keychain
+ security unlock-keychain -p gpgfrontend build.keychain
+ security import certificate.p12 -k build.keychain -P ${{secrets.MAOS_CERTIFICATE_PWD}} -T /usr/bin/codesign
+ security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k gpgfrontend build.keychain
+ if: matrix.os == 'macos-latest'
+
- name: Install Dependence (macOS)
run: |
brew install cmake git autoconf automake qt@5 gcc texinfo gettext libgpg-error libassuan gpgme openssl
@@ -136,14 +146,25 @@ jobs:
id: vars
run: echo "::set-output name=sha_short::$(git rev-parse --short HEAD)"
- - name: Package App Bundle (macOS)
+ - name: Build & Sign App Bundle (macOS)
run: |
macdeployqt ${{github.workspace}}/build/release/GpgFrontend.app
+ codesign --deep --force --options=runtime -s "Developer ID Application: Yu Hu (4279AWUL3X)" ${{github.workspace}}/build/release/GpgFrontend.app -v
mkdir ${{github.workspace}}/build/tmp/
+ if: matrix.os == 'macos-latest'
+
+ - name: Package & Sign App Bundle (macOS)
+ run: |
hdiutil create ${{github.workspace}}/build/tmp/tmp.dmg -ov -volname "GpgFrontend" -fs HFS+ -srcfolder ${{github.workspace}}/build/release/
mkdir ${{github.workspace}}/build/artifactOut
hdiutil convert ${{github.workspace}}/build/tmp/tmp.dmg -format UDZO -o ${{github.workspace}}/build/artifactOut/GpgFrontend.dmg
- mv ${{github.workspace}}/build/artifactOut/GpgFrontend.dmg ${{github.workspace}}/build/artifactOut/GpgFrontend-${{steps.vars.outputs.sha_short}}-x86_64.dmg
+ codesign -s "Developer ID Application: Yu Hu (4279AWUL3X)" ${{github.workspace}}/build/artifactOut/GpgFrontend.dmg
+ mv ${{github.workspace}}/build/artifactOut/GpgFrontend.dmg ${{github.workspace}}/build/artifactOut/GpgFrontend-${{steps.vars.outputs.sha_short}}-x86_64.dmg
+ if: matrix.os == 'macos-latest'
+
+ - name: Notarize Release Build (macOS)
+ run: |
+ xcrun altool --notarize-app -f ${{github.workspace}}/build/artifactOut/GpgFrontend-${{steps.vars.outputs.sha_short}}-x86_64.dmg --primary-bundle-id pub.gpgfrontend.gpgfrontend -u ${{secrets.APPLE_DEVELOPER_ID}} -p ${{secrets.APPLE_DEVELOPER_ID_SECRET}}
if: matrix.os == 'macos-latest'
- name: Package App Image (Linux)
diff --git a/README.md b/README.md
index eb6337a0..85ac643c 100644
--- a/README.md
+++ b/README.md
@@ -109,9 +109,8 @@ Read the animated pictures in the [Document](https://gpgfrontend.pub/#/quick-sta
0. If command `gpg` is not available, please use homebrew to install it first.
1. [Download GpgFrontend](https://github.com/saturneric/GpgFrontend/releases) macOS edition from the latest release
2. Double-Click GpgFrontend.dmg to load it
- - macOS will automatically decompress the zip file and then you will be able to see the dmg
3. Double click and run it
- (due to macOS security policy, you may need a little more step).
+ - Every Release App is Now Code-Signed By Develop ID Certificate and Checked By Apple Inc.
4. If it satisfies you, you can drag it into your Application folder.
#### Debian/Ubuntu/CentOS
diff --git a/include/GpgFrontend.h.in b/include/GpgFrontend.h.in
index 555f4589..6460967c 100644
--- a/include/GpgFrontend.h.in
+++ b/include/GpgFrontend.h.in
@@ -25,6 +25,9 @@
#ifndef GPGFRONTEND_H_IN
#define GPGFRONTEND_H_IN
+/**
+ * STD Headers
+ */
#include <iostream>
#include <string>
#include <cmath>
@@ -33,22 +36,37 @@
#include <utility>
#include <list>
+/**
+ * QT Headers
+ */
#include <QtCore>
#include <QtWidgets>
#include <QtNetwork/QtNetwork>
#include <QtPrintSupport/QtPrintSupport>
+/**
+ * GpgME Headers
+ */
#include <gpgme.h>
+/**
+ * Platform Vars
+ */
#define WINDOWS 0
#define MACOS 1
#define LINUX 2
+#define OS_PLATFORM @OS_PLATFORM@
+
+/**
+ * Build Options Vars
+ */
#define RELEASE 0
#define DEBUG 1
-#define OS_PLATFORM @OS_PLATFORM@
-
+/**
+ * Resources File(s) Path Vars
+ */
#if OS_PLATFORM == MACOS && BUILD_FLAG == RELEASE
# define RESOURCE_DIR(appDir) (appDir + "/../Resources/")
#elif OS_PLATFORM == LINUX && BUILD_FLAG == RELEASE
diff --git a/include/GpgFrontendBuildInfo.h.in b/include/GpgFrontendBuildInfo.h.in
index 1da57de9..bf1d3f8a 100644
--- a/include/GpgFrontendBuildInfo.h.in
+++ b/include/GpgFrontendBuildInfo.h.in
@@ -25,19 +25,30 @@
#ifndef GPGFRONTEND_BUILD_INFO_H_IN
#define GPGFRONTEND_BUILD_INFO_H_IN
+/**
+ * Logic Version (*.*.*)
+ */
#define VERSION_MAJOR @CMAKE_PROJECT_VERSION_MAJOR@
#define VERSION_MINOR @CMAKE_PROJECT_VERSION_MINOR@
#define VERSION_PATCH @CMAKE_PROJECT_VERSION_PATCH@
+/**
+ * Code Version (According to Git)
+ */
#define GIT_BRANCH_NAME "@GIT_BRANCH_NAME@"
#define GIT_COMMIT_HASH "@GIT_COMMIT_HASH@"
+/**
+ * Generated Information (According to CMake)
+ */
#define PROJECT_NAME "@PROJECT_NAME@"
#define BUILD_VERSION "@BUILD_VERSION@"
#define GIT_VERSION "@GIT_VERSION@"
+/**
+ * Build Information
+ */
#define BUILD_FLAG @BUILD_FLAG@
-
#define BUILD_TIMESTAMP "@BUILD_TIMESTAMP@"
#endif // GPGFRONTEND_BUILD_INFO_H_IN
diff --git a/include/MainWindow.h b/include/MainWindow.h
index 20f9a0b5..176a8914 100644
--- a/include/MainWindow.h
+++ b/include/MainWindow.h
@@ -314,6 +314,16 @@ private:
void saveSettings();
/**
+ * @details Get full crypto text
+ */
+ QString getCryptText(const QString& shortenCryptoText);
+
+ /**
+ * @details Shorten crypto text
+ */
+ void shortenCryptText();
+
+ /**
* @brief return true, if restart is needed
*/
[[nodiscard]] bool getRestartNeeded() const;
diff --git a/include/advance/UnknownSignersChecker.h b/include/advance/UnknownSignersChecker.h
new file mode 100644
index 00000000..8f644de6
--- /dev/null
+++ b/include/advance/UnknownSignersChecker.h
@@ -0,0 +1,52 @@
+/**
+ * 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.
+ *
+ * Foobar 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 Foobar. If not, see <https://www.gnu.org/licenses/>.
+ *
+ * The initial version of the source code is inherited from gpg4usb-team.
+ * Their source code version also complies with GNU General Public License.
+ *
+ * The source code version of this software was modified and released
+ * by Saturneric<[email protected]> starting on May 12, 2021.
+ *
+ */
+
+#ifndef GPGFRONTEND_ZH_CN_TS_UNKNOWNSIGNERSCHECKER_H
+#define GPGFRONTEND_ZH_CN_TS_UNKNOWNSIGNERSCHECKER_H
+
+#include "server/api/PubkeyGetter.h"
+
+class UnknownSignersChecker : public QObject {
+Q_OBJECT
+public:
+
+ UnknownSignersChecker(GpgME::GpgContext *ctx, gpgme_verify_result_t result);
+
+ void start();
+
+private:
+
+ QString appPath;
+ QSettings settings;
+ GpgME::GpgContext *mCtx;
+ gpgme_verify_result_t mResult;
+
+ QVector<QString> unknownFprs;
+
+ void check_signer(gpgme_signature_t sign);
+
+};
+
+
+#endif //GPGFRONTEND_ZH_CN_TS_UNKNOWNSIGNERSCHECKER_H
diff --git a/include/gpg/GpgConstants.h b/include/gpg/GpgConstants.h
index 64286ca4..61037170 100644
--- a/include/gpg/GpgConstants.h
+++ b/include/gpg/GpgConstants.h
@@ -37,6 +37,7 @@ public:
static const char *PGP_SIGNED_END;
static const char *PGP_SIGNATURE_BEGIN;
static const char *PGP_SIGNATURE_END;
+ static const char *GPG_FRONTEND_SHORT_CRYPTO_HEAD;
};
#endif // CONSTANTS_H
diff --git a/include/gpg/GpgContext.h b/include/gpg/GpgContext.h
index fc4d8692..75949f25 100644
--- a/include/gpg/GpgContext.h
+++ b/include/gpg/GpgContext.h
@@ -25,11 +25,12 @@
#ifndef __SGPGMEPP_CONTEXT_H__
#define __SGPGMEPP_CONTEXT_H__
-#include <GpgFrontend.h>
+#include "GpgFrontend.h"
#include "GpgConstants.h"
#include "GpgGenKeyInfo.h"
#include "GpgKey.h"
+#include "GpgInfo.h"
using GpgKeyList = std::list<GpgKey>;
@@ -63,10 +64,14 @@ public:
namespace GpgME {
+ /**
+ * Custom Encapsulation of GpgME APIs
+ */
class GpgContext : public QObject {
Q_OBJECT
public:
+
GpgContext();
~GpgContext() override;
@@ -81,17 +86,18 @@ namespace GpgME {
bool exportKeys(const QVector<GpgKey> &keys, QByteArray &outBuffer);
- bool generateKey(GenKeyInfo *params);
+ gpgme_error_t generateKey(GenKeyInfo *params);
- bool generateSubkey(const GpgKey &key, GenKeyInfo *params);
+ gpgme_error_t generateSubkey(const GpgKey &key, GenKeyInfo *params);
void deleteKeys(QStringList *uidList);
gpg_error_t encrypt(QVector<GpgKey> &keys, const QByteArray &inBuffer, QByteArray *outBuffer,
gpgme_encrypt_result_t *result);
- gpgme_error_t encryptSign(QVector<GpgKey> &keys, const QByteArray &inBuffer, QByteArray *outBuffer,
- gpgme_encrypt_result_t *encr_result, gpgme_sign_result_t *sign_result);
+ gpgme_error_t encryptSign(QVector<GpgKey> &keys, QVector<GpgKey> &signers, const QByteArray &inBuffer,
+ QByteArray *outBuffer, gpgme_encrypt_result_t *encr_result,
+ gpgme_sign_result_t *sign_result);
gpgme_error_t decrypt(const QByteArray &inBuffer, QByteArray *outBuffer, gpgme_decrypt_result_t *result);
@@ -103,19 +109,20 @@ namespace GpgME {
bool exportSecretKey(const GpgKey &key, QByteArray *outBuffer);
- void getSigners(QVector<GpgKey> &signer);
+ void getSigners(QVector<GpgKey> &signer, gpgme_ctx_t ctx);
- void setSigners(const QVector<GpgKey> &keys);
+ static void setSigners(const QVector<GpgKey> &keys, gpgme_ctx_t ctx);
- bool signKey(const GpgKey &target, const QString &uid, const QDateTime *expires);
+ bool signKey(const GpgKey &target, const QVector<GpgKey> &keys, const QString &uid,
+ const QDateTime *expires);
bool revSign(const GpgKey &key, const GpgKeySignature &signature);
gpgme_error_t verify(QByteArray *inBuffer, QByteArray *sigBuffer, gpgme_verify_result_t *result);
gpg_error_t
- sign(const QVector<GpgKey> &keys, const QByteArray &inBuffer, QByteArray *outBuffer, bool detached = false,
- gpgme_sign_result_t *result = nullptr);
+ sign(const QVector<GpgKey> &keys, const QByteArray &inBuffer, QByteArray *outBuffer,
+ gpgme_sig_mode_t mode, gpgme_sign_result_t *result = nullptr, bool default_ctx = true);
bool addUID(const GpgKey &key, const GpgUID &uid);
@@ -125,7 +132,7 @@ namespace GpgME {
bool setExpire(const GpgKey &key, const GpgSubKey *subkey, QDateTime *expires);
- QProcess * generateRevokeCert(const GpgKey &key, const QString &outputFileName);
+ void generateRevokeCert(const GpgKey &key, const QString &outputFileName);
static bool checkIfKeyCanSign(const GpgKey &key);
@@ -146,7 +153,7 @@ namespace GpgME {
GpgKey getKeyByFpr(const QString &fpr);
- const GpgKey &getKeyById(const QString &id);
+ GpgKey getKeyById(const QString &id);
static QString gpgErrString(gpgme_error_t err);
@@ -179,20 +186,25 @@ namespace GpgME {
void slotUpdateKeyList(const QString &key_id);
private:
+
+ GpgInfo info;
+
gpgme_ctx_t mCtx{};
gpgme_data_t in{};
gpgme_error_t err;
bool debug;
bool good = true;
- static gpgme_error_t readToBuffer(gpgme_data_t dataIn, QByteArray *outBuffer);
-
QByteArray mPasswordCache;
QSettings settings;
GpgKeyList mKeyList;
QMap<QString, GpgKey *> mKeyMap;
+ gpgme_ctx_t create_ctx();
+
+ static gpgme_error_t readToBuffer(gpgme_data_t dataIn, QByteArray *outBuffer);
+
void fetch_keys();
static void checkErr(gpgme_error_t gpgmeError);
@@ -207,12 +219,8 @@ namespace GpgME {
const char *passphrase_info,
int last_was_bad, int fd);
- QProcess * executeGpgCommand(const QStringList &arguments,
- QByteArray *stdOut,
- QByteArray *stdErr, const std::function<void(QProcess *)> &interactFunc);
+ void executeGpgCommand(const QStringList &arguments, const std::function<void(QProcess *)> &interactFunc);
- QString gpgExec;
- QString gpgKeys;
};
} // namespace GpgME
diff --git a/src/ui/keygen/KeygenThread.cpp b/include/gpg/GpgInfo.h
index d7b9d840..914491dd 100644
--- a/src/ui/keygen/KeygenThread.cpp
+++ b/include/gpg/GpgInfo.h
@@ -20,17 +20,24 @@
* The source code version of this software was modified and released
* by Saturneric<[email protected]> starting on May 12, 2021.
*
+*/
+
+#ifndef GPGFRONTEND_ZH_CN_TS_GPGINFO_H
+#define GPGFRONTEND_ZH_CN_TS_GPGINFO_H
+
+#include "GpgFrontend.h"
+
+/**
+ * Use to record some info about gnupg
*/
+class GpgInfo {
+public:
-#include "ui/keygen/KeygenThread.h"
+ /**
+ * executable binary path of gnupg
+ */
+ QString appPath;
+};
-KeyGenThread::KeyGenThread(GenKeyInfo* keyGenParams, GpgME::GpgContext *ctx)
-: mCtx(ctx), keyGenParams(keyGenParams), QThread(nullptr) {
- connect(this, &KeyGenThread::finished, this, &KeyGenThread::deleteLater);
-}
-void KeyGenThread::run() {
- bool success = mCtx->generateKey(keyGenParams);
- emit signalKeyGenerated(success);
- emit finished({});
-}
+#endif //GPGFRONTEND_ZH_CN_TS_GPGINFO_H
diff --git a/include/gpg/GpgKeySignature.h b/include/gpg/GpgKeySignature.h
index 05a212a7..0dd2f893 100644
--- a/include/gpg/GpgKeySignature.h
+++ b/include/gpg/GpgKeySignature.h
@@ -54,9 +54,12 @@ struct GpgKeySignature {
explicit GpgKeySignature(gpgme_key_sig_t key_sig);
GpgKeySignature(GpgKeySignature &&) noexcept = default;
+
GpgKeySignature(const GpgKeySignature &) = default;
- GpgKeySignature& operator=(GpgKeySignature &&) noexcept = default;
- GpgKeySignature& operator=(const GpgKeySignature &) = default;
+
+ GpgKeySignature &operator=(GpgKeySignature &&) noexcept = default;
+
+ GpgKeySignature &operator=(const GpgKeySignature &) = default;
};
diff --git a/include/gpg/GpgUID.h b/include/gpg/GpgUID.h
index 99fe828f..6fb09446 100644
--- a/include/gpg/GpgUID.h
+++ b/include/gpg/GpgUID.h
@@ -28,7 +28,6 @@
#include <utility>
#include "GpgFrontend.h"
-
#include "GpgKeySignature.h"
struct GpgUID {
@@ -41,9 +40,9 @@ struct GpgUID {
QString uid{};
- bool revoked;
+ bool revoked{};
- bool invalid;
+ bool invalid{};
QVector<GpgKeySignature> signatures;
diff --git a/include/gpg/result_analyse/DecryptResultAnalyse.h b/include/gpg/result_analyse/DecryptResultAnalyse.h
index 6ec7d3be..b1d0c7b4 100644
--- a/include/gpg/result_analyse/DecryptResultAnalyse.h
+++ b/include/gpg/result_analyse/DecryptResultAnalyse.h
@@ -1,6 +1,26 @@
-//
-// Created by eric on 2021/6/9.
-//
+/**
+ * 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.
+ *
+ * Foobar 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 Foobar. If not, see <https://www.gnu.org/licenses/>.
+ *
+ * The initial version of the source code is inherited from gpg4usb-team.
+ * Their source code version also complies with GNU General Public License.
+ *
+ * The source code version of this software was modified and released
+ * by Saturneric<[email protected]> starting on May 12, 2021.
+ *
+ */
#ifndef GPGFRONTEND_DECRYPTRESULTANALYSE_H
#define GPGFRONTEND_DECRYPTRESULTANALYSE_H
@@ -8,7 +28,8 @@
#include "gpg/GpgContext.h"
#include "ResultAnalyse.h"
-class DecryptResultAnalyse: public ResultAnalyse{
+class DecryptResultAnalyse : public ResultAnalyse {
+Q_OBJECT
public:
explicit DecryptResultAnalyse(GpgME::GpgContext *ctx, gpgme_error_t error, gpgme_decrypt_result_t result);
diff --git a/include/gpg/result_analyse/EncryptResultAnalyse.h b/include/gpg/result_analyse/EncryptResultAnalyse.h
index 4717728b..447555c5 100644
--- a/include/gpg/result_analyse/EncryptResultAnalyse.h
+++ b/include/gpg/result_analyse/EncryptResultAnalyse.h
@@ -1,13 +1,34 @@
-//
-// Created by eric on 2021/6/9.
-//
+/**
+ * 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.
+ *
+ * Foobar 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 Foobar. If not, see <https://www.gnu.org/licenses/>.
+ *
+ * The initial version of the source code is inherited from gpg4usb-team.
+ * Their source code version also complies with GNU General Public License.
+ *
+ * The source code version of this software was modified and released
+ * by Saturneric<[email protected]> starting on May 12, 2021.
+ *
+ */
#ifndef GPGFRONTEND_ENCRYPTRESULTANALYSE_H
#define GPGFRONTEND_ENCRYPTRESULTANALYSE_H
#include "ResultAnalyse.h"
-class EncryptResultAnalyse : public ResultAnalyse{
+class EncryptResultAnalyse : public ResultAnalyse {
+Q_OBJECT
public:
explicit EncryptResultAnalyse(gpgme_error_t error, gpgme_encrypt_result_t result);
diff --git a/include/gpg/result_analyse/ResultAnalyse.h b/include/gpg/result_analyse/ResultAnalyse.h
index debfb71a..da2e5676 100644
--- a/include/gpg/result_analyse/ResultAnalyse.h
+++ b/include/gpg/result_analyse/ResultAnalyse.h
@@ -1,13 +1,33 @@
-//
-// Created by eric on 2021/6/8.
-//
-
+/**
+ * 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.
+ *
+ * Foobar 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 Foobar. If not, see <https://www.gnu.org/licenses/>.
+ *
+ * The initial version of the source code is inherited from gpg4usb-team.
+ * Their source code version also complies with GNU General Public License.
+ *
+ * The source code version of this software was modified and released
+ * by Saturneric<[email protected]> starting on May 12, 2021.
+ *
+ */
#ifndef GPGFRONTEND_RESULTANALYSE_H
#define GPGFRONTEND_RESULTANALYSE_H
#include "GpgFrontend.h"
-class ResultAnalyse {
+class ResultAnalyse : public QObject {
+Q_OBJECT
public:
ResultAnalyse() = default;
diff --git a/include/gpg/result_analyse/SignResultAnalyse.h b/include/gpg/result_analyse/SignResultAnalyse.h
index e837140d..ebb15dfb 100644
--- a/include/gpg/result_analyse/SignResultAnalyse.h
+++ b/include/gpg/result_analyse/SignResultAnalyse.h
@@ -1,6 +1,26 @@
-//
-// Created by eric on 2021/6/8.
-//
+/**
+ * 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.
+ *
+ * Foobar 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 Foobar. If not, see <https://www.gnu.org/licenses/>.
+ *
+ * The initial version of the source code is inherited from gpg4usb-team.
+ * Their source code version also complies with GNU General Public License.
+ *
+ * The source code version of this software was modified and released
+ * by Saturneric<[email protected]> starting on May 12, 2021.
+ *
+ */
#ifndef GPGFRONTEND_SIGNRESULTANALYSE_H
#define GPGFRONTEND_SIGNRESULTANALYSE_H
@@ -8,10 +28,13 @@
#include "GpgFrontend.h"
#include "ResultAnalyse.h"
+#include "gpg/GpgContext.h"
-class SignResultAnalyse : public ResultAnalyse{
+class SignResultAnalyse : public ResultAnalyse {
+Q_OBJECT
public:
- explicit SignResultAnalyse(gpgme_error_t error, gpgme_sign_result_t result);
+
+ explicit SignResultAnalyse(GpgME::GpgContext *ctx, gpgme_error_t error, gpgme_sign_result_t result);
private:
diff --git a/include/gpg/result_analyse/VerifyResultAnalyse.h b/include/gpg/result_analyse/VerifyResultAnalyse.h
index 2041940b..c009741a 100644
--- a/include/gpg/result_analyse/VerifyResultAnalyse.h
+++ b/include/gpg/result_analyse/VerifyResultAnalyse.h
@@ -1,6 +1,26 @@
-//
-// Created by eric on 2021/6/7.
-//
+/**
+ * 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.
+ *
+ * Foobar 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 Foobar. If not, see <https://www.gnu.org/licenses/>.
+ *
+ * The initial version of the source code is inherited from gpg4usb-team.
+ * Their source code version also complies with GNU General Public License.
+ *
+ * The source code version of this software was modified and released
+ * by Saturneric<[email protected]> starting on May 12, 2021.
+ *
+ */
#ifndef GPGFRONTEND_VERIFYRESULTANALYSE_H
#define GPGFRONTEND_VERIFYRESULTANALYSE_H
diff --git a/include/server/BaseAPI.h b/include/server/BaseAPI.h
new file mode 100644
index 00000000..0b724bbc
--- /dev/null
+++ b/include/server/BaseAPI.h
@@ -0,0 +1,73 @@
+/**
+ * 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.
+ *
+ * Foobar 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 Foobar. If not, see <https://www.gnu.org/licenses/>.
+ *
+ * The initial version of the source code is inherited from gpg4usb-team.
+ * Their source code version also complies with GNU General Public License.
+ *
+ * The source code version of this software was modified and released
+ * by Saturneric<[email protected]> starting on May 12, 2021.
+ *
+ */
+
+#ifndef GPGFRONTEND_ZH_CN_TS_BASEAPI_H
+#define GPGFRONTEND_ZH_CN_TS_BASEAPI_H
+
+#include "GpgFrontend.h"
+#include "ComUtils.h"
+
+#include "rapidjson/document.h"
+
+class BaseAPI : public QObject {
+Q_OBJECT
+public:
+
+ explicit BaseAPI(ComUtils::ServiceType serviceType);
+
+ ~BaseAPI() override;
+
+ void start();
+
+ void refresh();
+
+ [[nodiscard]] bool result() const;
+
+private:
+
+ ComUtils *utils;
+
+ QUrl reqUrl;
+
+ QNetworkRequest request;
+
+ QNetworkReply *send_json_data();
+
+protected:
+
+ bool good = false;
+
+ rapidjson::Document document;
+
+ const ComUtils &getUtils() { return *utils; };
+
+ virtual void construct_json() = 0;
+
+ virtual void deal_reply() = 0;
+
+
+};
+
+
+#endif //GPGFRONTEND_ZH_CN_TS_BASEAPI_H
diff --git a/include/server/ComUtils.h b/include/server/ComUtils.h
new file mode 100644
index 00000000..a4cf543f
--- /dev/null
+++ b/include/server/ComUtils.h
@@ -0,0 +1,79 @@
+/**
+ * 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.
+ *
+ * Foobar 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 Foobar. If not, see <https://www.gnu.org/licenses/>.
+ *
+ * The initial version of the source code is inherited from gpg4usb-team.
+ * Their source code version also complies with GNU General Public License.
+ *
+ * The source code version of this software was modified and released
+ * by Saturneric<[email protected]> starting on May 12, 2021.
+ *
+ */
+
+#ifndef GPGFRONTEND_ZH_CN_TS_COMUTILS_H
+#define GPGFRONTEND_ZH_CN_TS_COMUTILS_H
+
+#include "GpgFrontend.h"
+#include "gpg/GpgContext.h"
+#include "rapidjson/document.h"
+
+class ComUtils : public QWidget {
+Q_OBJECT
+public:
+
+ enum ServiceType { GetServiceToken, ShortenCryptText, GetFullCryptText, UploadPubkey, GetPubkey };
+
+ explicit ComUtils(QWidget *parent) : QWidget(parent), appPath(qApp->applicationDirPath()),
+ settings(RESOURCE_DIR(appPath) + "/conf/gpgfrontend.ini",
+ QSettings::IniFormat) {
+
+ }
+
+ [[nodiscard]] QString getUrl(ServiceType type) const;
+
+ bool checkServerReply(const QByteArray &reply);
+
+ [[nodiscard]] QString getDataValueStr(const QString &key) const;
+
+ [[nodiscard]] bool checkDataValueStr(const QString &key) const;
+
+ [[nodiscard]] const rapidjson::Value &getDataValue(const QString &key) const;
+
+ [[nodiscard]] bool checkDataValue(const QString &key) const;
+
+ [[nodiscard]] bool checkServiceTokenFormat(const QString& serviceToken) const;
+
+ static QByteArray getSignStringBase64(GpgME::GpgContext *ctx, const QString &str, const GpgKey& key);
+
+ [[nodiscard]] bool good() const { return is_good; }
+
+ QNetworkAccessManager &getNetworkManager() {return networkMgr;}
+
+ void clear();
+
+private:
+
+ QString appPath;
+ QSettings settings;
+ rapidjson::Document replyDoc;
+ rapidjson::Value dataVal;
+ QNetworkAccessManager networkMgr;
+ QRegularExpression re_uuid{R"(\b[0-9a-f]{8}\b-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-\b[0-9a-f]{12}\b)"};
+
+ bool is_good = false;
+};
+
+
+#endif //GPGFRONTEND_ZH_CN_TS_COMUTILS_H
diff --git a/include/ui/keygen/SubkeyGenerateThread.h b/include/server/api/PubkeyGetter.h
index b442acea..9d3bdb60 100644
--- a/include/ui/keygen/SubkeyGenerateThread.h
+++ b/include/server/api/PubkeyGetter.h
@@ -18,34 +18,40 @@
* Their source code version also complies with GNU General Public License.
*
* The source code version of this software was modified and released
- * by Saturneric<[email protected]><[email protected]> starting on May 12, 2021.
+ * by Saturneric<[email protected]> starting on May 12, 2021.
*
*/
-#ifndef GPGFRONTEND_SUBKEYGENERATETHREAD_H
-#define GPGFRONTEND_SUBKEYGENERATETHREAD_H
+#ifndef GPGFRONTEND_ZH_CN_TS_PUBKEYGETTER_H
+#define GPGFRONTEND_ZH_CN_TS_PUBKEYGETTER_H
+#include "GpgFrontend.h"
+#include "server/BaseAPI.h"
#include "gpg/GpgContext.h"
-class SubkeyGenerateThread : public QThread {
- Q_OBJECT
+class ComUtils;
+/**
+ * Get and Import Pubkey from server
+ */
+class PubkeyGetter : public BaseAPI {
public:
- SubkeyGenerateThread(GpgKey key, GenKeyInfo *keyGenParams, GpgME::GpgContext *ctx);
-signals:
-
- void signalKeyGenerated(bool success);
+ PubkeyGetter(GpgME::GpgContext *ctx, const QVector<QString> &fprs);
private:
- const GpgKey mKey;
- GenKeyInfo *keyGenParams;
+
GpgME::GpgContext *mCtx;
+ const QVector<QString> &mFprs;
+
protected:
- void run() override;
+ void construct_json() final;
+
+ void deal_reply() final;
+
};
-#endif //GPGFRONTEND_SUBKEYGENERATETHREAD_H
+#endif //GPGFRONTEND_ZH_CN_TS_PUBKEYGETTER_H
diff --git a/include/server/api/PubkeyUploader.h b/include/server/api/PubkeyUploader.h
new file mode 100644
index 00000000..7521cdd3
--- /dev/null
+++ b/include/server/api/PubkeyUploader.h
@@ -0,0 +1,58 @@
+/**
+ * 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.
+ *
+ * Foobar 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 Foobar. If not, see <https://www.gnu.org/licenses/>.
+ *
+ * The initial version of the source code is inherited from gpg4usb-team.
+ * Their source code version also complies with GNU General Public License.
+ *
+ * The source code version of this software was modified and released
+ * by Saturneric<[email protected]> starting on May 12, 2021.
+ *
+ */
+
+#ifndef GPGFRONTEND_ZH_CN_TS_PUBKEYUPLOADER_H
+#define GPGFRONTEND_ZH_CN_TS_PUBKEYUPLOADER_H
+
+#include "GpgFrontend.h"
+#include "server/BaseAPI.h"
+#include "gpg/GpgContext.h"
+
+#include "rapidjson/document.h"
+
+/**
+ * Upload pubkey into server
+ */
+class PubkeyUploader : public BaseAPI {
+public:
+
+ PubkeyUploader(GpgME::GpgContext *ctx, const QVector<GpgKey> &keys);
+
+private:
+
+ const QVector<GpgKey> &mKeys;
+
+ GpgME::GpgContext *mCtx;
+
+protected:
+
+ void construct_json() final;
+
+ void deal_reply() final;
+
+
+};
+
+
+#endif //GPGFRONTEND_ZH_CN_TS_PUBKEYUPLOADER_H
diff --git a/include/ui/FileEncryptionDialog.h b/include/ui/FileEncryptionDialog.h
index f4adb18f..be9ddd22 100755
--- a/include/ui/FileEncryptionDialog.h
+++ b/include/ui/FileEncryptionDialog.h
@@ -102,14 +102,14 @@ public slots:
void slotShowKeyList();
private:
- QLineEdit *outputFileEdit; /**< TODO */
- QLineEdit *inputFileEdit; /**< TODO */
- QLineEdit *signFileEdit; /**< TODO */
- DialogAction mAction; /**< TODO */
- QLabel *statusLabel; /**< TODO */
+ QLineEdit *outputFileEdit;
+ QLineEdit *inputFileEdit;
+ QLineEdit *signFileEdit;
+ DialogAction mAction;
+ QLabel *statusLabel;
protected:
- GpgME::GpgContext *mCtx; /**< TODO */
- KeyList *mKeyList; /**< TODO */
+ GpgME::GpgContext *mCtx;
+ KeyList *mKeyList;
};
diff --git a/include/ui/KeyImportDetailDialog.h b/include/ui/KeyImportDetailDialog.h
index 0c6f5813..216cdcd0 100644
--- a/include/ui/KeyImportDetailDialog.h
+++ b/include/ui/KeyImportDetailDialog.h
@@ -27,7 +27,6 @@
#include "gpg/GpgContext.h"
-
class KeyImportDetailDialog : public QDialog
{
Q_OBJECT
diff --git a/include/ui/KeyMgmt.h b/include/ui/KeyMgmt.h
index 59592bdf..fa352149 100755
--- a/include/ui/KeyMgmt.h
+++ b/include/ui/KeyMgmt.h
@@ -26,7 +26,6 @@
#define __KEYMGMT_H__
#include "ui/widgets/KeyList.h"
-#include "ui/keygen/KeygenThread.h"
#include "ui/keypair_details/KeyDetailsDialog.h"
#include "KeyImportDetailDialog.h"
#include "KeyServerImportDialog.h"
diff --git a/include/ui/SettingsDialog.h b/include/ui/SettingsDialog.h
index 133a8ec7..72f80917 100755
--- a/include/ui/SettingsDialog.h
+++ b/include/ui/SettingsDialog.h
@@ -42,17 +42,19 @@ private:
QString appPath;
QSettings settings;
- QCheckBox *rememberPasswordCheckBox;
+ QComboBox *serverSelectBox;
QCheckBox *saveCheckedKeysCheckBox;
QCheckBox *importConfirmationCheckBox;
QComboBox *langSelectBox;
QComboBox *ownKeySelectBox;
+ QPushButton *getServiceTokenButton;
+ QLabel *serviceTokenLabel;
QHash<QString, QString> lang;
QHash<QString, QString> keyIds;
QVector<QString> keyIdsList;
- QString ownKeyId;
+ QString serviceToken;
KeyList *mKeyList;
- GpgME::GpgContext *mCtx; /** The current gpg context */
+ GpgME::GpgContext *mCtx;
private slots:
@@ -60,6 +62,8 @@ private slots:
void slotLanguageChanged();
+ void slotGetServiceToken();
+
signals:
void signalRestartNeeded(bool needed);
@@ -151,14 +155,17 @@ private:
QString appPath;
QSettings settings;
-
QComboBox *comboBox;
QLineEdit *newKeyServerEdit;
+ QTableWidget *keyServerTable;
+ QStringList keyServerStrList;
private slots:
void addKeyServer();
+ void refreshTable();
+
signals:
void signalRestartNeeded(bool needed);
@@ -181,6 +188,7 @@ private:
QSettings settings;
QCheckBox *steganoCheckBox;
+ QCheckBox *autoPubkeyExchangeCheckBox;
signals:
@@ -196,7 +204,7 @@ public:
void applySettings();
private:
- static QString getRelativePath(const QString& dir1, const QString& dir2);
+ static QString getRelativePath(const QString &dir1, const QString &dir2);
QString appPath;
QSettings settings;
diff --git a/src/ui/keygen/SubkeyGenerateThread.cpp b/include/ui/ShowCopyDialog.h
index 125f35f8..45b06e2d 100644
--- a/src/ui/keygen/SubkeyGenerateThread.cpp
+++ b/include/ui/ShowCopyDialog.h
@@ -18,19 +18,29 @@
* Their source code version also complies with GNU General Public License.
*
* The source code version of this software was modified and released
- * by Saturneric<[email protected]><[email protected]> starting on May 12, 2021.
+ * by Saturneric<[email protected]> starting on May 12, 2021.
*
*/
-#include "ui/keygen/SubkeyGenerateThread.h"
+#ifndef GPGFRONTEND_ZH_CN_TS_SHOWCOPYDIALOG_H
+#define GPGFRONTEND_ZH_CN_TS_SHOWCOPYDIALOG_H
-SubkeyGenerateThread::SubkeyGenerateThread(GpgKey key, GenKeyInfo *keyGenParams, GpgME::GpgContext *ctx)
- : mKey(std::move(key)), keyGenParams(keyGenParams) , mCtx(ctx) {
- connect(this, &SubkeyGenerateThread::finished, this, &SubkeyGenerateThread::deleteLater);
-}
+#include "GpgFrontend.h"
-void SubkeyGenerateThread::run() {
- bool success = mCtx->generateSubkey(mKey, keyGenParams);
- emit signalKeyGenerated(success);
- emit finished({});
-}
+class ShowCopyDialog : public QDialog {
+Q_OBJECT
+public:
+ explicit ShowCopyDialog(const QString &text, const QString &info = "", QWidget *parent = nullptr);
+
+private slots:
+
+ void slotCopyText();
+
+private:
+ QLabel *infoLabel;
+ QTextEdit *textEdit;
+ QPushButton *copyButton;
+};
+
+
+#endif //GPGFRONTEND_ZH_CN_TS_SHOWCOPYDIALOG_H
diff --git a/include/ui/Wizard.h b/include/ui/Wizard.h
index b2451bf2..79c7e321 100644
--- a/include/ui/Wizard.h
+++ b/include/ui/Wizard.h
@@ -30,14 +30,6 @@
#include "gpg/GpgConstants.h"
#include "SettingsDialog.h"
-class QCheckBox;
-
-class QLabel;
-
-class QLineEdit;
-
-class QRadioButton;
-
class Wizard : public QWizard {
Q_OBJECT
Q_ENUMS(WizardPages)
@@ -50,8 +42,6 @@ public:
Wizard(GpgME::GpgContext *ctx, KeyMgmt *keyMgmt, QWidget *parent = nullptr);
- static bool importPubAndSecKeysFromDir(const QString& dir, KeyMgmt *keyMgmt);
-
private:
GpgME::GpgContext *mCtx;
KeyMgmt *mKeyMgmt;
@@ -102,62 +92,6 @@ private:
int nextPage;
};
-class ImportFromGpg4usbPage : public QWizardPage {
-Q_OBJECT
-
-public:
- ImportFromGpg4usbPage(GpgME::GpgContext *ctx, KeyMgmt *keyMgmt, QWidget *parent = nullptr);
-
-private slots:
-
- /**
- * @details Import keys from gnupg-homedir, private or/and public depend on the checked boxes
- */
- void slotImportFromOlderGpg4usb();
-
- bool slotImportConfFromGpg4usb(const QString& dir);
-
-private:
- [[nodiscard]] int nextId() const override;
-
- QString appPath;
- QSettings settings;
-
- KeyMgmt *mKeyMgmt;
- GpgME::GpgContext *mCtx;
- QCheckBox *gpg4usbKeyCheckBox;
- QCheckBox *gpg4usbConfigCheckBox;
-};
-
-class ImportFromGnupgPage : public QWizardPage {
-Q_OBJECT
-
-public:
- ImportFromGnupgPage(GpgME::GpgContext *ctx, KeyMgmt *keyMgmt, QWidget *parent = nullptr);
-
-private slots:
-
- /**
- * @details Import keys from gnupg-homedir, private or/and public depend on the checked boxes
- */
- void slotrImportKeysFromGnupg();
-
-private:
- KeyMgmt *mKeyMgmt;
-
- [[nodiscard]] int nextId() const override;
-
- /**
- * @details String containing the gnupg-homedir
- * @returns String containg the gnupg-homedir, but NULL, if the in windows registry entry
- * doesn't exist or in linux ~/.gnupg doesn't exist
- */
- static QString getGnuPGHome();
-
- GpgME::GpgContext *mCtx;
- QPushButton *importFromGnupgButton;
-};
-
class KeyGenPage : public QWizardPage {
Q_OBJECT
diff --git a/include/ui/help/AboutDialog.h b/include/ui/help/AboutDialog.h
index 74391b5a..dee2c018 100644
--- a/include/ui/help/AboutDialog.h
+++ b/include/ui/help/AboutDialog.h
@@ -72,6 +72,12 @@ public:
explicit UpdateTab(QWidget *parent = nullptr);
void getLatestVersion();
+
+private slots:
+ void processReplyDataFromUpdateServer(const QByteArray& data);;
+
+signals:
+ void replyFromUpdateServer(QByteArray data);
};
/**
@@ -83,6 +89,13 @@ Q_OBJECT
public:
explicit AboutDialog(int defaultIndex, QWidget *parent);
+
+
+protected:
+ void showEvent(QShowEvent *ev) override;
+
+private:
+ UpdateTab *updateTab;
};
#endif // __ABOUTDIALOG_H__
diff --git a/include/ui/help/VersionCheckThread.h b/include/ui/help/VersionCheckThread.h
index 10c9da87..7ee90077 100644
--- a/include/ui/help/VersionCheckThread.h
+++ b/include/ui/help/VersionCheckThread.h
@@ -1,6 +1,26 @@
-//
-// Created by Administrator on 2021/7/12.
-//
+/**
+ * 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.
+ *
+ * Foobar 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 Foobar. If not, see <https://www.gnu.org/licenses/>.
+ *
+ * The initial version of the source code is inherited from gpg4usb-team.
+ * Their source code version also complies with GNU General Public License.
+ *
+ * The source code version of this software was modified and released
+ * by Saturneric<[email protected]> starting on May 12, 2021.
+ *
+ */
#ifndef GPGFRONTEND_VERSIONCHECKTHREAD_H
#define GPGFRONTEND_VERSIONCHECKTHREAD_H
diff --git a/include/ui/keygen/KeygenDialog.h b/include/ui/keygen/KeygenDialog.h
index a2718a1d..4a37590a 100644
--- a/include/ui/keygen/KeygenDialog.h
+++ b/include/ui/keygen/KeygenDialog.h
@@ -25,10 +25,8 @@
#ifndef __KEYGENDIALOG_H__
#define __KEYGENDIALOG_H__
-#include "KeygenThread.h"
#include "gpg/GpgContext.h"
-
class KeyGenDialog : public QDialog {
Q_OBJECT
@@ -54,7 +52,6 @@ private:
R"((?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9]))\.){3}(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9])|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\]))"};
GpgME::GpgContext *mCtx; /** The current gpg context */
- KeyGenThread *kg{}; /** Thread for key generation */
QStringList errorMessages; /** List of errors occuring when checking entries of lineedits */
GenKeyInfo genKeyInfo{};
@@ -107,8 +104,6 @@ private slots:
void slotActivatedKeyType(int index);
- void slotKeyGenResult(bool success);
-
};
#endif // __KEYGENDIALOG_H__
diff --git a/include/ui/keygen/SubkeyGenerateDialog.h b/include/ui/keygen/SubkeyGenerateDialog.h
index b067122a..a1cfcf55 100644
--- a/include/ui/keygen/SubkeyGenerateDialog.h
+++ b/include/ui/keygen/SubkeyGenerateDialog.h
@@ -25,12 +25,7 @@
#ifndef GPGFRONTEND_SUBKEYGENERATEDIALOG_H
#define GPGFRONTEND_SUBKEYGENERATEDIALOG_H
-#include "GpgFrontend.h"
-#include "gpg/GpgKey.h"
-#include "gpg/GpgSubKey.h"
-#include "gpg/GpgGenKeyInfo.h"
-
-#include "SubkeyGenerateThread.h"
+#include "gpg/GpgContext.h"
class SubkeyGenerateDialog : public QDialog {
Q_OBJECT
@@ -45,7 +40,6 @@ private:
const GpgKey &mKey;
GenKeyInfo genKeyInfo{};
- SubkeyGenerateThread *kg{}; /** Thread for key generation */
QGroupBox *keyUsageGroupBox{};
QDialogButtonBox *buttonBox; /** Box for standardbuttons */
@@ -91,8 +85,6 @@ private slots:
void slotActivatedKeyType(int index);
- void slotKeyGenResult(bool success);
-
};
diff --git a/include/ui/keypair_details/EditSubKeyDialog.h b/include/ui/keypair_details/EditSubKeyDialog.h
index be926be7..6577d382 100644
--- a/include/ui/keypair_details/EditSubKeyDialog.h
+++ b/include/ui/keypair_details/EditSubKeyDialog.h
@@ -1,6 +1,26 @@
-//
-// Created by eric on 2021/6/2.
-//
+/**
+ * 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.
+ *
+ * Foobar 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 Foobar. If not, see <https://www.gnu.org/licenses/>.
+ *
+ * The initial version of the source code is inherited from gpg4usb-team.
+ * Their source code version also complies with GNU General Public License.
+ *
+ * The source code version of this software was modified and released
+ * by Saturneric<[email protected]> starting on May 12, 2021.
+ *
+ */
#ifndef GPGFRONTEND_EDITSUBKEY_H
#define GPGFRONTEND_EDITSUBKEY_H
diff --git a/include/ui/widgets/InfoBoardWidget.h b/include/ui/widgets/InfoBoardWidget.h
index 2e5f9034..334ef55a 100644
--- a/include/ui/widgets/InfoBoardWidget.h
+++ b/include/ui/widgets/InfoBoardWidget.h
@@ -111,6 +111,8 @@ private:
QHBoxLayout *actionButtonLayout;
+ void deleteWidgetsInLayout(QLayout* layout, int start_index = 0);
+
};
diff --git a/include/ui/keygen/KeygenThread.h b/include/ui/widgets/SignersPicker.h
index 30478050..afa95a05 100644
--- a/include/ui/keygen/KeygenThread.h
+++ b/include/ui/widgets/SignersPicker.h
@@ -22,29 +22,27 @@
*
*/
-#ifndef __KEYGENTHREAD_H__
-#define __KEYGENTHREAD_H__
+#ifndef GPGFRONTEND_ZH_CN_TS_SIGNERSPIRCKER_H
+#define GPGFRONTEND_ZH_CN_TS_SIGNERSPIRCKER_H
+#include "GpgFrontend.h"
#include "gpg/GpgContext.h"
-class KeyGenThread : public QThread {
+#include "ui/widgets/KeyList.h"
+
+class SignersPicker : public QDialog {
Q_OBJECT
public:
- KeyGenThread(GenKeyInfo *keyGenParams, GpgME::GpgContext *ctx);
-signals:
- void signalKeyGenerated(bool success);
+ explicit SignersPicker(GpgME::GpgContext *ctx, QWidget *parent = nullptr);
+
+ void getCheckedSigners(QVector<GpgKey> &keys);
private:
- GenKeyInfo *keyGenParams;
GpgME::GpgContext *mCtx;
- QMutex mutex;
-
-protected:
-
- void run() override;
-
+ KeyList *mKeyList;
};
-#endif // __KEYGENTHREAD_H__
+
+#endif //GPGFRONTEND_ZH_CN_TS_SIGNERSPIRCKER_H
diff --git a/resource/conf/gpgfrontend.ini b/resource/conf/gpgfrontend.ini
index 3fc1c1b8..f606531f 100644
--- a/resource/conf/gpgfrontend.ini
+++ b/resource/conf/gpgfrontend.ini
@@ -15,3 +15,39 @@ showWizard=true
windowState=@ByteArray(\0\0\0\xff\0\0\0\0\xfd\0\0\0\x2\0\0\0\x1\0\0\x1\xcc\0\0\x2V\xfc\x2\0\0\0\x1\xfb\0\0\0\x16\0\x45\0n\0\x63\0r\0y\0p\0t\0\x44\0o\0\x63\0k\x1\0\0\0I\0\0\x2V\0\0\0]\0\xff\xff\xff\0\0\0\x3\0\0\x2\xe0\0\0\0\xf5\xfc\x1\0\0\0\x1\xfb\0\0\0\"\0I\0n\0\x66\0o\0r\0m\0\x61\0t\0i\0o\0n\0 \0\x42\0o\0\x61\0r\0\x64\x1\0\0\0\0\0\0\x2\xe0\0\0\x1\xe0\0\xff\xff\xff\0\0\x2\xe0\0\0\x1]\0\0\0\x4\0\0\0\x4\0\0\0\x1\0\0\0\x2\xfc\0\0\0\x1\0\0\0\x2\0\0\0\x5\0\0\0\x16\0\x66\0i\0l\0\x65\0T\0o\0o\0l\0\x42\0\x61\0r\0\0\0\0\0\xff\xff\xff\xff\0\0\0\0\0\0\0\0\0\0\0\x18\0\x63\0r\0y\0p\0t\0T\0o\0o\0l\0\x42\0\x61\0r\x1\0\0\0\0\xff\xff\xff\xff\0\0\0\0\0\0\0\0\0\0\0\x14\0k\0\x65\0y\0T\0o\0o\0l\0\x42\0\x61\0r\x1\0\0\x1z\xff\xff\xff\xff\0\0\0\0\0\0\0\0\0\0\0\x16\0\x65\0\x64\0i\0t\0T\0o\0o\0l\0\x42\0\x61\0r\x1\0\0\x2\f\xff\xff\xff\xff\0\0\0\0\0\0\0\0\0\0\0$\0s\0p\0\x65\0\x63\0i\0\x61\0l\0\x45\0\x64\0i\0t\0T\0o\0o\0l\0\x42\0\x61\0r\0\0\0\0\0\xff\xff\xff\xff\0\0\0\0\0\0\0\0)
pos=@Point(100 100)
size=@Size(1200 700)
+windowSave=false
+
+[advanced]
+steganography=false
+autoPubkeyExchange=true
+
+[gpgpaths]
+keydbpath=.
+
+[sendMail]
+smtpAddress=
+username=
+password=
+port=25
+connectionType=None
+defaultSender=
+enable=false
+
+[toolbar]
+iconsize=@Size(24 24)
+iconstyle=3
+
+[%General]
+currentGpgfrontendServer=service.gpgfrontend.pub
+gpgfrontendServerList=service.gpgfrontend.pub, localhost
+ownKeyId=
+serviceToken=
+confirmImportKeys=true
+
+[keymgmt]
+pos=@Point(100 100)
+size=@Size(900 600)
+setWindowSize=true
+
+[informationBoard]
+fontSize=10 \ No newline at end of file
diff --git a/resource/css/default.qss b/resource/css/default.qss
index e69de29b..9ecc4681 100644
--- a/resource/css/default.qss
+++ b/resource/css/default.qss
@@ -0,0 +1,1238 @@
+/*Copyright (c) DevSec Studio. All rights reserved.
+
+MIT License
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+
+/*-----QDialog-----*/
+QDialog::title {
+ height: 24px;
+ font-weight: bold;
+ color: #000000;
+ background: #ffffff;
+}
+
+/*-----QWidget-----*/
+QWidget
+{
+ background-color: #D3E0EA;
+ color: #1687A7;
+ selection-background-color: #D3E0EA;
+ selection-color: #276678;
+
+}
+
+
+/*-----QLabel-----*/
+QLabel
+{
+ background-color: transparent;
+ color: #276678;
+
+}
+
+
+/*-----QMenuBar-----*/
+QMenuBar
+{
+ background-color: #1687A7;
+ color: #D3E0EA;
+}
+
+
+QMenuBar::item
+{
+ background-color: #1687A7;
+ border-left: 1px solid #276678;
+ padding: 5px;
+ padding-left: 10px;
+ padding-right: 10px;
+
+}
+
+
+QMenuBar::item:selected
+{
+ background-color: #1687A7;
+ border: 1px solid #276678;
+ color: #fff;
+
+}
+
+
+QMenuBar::item:pressed
+{
+ background-color: #006666;
+ border: 1px solid #006666;
+ color: #fff;
+
+}
+
+
+/*-----QMenu-----*/
+QMenu
+{
+ background-color: #1687A7;
+ border: 1px solid #276678;
+ padding: 8px;
+ color: #D3E0EA;
+}
+
+
+QMenu::item
+{
+ background-color: transparent;
+ padding: 2px 8px 2px 8px;
+ min-width: 120px;
+
+}
+
+
+QMenu::separator
+{
+ background-color: #D3E0EA;
+ height: 1px;
+}
+
+
+QMenu::item:disabled
+{
+ color: #555;
+ background-color: transparent;
+ padding: 2px 8px 2px 8px;
+
+}
+
+
+QMenu::item:selected
+{
+ background-color: #D3E0EA;
+ border: 1px solid #D3E0EA;
+ color: #fff;
+}
+
+
+/*-----QToolButton-----*/
+QToolButton
+{
+ background-color: #D3E0EA;
+ color: #1687A7;
+ padding: 3px;
+ margin-left: 1px;
+}
+
+
+QToolButton:hover
+{
+ background-color: rgba(70,162,218,50%);
+ border: 1px solid #1687A7;
+ color: #000;
+
+}
+
+
+QToolButton:pressed
+{
+ background-color: #1687A7;
+ border: 1px solid #276678;
+ color: #F6F5F5;
+}
+
+
+QToolButton:checked
+{
+ background-color: #1687A7;
+ border: 1px solid #276678;
+ color: #F6F5F5;
+}
+
+
+/*-----QPushButton-----*/
+QPushButton
+{
+ background-color: #1687A7;
+ color: #F6F5F5;
+ min-width: 80px;
+ border-radius: 4px;
+ padding: 5px;
+
+}
+
+
+QPushButton::flat
+{
+ background-color: transparent;
+ border: none;
+ color: #000;
+
+}
+
+
+QPushButton::disabled
+{
+ background-color: #F6F5F5;
+ color: #A9A9A9;
+ border-color: #1687A7;
+ border-radius: 4px;
+ padding: 5px;
+}
+
+
+QPushButton::hover
+{
+ background-color: #54aad3;
+ border: 1px solid #46a2da;
+
+}
+
+
+QPushButton::pressed
+{
+ background-color: #2385b4;
+ border: 1px solid #46a2da;
+
+}
+
+
+QPushButton::checked
+{
+ background-color: #bd5355;
+ border: 1px solid #bd5355;
+}
+
+
+/*-----QLineEdit-----*/
+QLineEdit
+{
+ background-color: #F6F5F5;
+ color : #276678;
+ border: 1px solid #1d1d1d;
+ padding-left: 6px;
+ height: 20px;
+ border-radius: 4px;
+
+}
+
+QLineEdit::disabled
+{
+ background-color: #D3D3D3;
+ color : #276678;
+ border: 1px solid #1d1d1d;
+ padding-left: 6px;
+ height: 20px;
+ border-radius: 4px;
+
+}
+
+
+/*-----QPlainTExtEdit-----*/
+QPlainTextEdit
+{
+ background-color: #F6F5F5;
+ color : #F6F5F5;
+ border: 1px solid #276678;
+ padding: 3px;
+ padding-left: 5px;
+ border-radius: 4px;
+
+}
+
+
+/*-----QToolBox-----*/
+QToolBox
+{
+ background-color: transparent;
+ border: 1px solid #D3E0EA;
+
+}
+
+
+QToolBox::tab
+{
+ background-color: #D3E0EA;
+ border: 1px solid #D3E0EA;
+
+}
+
+
+QToolBox::tab:hover
+{
+ background-color: #D3E0EA;
+ border: 1px solid #1d1d1d;
+
+}
+
+
+/*-----QComboBox-----*/
+QComboBox
+{
+ background-color: #1687A7;
+ padding-left: 6px;
+ color: #fff;
+ height: 20px;
+ border-radius: 4px;
+}
+
+
+QComboBox::disabled
+{
+ background-color: #D3D3D3;
+ color: #656565;
+ border-color: #051a39;
+
+}
+
+
+QComboBox:on
+{
+ background-color: #1687A7;
+ color: #fff;
+
+}
+
+
+QComboBox QAbstractItemView
+{
+ background-color: #1687A7;
+ color: #fff;
+ selection-background-color: #002b2b;
+ selection-color: #fff;
+ outline: 0;
+
+}
+
+
+QComboBox::drop-down
+{
+ background-color: #276678;
+ subcontrol-origin: padding;
+ subcontrol-position: top right;
+ border-radius: 4px;
+ width: 15px;
+
+}
+
+
+QComboBox::down-arrow
+{
+ image: url("./icons/down.png");
+ width: 7px;
+ height: 7px;
+
+}
+
+/*-----QSpinBox-----*/
+QSpinBox
+{
+ background-color: #1687A7;
+ color : #F6F5F5;
+ padding-left: 6px;
+ height: 20px;
+ border-radius: 4px;
+}
+
+QSpinBox::disabled
+{
+ background-color: #D3D3D3;
+ color: #656565;
+ border-color: #051a39;
+
+}
+
+QSpinBox::up-button
+{
+ background-color: #276678;
+ width: 16px;
+ border-top-right-radius: 4px;
+ border-width: 1px;
+ border-color: #1d1d1d;
+
+}
+
+QSpinBox::up-button:hover
+{
+ background-color: #585858;
+
+}
+
+QSpinBox::up-button:pressed
+{
+ background-color: #252525;
+ width: 16px;
+ border-width: 1px;
+
+}
+
+QSpinBox::up-arrow
+{
+ image: url("./icons/up-arrow.png");
+ width: 7px;
+ height: 7px;
+
+}
+
+QSpinBox::down-button
+{
+ background-color: #276678;
+ width: 16px;
+ border-width: 1px;
+ border-bottom-right-radius: 4px;
+ border-color: #1d1d1d;
+
+}
+
+QSpinBox::down-button:hover
+{
+ background-color: #585858;
+
+}
+
+QSpinBox::down-button:pressed
+{
+ background-color: #252525;
+ width: 16px;
+ border-width: 1px;
+
+}
+
+QSpinBox::down-button:pressed
+{
+ background-color: #252525;
+ width: 16px;
+ border-width: 1px;
+
+}
+
+QSpinBox::down-arrow
+{
+ image: url("./icons/down.png");
+ width: 7px;
+ height: 7px;
+
+}
+
+/*-----QDateTimeEdit-----*/
+QDateTimeEdit
+{
+ background-color: #1687A7;
+ color : #F6F5F5;
+ padding-left: 6px;
+ height: 20px;
+ border-radius: 4px;
+}
+
+QDateTimeEdit::up-button
+{
+ background-color: #276678;
+ width: 16px;
+ border-top-right-radius: 4px;
+ border-width: 1px;
+ border-color: #1d1d1d;
+
+}
+
+QDateTimeEdit::up-button:hover
+{
+ background-color: #585858;
+
+}
+
+QDateTimeEdit::up-button:pressed
+{
+ background-color: #252525;
+ width: 16px;
+ border-width: 1px;
+
+}
+
+QDateTimeEdit::up-arrow
+{
+ image: url("./icons/up-arrow.png");
+ width: 7px;
+ height: 7px;
+
+}
+
+QDateTimeEdit::down-button
+{
+ background-color: #276678;
+ width: 16px;
+ border-width: 1px;
+ border-bottom-right-radius: 4px;
+ border-color: #1d1d1d;
+
+}
+
+QDateTimeEdit::down-button:hover
+{
+ background-color: #585858;
+
+}
+
+QDateTimeEdit::down-button:pressed
+{
+ background-color: #252525;
+ width: 16px;
+ border-width: 1px;
+
+}
+
+QDateTimeEdit::down-button:pressed
+{
+ background-color: #252525;
+ width: 16px;
+ border-width: 1px;
+
+}
+
+QDateTimeEdit::down-arrow
+{
+ image: url("./icons/down.png");
+ width: 7px;
+ height: 7px;
+
+}
+
+/*-----QDoubleSpinBox & QCalendarWidget-----*/
+QCalendarWidget
+{
+ background-color: #1687A7;
+ color : #fff;
+ border: 1px solid #1d1d1d;
+ border-radius: 4px;
+ padding: 3px;
+ padding-left: 5px;
+
+}
+
+
+QCalendarWidget::up-button
+{
+ background-color: #4a5157;
+ width: 16px;
+ border-top-right-radius: 4px;
+ border-width: 1px;
+ border-color: #D3E0EA;
+
+}
+
+
+QCalendarWidget::up-button:hover
+{
+ background-color: #276678;
+}
+
+
+QCalendarWidget::up-button:pressed
+{
+ background-color: #276678;
+ width: 16px;
+ border-width: 1px;
+
+}
+
+
+QCalendarWidget::up-arrow
+{
+ image: url("./icons/up-arrow.png");
+ width: 7px;
+ height: 7px;
+
+}
+
+
+QCalendarWidget::down-button
+{
+ background-color: #276678;
+ width: 16px;
+ border-width: 1px;
+ border-bottom-right-radius: 4px;
+ border-color: #1d1d1d;
+
+}
+
+
+QCalendarWidget::down-button:hover
+{
+ background-color: #276678;
+
+}
+
+
+QCalendarWidget::down-button:pressed
+{
+ background-color: #276678;
+ width: 16px;
+ border-width: 1px;
+
+}
+
+
+QCalendarWidget::down-arrow
+{
+ image: url("./icons/down.png");
+ width: 7px;
+ height: 7px;
+
+}
+
+
+/*-----QGroupBox-----*/
+QGroupBox
+{
+ border: 1px solid #276678;
+ border-color: #276678;
+ border-radius: 4px;
+ margin-top: 25px;
+}
+
+
+QGroupBox::title
+{
+ background-color: #D3E0EA;
+ border: 1px solid #276678;
+ color: #276678;
+ subcontrol-position: top left;
+ subcontrol-origin: margin;
+ padding: 3px;
+ min-width: 16px;
+}
+
+
+/*-----QHeaderView-----*/
+QHeaderView::section
+{
+ background-color: #4a5157;
+ border: none;
+ color: #fff;
+ padding: 4px;
+
+}
+
+
+QHeaderView::section:disabled
+{
+ background-color: #525251;
+ color: #656565;
+
+}
+
+
+QHeaderView::section:checked
+{
+ background-color: qlineargradient(spread:repeat, x1:1, y1:0, x2:1, y2:1, stop:0 rgba(227, 227, 227, 255),stop:1 rgba(187, 187, 187, 255));
+ color: #000;
+
+}
+
+
+QHeaderView::section::vertical::first,
+QHeaderView::section::vertical::only-one
+{
+ border-left: 1px solid #003333;
+
+}
+
+
+QHeaderView::section::vertical
+{
+ border-left: 1px solid #003333;
+}
+
+
+QHeaderView::section::horizontal::first,
+QHeaderView::section::horizontal::only-one
+{
+ border-left: 1px solid #003333;
+
+}
+
+
+QHeaderView::section::horizontal
+{
+ border-left: 1px solid #003333;
+
+}
+
+
+QTableCornerButton::section
+{
+ background-color: qlineargradient(spread:repeat, x1:1, y1:0, x2:1, y2:1, stop:0 rgba(227, 227, 227, 255),stop:1 rgba(187, 187, 187, 255));
+ border: 1px solid #000;
+ color: #fff;
+
+}
+
+/*-----QTabWidget-----*/
+
+QTabWidget::pane { /* The tab widget frame */
+ border-top: 1px solid #1687A7;
+ padding: 8px;
+}
+
+QTabWidget::tab-bar {
+ alignment: center;
+}
+
+/* Style the tab using the tab sub-control. Note that
+ it reads QTabBar _not_ QTabWidget */
+QTabBar::tab {
+ background-color: #D3E0EA;
+ color: #fff;
+ padding: 5px;
+ min-width: 64px;
+ border: 1px solid #276678;
+ border-top-left-radius: 4px;
+ border-top-right-radius: 4px;
+ border-bottom: none;
+}
+
+QTabBar::tab:selected, QTabBar::tab:hover {
+ background-color: #1687A7;
+}
+
+QTabBar::tab:selected {
+ border-color: #9B9B9B;
+ border-bottom-color: #C2C7CB; /* same as pane color */
+}
+
+QTabBar::tab:!selected {
+ margin-top: 2px; /* make non-selected tabs look smaller */
+}
+
+/*-----QTextEdit-----*/
+QTextEdit {
+ color: #276678;
+ background-color: #F6F5F5;
+}
+
+/*-----QTableView-----*/
+QTableWidget{
+ color:#1687A7;
+ background:#F6F5F5;
+ border:1px solid #242424;
+ alternate-background-color:#D3E0EA;/*交错颜色*/
+ gridline-color:#242424;
+}
+
+QTableWidget::item:selected{
+ color:#F6F5F5;
+ background:qlineargradient(spread:pad,x1:0,y1:0,x2:0,y2:1,stop:0 #1687A7,stop:1 #1687A7);
+}
+
+QTableWidget::item:hover{
+ color:#F6F5F5;
+ background:#1687A7;
+}
+
+
+QHeaderView::section
+{
+ text-align:center;
+ background:#276678;
+ padding:3px;
+ margin:0px;
+ color:#F6F5F5;
+ border:1px solid #276678;
+ border-left-width:0;
+}
+
+QHeaderView::section:checked
+{
+ background:#276678;
+ padding:3px;
+ margin:0px;
+ color:#F6F5F5;
+ border:1px solid #276678;
+ border-left-width:0;
+}
+
+/*表右侧的滑条*/
+QScrollBar:vertical{
+ background:#276678;
+ padding:0px;
+ border-radius:6px;
+ max-width:12px;
+}
+
+/*滑块*/
+QScrollBar::handle:horizontal{
+ background:#276678;
+}
+
+/*滑块*/
+QScrollBar::handle:vertical{
+ background:#276678;
+}
+
+/*滑块悬浮,按下*/
+QScrollBar::handle:hover:vertical,QScrollBar::handle:pressed:vertical{
+ background:#1687A7;
+}
+/*
+滑块已经划过的区域*/
+QScrollBar::sub-page:vertical{
+ background:444444;
+}
+
+/*
+滑块还没有划过的区域*/
+QScrollBar::add-page:vertical{
+ background:5B5B5B;
+}
+
+/*页面下移的按钮*/
+QScrollBar::add-line:vertical{
+ background:none;
+}
+/*页面上移的按钮*/
+QScrollBar::sub-line:vertical{
+ background:none;
+}
+
+/*-----QTreeWidget-----*/
+QTreeView
+{
+ show-decoration-selected: 0;
+ alternate-background-color: transparent;
+ background-color: #D3E0EA;
+ border: none;
+ color: #1687A7;
+ font: 8pt;
+
+}
+
+
+QTreeView::item:selected
+{
+ color:#fff;
+ background-color: #1687A7;
+ border-radius: 0px;
+
+}
+
+
+QTreeView::item:!selected:hover
+{
+ background-color: #1687A7;
+ border: none;
+ color: white;
+
+}
+
+
+QTreeView::branch:has-children:!has-siblings:closed,
+QTreeView::branch:closed:has-children:has-siblings
+{
+ image: url(://tree-closed.png);
+
+}
+
+
+QTreeView::branch:open:has-children:!has-siblings,
+QTreeView::branch:open:has-children:has-siblings
+{
+ image: url(://tree-open.png);
+
+}
+
+
+/*-----QListView-----*/
+QListView
+{
+ background-color: transparent;
+ alternate-background-color: transparent;
+ border : none;
+ color: #fff;
+ show-decoration-selected: 1;
+ outline: 0;
+ border: 1px solid #1d1d1d;
+
+}
+
+
+QListView::disabled
+{
+ background-color: #656565;
+ color: #1b1b1b;
+ border: 1px solid #656565;
+
+}
+
+
+QListView::item
+{
+ background-color: transparent;
+ padding: 1px;
+
+}
+
+
+QListView::item:selected
+{
+ background-color: #002b2b;
+ border: 1px solid #002b2b;
+ color: #fff;
+
+}
+
+
+QListView::item:selected:!active
+{
+ background-color: #002b2b;
+ border: 1px solid #002b2b;
+ color: #fff;
+
+}
+
+
+QListView::item:selected:active
+{
+ background-color: #002b2b;
+ border: 1px solid #002b2b;
+ color: #fff;
+
+}
+
+
+QListView::item:hover {
+ background-color: #5e5e5e;
+ border: none;
+ color: #000;
+
+}
+
+
+/*-----QCheckBox-----*/
+QCheckBox
+{
+ background-color: transparent;
+ color: #276678;
+ border: none;
+
+}
+
+
+QCheckBox::indicator
+{
+ background-color: lightgray;
+ border: 1px solid #000;
+ width: 12px;
+ height: 12px;
+
+}
+
+
+QCheckBox::indicator:checked
+{
+ image:url("./icons/check.png");
+ background-color: #1687A7;
+ border: 1px solid #3a546e;
+
+}
+
+
+QCheckBox::indicator:unchecked:hover
+{
+ border: 1px solid #D3E0EA;
+
+}
+
+
+QCheckBox::disabled
+{
+ color: #656565;
+
+}
+
+
+QCheckBox::indicator:disabled
+{
+ background-color: #656565;
+ color: #656565;
+ border: 1px solid #656565;
+
+}
+
+
+/*-----QRadioButton-----*/
+QRadioButton
+{
+ color: #fff;
+ background-color: transparent;
+
+}
+
+
+QRadioButton::indicator::unchecked:hover
+{
+ background-color: #d3d3d3;
+ border: 2px solid #002b2b;
+ border-radius: 6px;
+}
+
+
+QRadioButton::indicator::checked
+{
+ border: 2px solid #52beff;
+ border-radius: 6px;
+ background-color: #002b2b;
+ width: 9px;
+ height: 9px;
+
+}
+
+
+/*-----QScrollBar-----*/
+QScrollBar:vertical
+{
+ border: none;
+ width: 12px;
+
+}
+
+
+QScrollBar::handle:vertical
+{
+ border: none;
+ border-radius : 0px;
+ background-color: #7a7a7a;
+ min-height: 80px;
+ width : 12px;
+
+}
+
+
+QScrollBar::handle:vertical:pressed
+{
+ background-color: #5d5f60;
+
+}
+
+
+QScrollBar::add-line:vertical
+{
+ border: none;
+ background: transparent;
+ height: 0px;
+ subcontrol-position: bottom;
+ subcontrol-origin: margin;
+
+}
+
+
+QScrollBar::add-line:vertical:hover
+{
+ background-color: transparent;
+
+}
+
+
+QScrollBar::add-line:vertical:pressed
+{
+ background-color: #3f3f3f;
+
+}
+
+
+QScrollBar::sub-line:vertical
+{
+ border: none;
+ background: transparent;
+ height: 0px;
+
+}
+
+
+QScrollBar::sub-line:vertical:hover
+{
+ background-color: transparent;
+
+}
+
+
+QScrollBar::sub-line:vertical:pressed
+{
+ background-color: #3f3f3f;
+
+}
+
+
+QScrollBar::up-arrow:vertical
+{
+ width: 0px;
+ height: 0px;
+ background: transparent;
+
+}
+
+
+QScrollBar::down-arrow:vertical
+{
+ width: 0px;
+ height: 0px;
+ background: transparent;
+
+}
+
+
+QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical
+{
+ background-color: #222222;
+
+}
+
+
+QScrollBar:horizontal
+{
+ border: none;
+ height: 12px;
+
+}
+
+
+QScrollBar::handle:horizontal
+{
+ border: none;
+ border-radius : 0px;
+ background-color: #7a7a7a;
+ min-height: 80px;
+ height : 12px;
+
+}
+
+
+QScrollBar::handle:horizontal:pressed
+{
+ background-color: #5d5f60;
+
+}
+
+
+QScrollBar::add-line:horizontal
+{
+ border: none;
+ background: transparent;
+ height: 0px;
+ subcontrol-position: bottom;
+ subcontrol-origin: margin;
+
+}
+
+
+QScrollBar::add-line:horizontal:hover
+{
+ background-color: transparent;
+
+}
+
+
+QScrollBar::add-line:horizontal:pressed
+{
+ background-color: #3f3f3f;
+
+}
+
+
+QScrollBar::sub-line:horizontal
+{
+ border: none;
+ background: transparent;
+ height: 0px;
+
+}
+
+
+QScrollBar::sub-line:horizontal:hover
+{
+ background-color: transparent;
+
+}
+
+
+QScrollBar::sub-line:horizontal:pressed
+{
+ background-color: #3f3f3f;
+
+}
+
+
+QScrollBar::up-arrow:horizontal
+{
+ width: 0px;
+ height: 0px;
+ background: transparent;
+
+}
+
+
+QScrollBar::down-arrow:horizontal
+{
+ width: 0px;
+ height: 0px;
+ background: transparent;
+
+}
+
+
+QScrollBar::add-page:horizontal, QScrollBar::sub-page:horizontal
+{
+ background-color: #222222;
+
+}
+
+
+/*-----QProgressBar-----*/
+QProgressBar
+{
+ border: 1px solid #1d1d1d;
+ text-align: center;
+ border-radius: 10px;
+ color: #fff;
+ font-weight: bold;
+
+}
+
+
+QProgressBar::chunk
+{
+ background-color: #3b86ae;
+ border-radius: 9px;
+ margin: 0.5px;
+
+}
+
+
+/*-----QStatusBar-----*/
+QStatusBar
+{
+ background-color: #4a5157;
+ color: #ffffff;
+ border-color: #051a39;
+
+}
+
+
+/*-----QSizeGrip-----*/
+QSizeGrip
+{
+ background-color: image("./ressources/sizegrip.png"); /*To replace*/
+ border: none;
+
+} \ No newline at end of file
diff --git a/resource/icons/check.png b/resource/icons/check.png
new file mode 100644
index 00000000..e793ced2
--- /dev/null
+++ b/resource/icons/check.png
Binary files differ
diff --git a/resource/icons/down.png b/resource/icons/down.png
new file mode 100644
index 00000000..e3531e0f
--- /dev/null
+++ b/resource/icons/down.png
Binary files differ
diff --git a/resource/icons/up-arrow.png b/resource/icons/up-arrow.png
new file mode 100644
index 00000000..12451e50
--- /dev/null
+++ b/resource/icons/up-arrow.png
Binary files differ
diff --git a/resource/ts/gpgfrontend_en_us.ts b/resource/ts/gpgfrontend_en_us.ts
index 0042e061..9adfc9a4 100644
--- a/resource/ts/gpgfrontend_en_us.ts
+++ b/resource/ts/gpgfrontend_en_us.ts
@@ -27,75 +27,85 @@
<context>
<name>AdvancedTab</name>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="679"/>
- <source>Show Steganography Options [Advanced]</source>
+ <location filename="../../src/ui/settings/SettingsAdvanced.cpp" line="34"/>
+ <source>Show Steganography Options</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="681"/>
+ <location filename="../../src/ui/settings/SettingsAdvanced.cpp" line="36"/>
<source>Show Steganographic Options.</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <location filename="../../src/ui/settings/SettingsAdvanced.cpp" line="40"/>
+ <source>Pubkey Exchange</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/settings/SettingsAdvanced.cpp" line="42"/>
+ <source>Auto Pubkey Exchange</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>AppearanceTab</name>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="444"/>
+ <location filename="../../src/ui/settings/SettingsAppearance.cpp" line="34"/>
<source>Iconsize</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="446"/>
+ <location filename="../../src/ui/settings/SettingsAppearance.cpp" line="36"/>
<source>small</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="447"/>
+ <location filename="../../src/ui/settings/SettingsAppearance.cpp" line="37"/>
<source>medium</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="448"/>
+ <location filename="../../src/ui/settings/SettingsAppearance.cpp" line="38"/>
<source>large</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="464"/>
+ <location filename="../../src/ui/settings/SettingsAppearance.cpp" line="54"/>
<source>Iconstyle</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="466"/>
+ <location filename="../../src/ui/settings/SettingsAppearance.cpp" line="56"/>
<source>just text</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="467"/>
+ <location filename="../../src/ui/settings/SettingsAppearance.cpp" line="57"/>
<source>just icons</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="468"/>
+ <location filename="../../src/ui/settings/SettingsAppearance.cpp" line="58"/>
<source>text and icons</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="484"/>
+ <location filename="../../src/ui/settings/SettingsAppearance.cpp" line="74"/>
<source>Windowstate</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="487"/>
+ <location filename="../../src/ui/settings/SettingsAppearance.cpp" line="77"/>
<source>Save window size and position on exit.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="495"/>
+ <location filename="../../src/ui/settings/SettingsAppearance.cpp" line="85"/>
<source>Information Board</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="501"/>
+ <location filename="../../src/ui/settings/SettingsAppearance.cpp" line="91"/>
<source> Front Size</source>
<translation type="unfinished"></translation>
</message>
@@ -103,101 +113,202 @@
<context>
<name>ChoosePage</name>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="165"/>
+ <location filename="../../src/ui/Wizard.cpp" line="121"/>
<source>Choose your action...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="166"/>
+ <location filename="../../src/ui/Wizard.cpp" line="122"/>
<source>...by clicking on the appropriate link.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="168"/>
+ <location filename="../../src/ui/Wizard.cpp" line="124"/>
<source>If you have never used GPGFrontend before and also don&apos;t own a gpg key yet you may possibly want to read how to</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="170"/>
+ <location filename="../../src/ui/Wizard.cpp" line="127"/>
<source>Generate Key</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="176"/>
+ <location filename="../../src/ui/Wizard.cpp" line="134"/>
<source>If you want to learn how to encrypt, decrypt, sign and verify text, you can read </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="178"/>
+ <location filename="../../src/ui/Wizard.cpp" line="136"/>
<source>Encrypt &amp; Decrypt Text</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="178"/>
- <location filename="../../src/ui/Wizard.cpp" line="190"/>
+ <location filename="../../src/ui/Wizard.cpp" line="136"/>
+ <location filename="../../src/ui/Wizard.cpp" line="149"/>
<source>or</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="180"/>
+ <location filename="../../src/ui/Wizard.cpp" line="138"/>
<source>Sign &amp; Verify Text</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="188"/>
+ <location filename="../../src/ui/Wizard.cpp" line="146"/>
<source>If you want to operate file, you can read </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="190"/>
+ <location filename="../../src/ui/Wizard.cpp" line="149"/>
<source>Encrypt &amp; Sign File</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="192"/>
+ <location filename="../../src/ui/Wizard.cpp" line="152"/>
<source>Sign &amp; Verify File</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
+ <name>ComUtils</name>
+ <message>
+ <location filename="../../src/server/ComUtils.cpp" line="35"/>
+ <location filename="../../src/server/ComUtils.cpp" line="55"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/server/ComUtils.cpp" line="35"/>
+ <source>Nothing Reply. Please check the Internet connection.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/server/ComUtils.cpp" line="55"/>
+ <source>Unknown Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/server/ComUtils.cpp" line="75"/>
+ <location filename="../../src/server/ComUtils.cpp" line="90"/>
+ <source>Network Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/server/ComUtils.cpp" line="75"/>
+ <source>Outdated Reply</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/server/ComUtils.cpp" line="87"/>
+ <source>Unknown Reason</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/server/ComUtils.cpp" line="90"/>
+ <source>Unknown Reply Format</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>ConclusionPage</name>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="407"/>
+ <location filename="../../src/ui/Wizard.cpp" line="224"/>
<source>Ready.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="408"/>
+ <location filename="../../src/ui/Wizard.cpp" line="225"/>
<source>Have fun with GPGFrontend!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="410"/>
+ <location filename="../../src/ui/Wizard.cpp" line="227"/>
<source>You are ready to use GPGFrontend now.&lt;br&gt;&lt;br&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="412"/>
+ <location filename="../../src/ui/Wizard.cpp" line="229"/>
<source>The Online Document</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="413"/>
+ <location filename="../../src/ui/Wizard.cpp" line="231"/>
<source> will get you started with GPGFrontend. It will open in the main window.&lt;br&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="420"/>
+ <location filename="../../src/ui/Wizard.cpp" line="238"/>
<source>Open offline help.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="423"/>
+ <location filename="../../src/ui/Wizard.cpp" line="241"/>
<source>Dont show the wizard again.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
+ <name>DecryptResultAnalyse</name>
+ <message>
+ <location filename="../../src/gpg/result_analyse/DecryptResultAnalyse.cpp" line="30"/>
+ <source>[#] Decrypt Operation </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/DecryptResultAnalyse.cpp" line="33"/>
+ <source>[Success]</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/DecryptResultAnalyse.cpp" line="35"/>
+ <source>[Failed] </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/DecryptResultAnalyse.cpp" line="39"/>
+ <source>Unsupported Algo: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/DecryptResultAnalyse.cpp" line="46"/>
+ <source>File Name: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/DecryptResultAnalyse.cpp" line="52"/>
+ <source>Recipient(s): </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/DecryptResultAnalyse.cpp" line="82"/>
+ <source> Keu ID: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/DecryptResultAnalyse.cpp" line="83"/>
+ <source> Public Algo: </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>EncryptResultAnalyse</name>
+ <message>
+ <location filename="../../src/gpg/result_analyse/EncryptResultAnalyse.cpp" line="41"/>
+ <source>Invalid Recipients: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/EncryptResultAnalyse.cpp" line="44"/>
+ <source>Fingerprint: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/EncryptResultAnalyse.cpp" line="45"/>
+ <source>Reason: </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>FileEncryptionDialog</name>
<message>
<location filename="../../src/ui/FileEncryptionDialog.cpp" line="32"/>
@@ -360,195 +471,172 @@
<context>
<name>GeneralTab</name>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="137"/>
- <source>Remember Password</source>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="40"/>
+ <source>GpgFrontend Server</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="140"/>
- <source>Remember password until closing gpg4usb</source>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="45"/>
+ <source>Server that provides short key and key exchange services</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="147"/>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="52"/>
<source>Save Checked Keys</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="150"/>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="55"/>
<source>Save checked private keys on exit and restore them on next start.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="159"/>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="64"/>
<source>Confirm drag&apos;n&apos;drop key import</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="162"/>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="67"/>
<source>Import files dropped on the keylist without confirmation.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="169"/>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="74"/>
<source>Language</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="178"/>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="83"/>
<source>&lt;b&gt;NOTE: &lt;/b&gt; GpgFrontend will restart automatically if you change the language!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="187"/>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="92"/>
<source>Own key</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="195"/>
- <source>&lt;none&gt;</source>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="96"/>
+ <source>Get Service Token</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="209"/>
- <source>Key pair for synchronization and identity authentication</source>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="97"/>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="234"/>
+ <source>No Service Token Found</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>GpgME::GpgContext</name>
<message>
- <location filename="../../src/gpg/GpgContext.cpp" line="528"/>
- <source>Wrong password</source>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="103"/>
+ <source>&lt;none&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/GpgContext.cpp" line="536"/>
- <source>Enter Password for</source>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="120"/>
+ <source>Key pair for synchronization and identity authentication</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/GpgContext.cpp" line="540"/>
- <source>Enter Password</source>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="252"/>
+ <source>Invalid Operation</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/GpgContext.cpp" line="706"/>
- <source>Key Selection</source>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="253"/>
+ <source>Own Key can not be None while getting service token.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/GpgContext.cpp" line="706"/>
- <source>No Private Key Selected</source>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="265"/>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="336"/>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="353"/>
+ <source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/GpgContext.cpp" line="746"/>
- <source>Error in signing:</source>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="266"/>
+ <source>Key Not Exists</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>GpgPathsTab</name>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="711"/>
- <source>Relative path to keydb</source>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="337"/>
+ <source>The communication content with the server does not meet the requirements</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="724"/>
- <source>Current keydb path: </source>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="350"/>
+ <source>Notice</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="729"/>
- <source>&lt;b&gt;NOTE: &lt;/b&gt; Gpg4usb will restart automatically if you change the keydb path!</source>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="351"/>
+ <source>Succeed in getting service token</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="758"/>
- <source>Choose keydb directory</source>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="353"/>
+ <source>There is a problem with the communication with the server</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
- <name>ImportFromGnupgPage</name>
- <message>
- <location filename="../../src/ui/Wizard.cpp" line="302"/>
- <source>Import keys...</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../src/ui/Wizard.cpp" line="303"/>
- <source>...from existing GnuPG installation</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../src/ui/Wizard.cpp" line="305"/>
- <source>You can import keys from a locally installed GnuPG.&lt;br&gt;&lt;br&gt; The location is read from registry in Windows or assumed to be the .gnupg folder in the your home directory in Linux.&lt;br&gt;</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../src/ui/Wizard.cpp" line="309"/>
- <source>Import keys from GnuPG</source>
- <translation type="unfinished"></translation>
- </message>
+ <name>GpgME::GpgContext</name>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="323"/>
- <source>Import Error</source>
+ <location filename="../../src/gpg/gpg_context/GpgContext.cpp" line="184"/>
+ <source>Wrong password</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="323"/>
- <source>Couldn&apos;t locate GnuPG home directory</source>
+ <location filename="../../src/gpg/gpg_context/GpgContext.cpp" line="192"/>
+ <source>Enter Password for</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>ImportFromGpg4usbPage</name>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="225"/>
- <source>Import from...</source>
+ <location filename="../../src/gpg/gpg_context/GpgContext.cpp" line="196"/>
+ <source>Enter Password</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="226"/>
- <source>...existing GPGFrontend</source>
+ <location filename="../../src/gpg/gpg_context/GpgContext.cpp" line="258"/>
+ <source>Processing</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="228"/>
- <source>You can import keys and/or settings from existing GPGFrontend. &lt;br&gt;&lt;br&gt;Just check what you want to import, click the import button and choose the directory of your other GPGFrontend in the appearing file dialog.</source>
+ <location filename="../../src/gpg/gpg_context/GpgContextBasicOpera.cpp" line="164"/>
+ <source>Key Selection</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="235"/>
- <source>Keys</source>
+ <location filename="../../src/gpg/gpg_context/GpgContextBasicOpera.cpp" line="164"/>
+ <source>No Private Key Selected</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="239"/>
- <source>Configuration</source>
+ <location filename="../../src/gpg/gpg_context/GpgContextBasicOpera.cpp" line="195"/>
+ <source>Error in signing:</source>
<translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>GpgPathsTab</name>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="241"/>
- <source>Import from GPGFrontend</source>
+ <location filename="../../src/ui/settings/SettingsDialog.cpp" line="139"/>
+ <source>Relative path to keydb</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="256"/>
- <source>Other GPGFrontend directory</source>
+ <location filename="../../src/ui/settings/SettingsDialog.cpp" line="152"/>
+ <source>Current keydb path: </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="275"/>
- <source>Configuration Imported</source>
+ <location filename="../../src/ui/settings/SettingsDialog.cpp" line="157"/>
+ <source>&lt;b&gt;NOTE: &lt;/b&gt; Gpg4usb will restart automatically if you change the keydb path!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="276"/>
- <source>Imported Configuration from old GPGFrontend.&lt;br&gt;Will now restart to activate the configuration.</source>
+ <location filename="../../src/ui/settings/SettingsDialog.cpp" line="186"/>
+ <source>Choose keydb directory</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -561,29 +649,29 @@
</message>
<message>
<location filename="../../src/ui/widgets/InfoBoardWidget.cpp" line="57"/>
- <source>Optional Actions Menu</source>
+ <source>Optional Actions</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>InfoTab</name>
<message>
- <location filename="../../src/ui/help/AboutDialog.cpp" line="74"/>
+ <location filename="../../src/ui/help/AboutDialog.cpp" line="76"/>
<source>&lt;br&gt;&lt;center&gt;GPGFrontend is an easy-to-use, compact, cross-platform, &lt;br&gt;and installation-free gpg front-end tool.&lt;br&gt;It visualizes most of the common operations of gpg commands.&lt;br&gt;It&apos;s licensed under the GPL v3&lt;br&gt;&lt;br&gt;&lt;b&gt;Developer:&lt;/b&gt;&lt;br&gt;Saturneric&lt;br&gt;&lt;br&gt;If you have any questions or suggestions, raise an issue&lt;br/&gt;at &lt;a href=&quot;https://github.com/saturneric/GpgFrontend&quot;&gt;GitHub&lt;/a&gt; or send a mail to my mailing list at &lt;a href=&quot;mailto:[email protected]&quot;&gt;[email protected]&lt;/a&gt;.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/help/AboutDialog.cpp" line="82"/>
+ <location filename="../../src/ui/help/AboutDialog.cpp" line="84"/>
<source>&lt;br&gt;&lt;br&gt; Built with Qt </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/help/AboutDialog.cpp" line="83"/>
+ <location filename="../../src/ui/help/AboutDialog.cpp" line="85"/>
<source> and GPGME </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/help/AboutDialog.cpp" line="84"/>
+ <location filename="../../src/ui/help/AboutDialog.cpp" line="86"/>
<source>&lt;br&gt;Built at </source>
<translation type="unfinished"></translation>
</message>
@@ -591,42 +679,42 @@
<context>
<name>IntroPage</name>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="111"/>
+ <location filename="../../src/ui/Wizard.cpp" line="66"/>
<source>Getting Started...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="112"/>
+ <location filename="../../src/ui/Wizard.cpp" line="67"/>
<source>... with GPGFrontend</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="114"/>
+ <location filename="../../src/ui/Wizard.cpp" line="69"/>
<source>Welcome to use GPGFrontend for decrypting and signing text or file!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="116"/>
+ <location filename="../../src/ui/Wizard.cpp" line="71"/>
<source>is a Powerful, Easy-to-Use, Compact, Cross-Platform, and Installation-Free OpenPGP Crypto Tool.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="117"/>
+ <location filename="../../src/ui/Wizard.cpp" line="72"/>
<source>For brief information have a look at the</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="118"/>
+ <location filename="../../src/ui/Wizard.cpp" line="74"/>
<source>Overview</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="119"/>
+ <location filename="../../src/ui/Wizard.cpp" line="75"/>
<source>by clicking the link, the page will open in the web browser</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="127"/>
+ <location filename="../../src/ui/Wizard.cpp" line="83"/>
<source>Choose a Language</source>
<translation type="unfinished"></translation>
</message>
@@ -657,128 +745,110 @@
<context>
<name>KeyGenDialog</name>
<message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="32"/>
+ <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="33"/>
<source>Generate Key</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="68"/>
+ <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="69"/>
<source> Name must contain at least five characters.
</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="70"/>
+ <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="71"/>
<source> Please give a email address.
</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="77"/>
+ <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="78"/>
<source> Expiration time no more than 2 years.
</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="103"/>
- <source>Generating Key...</source>
+ <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="112"/>
+ <source>Success</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="106"/>
- <source>Collecting random data for key generation.
- This may take a while.
- To speed up the process use your computer
- (e.g. browse the net, listen to music,...)</source>
+ <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="112"/>
+ <source>The new key pair has been generated.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="150"/>
+ <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="116"/>
+ <source>Failure</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="145"/>
<source>Key Usage</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="152"/>
+ <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="147"/>
<source>Encryption</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="155"/>
+ <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="150"/>
<source>Signing</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="158"/>
+ <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="153"/>
<source>Certification</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="161"/>
+ <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="156"/>
<source>Authentication</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="312"/>
- <source>Success</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="312"/>
- <source>The new key pair has been generated.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="314"/>
- <source>Failure</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="314"/>
- <source>An error occurred during key generation.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="350"/>
+ <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="338"/>
<source>Name:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="351"/>
+ <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="339"/>
<source>Email Address:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="352"/>
+ <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="340"/>
<source>Comment:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="353"/>
+ <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="341"/>
<source>Expiration Date:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="354"/>
+ <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="342"/>
<source>Never Expire</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="355"/>
+ <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="343"/>
<source>KeySize (in Bit):</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="356"/>
+ <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="344"/>
<source>Key Type:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="357"/>
+ <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="345"/>
<source>Non Pass Phrase</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="370"/>
+ <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="358"/>
<source>Basic Information</source>
<translation type="unfinished"></translation>
</message>
@@ -786,27 +856,27 @@
<context>
<name>KeyGenPage</name>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="366"/>
+ <location filename="../../src/ui/Wizard.cpp" line="183"/>
<source>Create a keypair...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="367"/>
+ <location filename="../../src/ui/Wizard.cpp" line="184"/>
<source>...for decrypting and signing messages</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="368"/>
+ <location filename="../../src/ui/Wizard.cpp" line="185"/>
<source>You should create a new keypair.The pair consists of a public and a private key.&lt;br&gt;Other users can use the public key to encrypt messages for you and verify messages signed by you.You can use the private key to decrypt and sign messages.&lt;br&gt;For more information have a look at the offline tutorial (which then is shown in the main window):</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="375"/>
+ <location filename="../../src/ui/Wizard.cpp" line="192"/>
<source>Offline tutorial</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="382"/>
+ <location filename="../../src/ui/Wizard.cpp" line="199"/>
<source>Create New Key</source>
<translation type="unfinished"></translation>
</message>
@@ -934,58 +1004,58 @@
<context>
<name>KeyList</name>
<message>
- <location filename="../../src/ui/widgets/KeyList.cpp" line="77"/>
+ <location filename="../../src/ui/widgets/KeyList.cpp" line="76"/>
<source>Select</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/widgets/KeyList.cpp" line="77"/>
+ <location filename="../../src/ui/widgets/KeyList.cpp" line="76"/>
<source>Type</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/widgets/KeyList.cpp" line="77"/>
+ <location filename="../../src/ui/widgets/KeyList.cpp" line="76"/>
<source>Name</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/widgets/KeyList.cpp" line="77"/>
+ <location filename="../../src/ui/widgets/KeyList.cpp" line="76"/>
<source>Email Address</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/widgets/KeyList.cpp" line="78"/>
+ <location filename="../../src/ui/widgets/KeyList.cpp" line="77"/>
<source>Usage</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/widgets/KeyList.cpp" line="78"/>
+ <location filename="../../src/ui/widgets/KeyList.cpp" line="77"/>
<source>Validity</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/widgets/KeyList.cpp" line="78"/>
+ <location filename="../../src/ui/widgets/KeyList.cpp" line="77"/>
<source>Finger Print</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/widgets/KeyList.cpp" line="315"/>
+ <location filename="../../src/ui/widgets/KeyList.cpp" line="302"/>
<source>Import Keys</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/widgets/KeyList.cpp" line="317"/>
+ <location filename="../../src/ui/widgets/KeyList.cpp" line="305"/>
<source>You&apos;ve dropped something on the table.
GpgFrontend will now try to import key(s).</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/widgets/KeyList.cpp" line="320"/>
+ <location filename="../../src/ui/widgets/KeyList.cpp" line="308"/>
<source>Always import without bothering.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/widgets/KeyList.cpp" line="356"/>
+ <location filename="../../src/ui/widgets/KeyList.cpp" line="341"/>
<source>Couldn&apos;t Open File: </source>
<translation type="unfinished"></translation>
</message>
@@ -993,7 +1063,7 @@
<context>
<name>KeyMgmt</name>
<message>
- <location filename="../../src/ui/KeyMgmt.cpp" line="81"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="82"/>
<source>Key Pair Management</source>
<translation type="unfinished"></translation>
</message>
@@ -1059,7 +1129,7 @@
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="111"/>
- <location filename="../../src/ui/KeyMgmt.cpp" line="152"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="151"/>
<source>&amp;File</source>
<translation type="unfinished"></translation>
</message>
@@ -1139,94 +1209,108 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyMgmt.cpp" line="156"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="155"/>
<source>&amp;Key</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyMgmt.cpp" line="157"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="156"/>
<source>&amp;Generate Key</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyMgmt.cpp" line="161"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="160"/>
<source>&amp;Import Key</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyMgmt.cpp" line="173"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="171"/>
<source>Key</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyMgmt.cpp" line="181"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="179"/>
<source>Generate</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyMgmt.cpp" line="182"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="180"/>
<source>Generate A New Keypair or Subkey</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyMgmt.cpp" line="191"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="189"/>
<source>Import key</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyMgmt.cpp" line="192"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="190"/>
<source>Import Key</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyMgmt.cpp" line="213"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="209"/>
<source>Open Key</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyMgmt.cpp" line="213"/>
- <location filename="../../src/ui/KeyMgmt.cpp" line="299"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="210"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="302"/>
<source>Key Files</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyMgmt.cpp" line="213"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="210"/>
<source>Keyring files</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyMgmt.cpp" line="218"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="216"/>
<source>Couldn&apos;t Open File: </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyMgmt.cpp" line="268"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="262"/>
<source>Deleting Keys</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyMgmt.cpp" line="269"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="263"/>
<source>Are you sure that you want to delete the following keys?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyMgmt.cpp" line="270"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="265"/>
<source>The action can not be undone.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyMgmt.cpp" line="299"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="281"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="296"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="344"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="281"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="296"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="344"/>
+ <source>Key Not Found.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="301"/>
<source>Export Key To File</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyMgmt.cpp" line="309"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="312"/>
<source>key(s) exported</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="338"/>
- <location filename="../../src/ui/KeyMgmt.cpp" line="345"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="349"/>
<source>Invalid Operation</source>
<translation type="unfinished"></translation>
</message>
@@ -1236,7 +1320,7 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyMgmt.cpp" line="346"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="350"/>
<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>
@@ -1384,97 +1468,107 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="203"/>
- <source>You are about to export your</source>
+ <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="141"/>
+ <source>Modify Expiration Datetime (Master Key)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="204"/>
- <source>PRIVATE KEY</source>
+ <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="146"/>
+ <source>Key Server Operation (Pubkey)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="205"/>
- <source>This is NOT your Public Key, so DON&apos;T give it away.</source>
+ <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="149"/>
+ <source>Generate Revoke Certificate</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="206"/>
- <source>Do you REALLY want to export your PRIVATE KEY?</source>
+ <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="174"/>
+ <source>Warning: The Master Key has expired.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="141"/>
- <source>Modify Expiration Datetime (Master Key)</source>
+ <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="177"/>
+ <source>Warning: The Master Key has been revoked</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="146"/>
- <source>Key Server Operation (Pubkey)</source>
+ <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="201"/>
+ <source>Exporting private Key</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="149"/>
- <source>Generate Revoke Certificate</source>
+ <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="202"/>
+ <source>You are about to export your</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="175"/>
- <source>Warning: The Master Key has expired.</source>
+ <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="203"/>
+ <source>PRIVATE KEY</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="178"/>
- <source>Warning: The Master Key has been revoked</source>
+ <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="204"/>
+ <source>This is NOT your Public Key, so DON&apos;T give it away.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="202"/>
- <source>Exporting private Key</source>
+ <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="205"/>
+ <source>Do you REALLY want to export your PRIVATE KEY?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="219"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="219"/>
+ <source>Key Not Found.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="221"/>
+ <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="224"/>
<source>Export Key To File</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="222"/>
+ <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="225"/>
<source>Key Files</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="225"/>
+ <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="228"/>
<source>Export Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="225"/>
+ <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="228"/>
<source>Couldn&apos;t open %1 for writing</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="295"/>
+ <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="298"/>
<source>Never Expire</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="315"/>
+ <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="318"/>
<source>Upload Key Pair to Key Server</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="317"/>
+ <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="320"/>
<source>Update Key Pair</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="340"/>
+ <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="343"/>
<source>Generate revocation certificate</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="343"/>
+ <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="346"/>
<source>Revocation Certificates</source>
<translation type="unfinished"></translation>
</message>
@@ -1552,17 +1646,17 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyPairSubkeyTab.cpp" line="161"/>
+ <location filename="../../src/ui/keypair_details/KeyPairSubkeyTab.cpp" line="160"/>
<source>Never Expire</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyPairSubkeyTab.cpp" line="185"/>
+ <location filename="../../src/ui/keypair_details/KeyPairSubkeyTab.cpp" line="184"/>
<source>Never Expires</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyPairSubkeyTab.cpp" line="231"/>
+ <location filename="../../src/ui/keypair_details/KeyPairSubkeyTab.cpp" line="230"/>
<source>Edit Expire Date</source>
<translation type="unfinished"></translation>
</message>
@@ -1833,46 +1927,46 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyServerImportDialog.cpp" line="230"/>
- <source>Too many responses from keyserver!</source>
+ <location filename="../../src/ui/KeyServerImportDialog.cpp" line="213"/>
+ <source>Not Key Found</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyServerImportDialog.cpp" line="237"/>
- <source>No keys found, input may be kexId, retrying search with 0x.</source>
+ <location filename="../../src/ui/KeyServerImportDialog.cpp" line="216"/>
+ <location filename="../../src/ui/KeyServerImportDialog.cpp" line="386"/>
+ <source>Timeout</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyServerImportDialog.cpp" line="242"/>
- <source>No keys found containing the search string!</source>
+ <location filename="../../src/ui/KeyServerImportDialog.cpp" line="219"/>
+ <location filename="../../src/ui/KeyServerImportDialog.cpp" line="389"/>
+ <source>Key Server Not Found</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyServerImportDialog.cpp" line="246"/>
- <source>Insufficiently specific search string!</source>
+ <location filename="../../src/ui/KeyServerImportDialog.cpp" line="222"/>
+ <location filename="../../src/ui/KeyServerImportDialog.cpp" line="392"/>
+ <source>Connection Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyServerImportDialog.cpp" line="213"/>
- <source>Not Key Found</source>
+ <location filename="../../src/ui/KeyServerImportDialog.cpp" line="230"/>
+ <source>Too many responses from keyserver!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyServerImportDialog.cpp" line="216"/>
- <location filename="../../src/ui/KeyServerImportDialog.cpp" line="386"/>
- <source>Timeout</source>
+ <location filename="../../src/ui/KeyServerImportDialog.cpp" line="237"/>
+ <source>No keys found, input may be kexId, retrying search with 0x.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyServerImportDialog.cpp" line="219"/>
- <location filename="../../src/ui/KeyServerImportDialog.cpp" line="389"/>
- <source>Key Server Not Found</source>
+ <location filename="../../src/ui/KeyServerImportDialog.cpp" line="242"/>
+ <source>No keys found containing the search string!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyServerImportDialog.cpp" line="222"/>
- <location filename="../../src/ui/KeyServerImportDialog.cpp" line="392"/>
- <source>Connection Error</source>
+ <location filename="../../src/ui/KeyServerImportDialog.cpp" line="246"/>
+ <source>Insufficiently specific search string!</source>
<translation type="unfinished"></translation>
</message>
<message>
@@ -1947,22 +2041,22 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyUIDSignDialog.cpp" line="100"/>
+ <location filename="../../src/ui/keypair_details/KeyUIDSignDialog.cpp" line="99"/>
<source>Unsuccessful Operation</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyUIDSignDialog.cpp" line="101"/>
+ <location filename="../../src/ui/keypair_details/KeyUIDSignDialog.cpp" line="100"/>
<source>Signature operation failed for UID </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyUIDSignDialog.cpp" line="108"/>
+ <location filename="../../src/ui/keypair_details/KeyUIDSignDialog.cpp" line="107"/>
<source>Operation Complete</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyUIDSignDialog.cpp" line="109"/>
+ <location filename="../../src/ui/keypair_details/KeyUIDSignDialog.cpp" line="108"/>
<source>The signature operation of the UID is complete</source>
<translation type="unfinished"></translation>
</message>
@@ -1970,27 +2064,27 @@
<context>
<name>KeyUploadDialog</name>
<message>
- <location filename="../../src/ui/KeyUploadDialog.cpp" line="49"/>
+ <location filename="../../src/ui/KeyUploadDialog.cpp" line="47"/>
<source>Uploading Public Key</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyUploadDialog.cpp" line="112"/>
+ <location filename="../../src/ui/KeyUploadDialog.cpp" line="110"/>
<source>Key Not Found</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyUploadDialog.cpp" line="115"/>
+ <location filename="../../src/ui/KeyUploadDialog.cpp" line="113"/>
<source>Timeout</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyUploadDialog.cpp" line="118"/>
+ <location filename="../../src/ui/KeyUploadDialog.cpp" line="116"/>
<source>Key Server Not Found</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyUploadDialog.cpp" line="121"/>
+ <location filename="../../src/ui/KeyUploadDialog.cpp" line="119"/>
<source>Connection Error</source>
<translation type="unfinished"></translation>
</message>
@@ -1998,12 +2092,32 @@
<context>
<name>KeyserverTab</name>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="607"/>
- <source>Default Key Server for import:</source>
+ <location filename="../../src/ui/settings/SettingsKeyServer.cpp" line="32"/>
+ <source>General</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/settings/SettingsKeyServer.cpp" line="53"/>
+ <source>No.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/settings/SettingsKeyServer.cpp" line="53"/>
+ <source>Address</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="624"/>
+ <location filename="../../src/ui/settings/SettingsKeyServer.cpp" line="53"/>
+ <source>Available</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/settings/SettingsKeyServer.cpp" line="57"/>
+ <source>Default Key Server for Import:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/settings/SettingsKeyServer.cpp" line="67"/>
<source>Add</source>
<translation type="unfinished"></translation>
</message>
@@ -2026,247 +2140,344 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="38"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="117"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="286"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="36"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="40"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="44"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="114"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="127"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="131"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="135"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="196"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="212"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="216"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="220"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="294"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="326"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="331"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="335"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="383"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="396"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="400"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="404"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="501"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="513"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="517"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="521"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="583"/>
+ <location filename="../../src/ui/main_window/MainWindowServerSlotFunction.cpp" line="51"/>
+ <location filename="../../src/ui/main_window/MainWindowServerSlotFunction.cpp" line="112"/>
+ <location filename="../../src/ui/main_window/MainWindowServerSlotFunction.cpp" line="126"/>
+ <location filename="../../src/ui/main_window/MainWindowServerSlotFunction.cpp" line="218"/>
+ <location filename="../../src/ui/main_window/MainWindowServerSlotFunction.cpp" line="231"/>
<location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="525"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="702"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="885"/>
- <source>No Key Selected</source>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="541"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="36"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="127"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="212"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="396"/>
+ <source>Select a file before doing it.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="40"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="131"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="216"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="400"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="517"/>
+ <source>No permission to read this file.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="44"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="135"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="220"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="404"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="521"/>
+ <source>No permission to create file.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="49"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="150"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="226"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="409"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="375"/>
+ <source>Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="50"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="151"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="227"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="410"/>
+ <source>The target file already exists, do you need to overwrite it?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="62"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="239"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="422"/>
<location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="45"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="124"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="532"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="709"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="126"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="298"/>
+ <source>No Key Selected</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="69"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="246"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="52"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="133"/>
<source>Invalid Operation</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="46"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="533"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="710"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="70"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="247"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="53"/>
<source>The selected key contains a key that does not actually have a encrypt usage.&lt;br/&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="47"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="126"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="300"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="534"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="711"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="899"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="71"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="248"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="436"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="54"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="135"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="312"/>
<source>&lt;br/&gt;For example the Following Key: &lt;br/&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="65"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="554"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="91"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="72"/>
<source>Encrypting</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="94"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="368"/>
- <source>Function Disabled</source>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="114"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="196"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="294"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="383"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="501"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="583"/>
+ <source>An error occurred during operation.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="95"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="369"/>
- <source>Please go to the settings interface to enable and configure this function.</source>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="268"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="151"/>
+ <source>Signing</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="125"/>
- <source>The selected key contains a key that does not actually have a signature usage.&lt;br/&gt;</source>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="327"/>
+ <source>Please select the appropriate target file or signature file. Ensure that both are in this directory.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="142"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="731"/>
- <source>Signing</source>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="331"/>
+ <source>No permission to read target file.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="186"/>
- <source>Decrypting</source>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="335"/>
+ <source>No permission to read signature file.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="246"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="816"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="353"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="259"/>
<source>Verifying</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="298"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="897"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="434"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="310"/>
<source>Invalid KeyPair</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="299"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="898"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="435"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="311"/>
<source>The selected keypair cannot be used for signing and encryption at the same time.&lt;br/&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="310"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="317"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="909"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="916"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="446"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="453"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="322"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="329"/>
<source>Incomplete Operation</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="311"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="910"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="447"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="323"/>
<source>None of the selected key pairs can provide the encryption function.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="318"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="917"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="454"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="330"/>
<source>None of the selected key pairs can provide the signature function.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="335"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="936"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="473"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="365"/>
<source>Encrypting and Signing</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="401"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="1014"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="513"/>
+ <source>Select a file(.gpg/.asc) before doing it.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="551"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="461"/>
<source>Decrypting and Verifying</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="499"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="503"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="507"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="577"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="590"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="594"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="598"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="659"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="675"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="679"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="683"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="757"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="789"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="794"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="798"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="846"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="859"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="863"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="867"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="964"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="976"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="980"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="984"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="1046"/>
- <source>Error</source>
+ <location filename="../../src/ui/main_window/MainWindowServerSlotFunction.cpp" line="43"/>
+ <location filename="../../src/ui/main_window/MainWindowServerSlotFunction.cpp" line="155"/>
+ <source>Invalid Own Key</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="499"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="590"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="675"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="859"/>
- <source>Select a file before doing it.</source>
+ <location filename="../../src/ui/main_window/MainWindowServerSlotFunction.cpp" line="43"/>
+ <location filename="../../src/ui/main_window/MainWindowServerSlotFunction.cpp" line="155"/>
+ <source>Own Key can not be use to do any operation.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="503"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="594"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="679"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="863"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="980"/>
- <source>No permission to read this file.</source>
+ <location filename="../../src/ui/main_window/MainWindowServerSlotFunction.cpp" line="52"/>
+ <source>Please obtain a Service Token from the server in the settings.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="507"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="598"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="683"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="867"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="984"/>
- <source>No permission to create file.</source>
+ <location filename="../../src/ui/main_window/MainWindowServerSlotFunction.cpp" line="91"/>
+ <source>Getting Cpt From Server</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="512"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="613"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="689"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="872"/>
- <source>Warning</source>
+ <location filename="../../src/ui/main_window/MainWindowServerSlotFunction.cpp" line="113"/>
+ <location filename="../../src/ui/main_window/MainWindowServerSlotFunction.cpp" line="219"/>
+ <source>The communication content with the server does not meet the requirements</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="513"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="614"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="690"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="873"/>
- <source>The target file already exists, do you need to overwrite it?</source>
+ <location filename="../../src/ui/main_window/MainWindowServerSlotFunction.cpp" line="126"/>
+ <source>Invalid short ciphertext</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="577"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="659"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="757"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="846"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="964"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="1046"/>
- <source>An error occurred during operation.</source>
+ <location filename="../../src/ui/main_window/MainWindowServerSlotFunction.cpp" line="144"/>
+ <source>Invalid Service Token</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="790"/>
- <source>Please select the appropriate target file or signature file. Ensure that both are in this directory.</source>
+ <location filename="../../src/ui/main_window/MainWindowServerSlotFunction.cpp" line="145"/>
+ <source>Please go to the setting interface to get a ServiceToken.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="794"/>
- <source>No permission to read target file.</source>
+ <location filename="../../src/ui/main_window/MainWindowServerSlotFunction.cpp" line="203"/>
+ <source>Getting Scpt From Server</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="798"/>
- <source>No permission to read signature file.</source>
+ <location filename="../../src/ui/main_window/MainWindowServerSlotFunction.cpp" line="228"/>
+ <source>Notice: Use Decrypt &amp; Verify operation to decrypt this short crypto text.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="976"/>
- <source>Select a file(.gpg/.asc) before doing it.</source>
+ <location filename="../../src/ui/main_window/MainWindowServerSlotFunction.cpp" line="231"/>
+ <source>There is a problem with the communication with the server</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="103"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="408"/>
+ <source>Function Disabled</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="104"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="409"/>
+ <source>Please go to the settings interface to enable and configure this function.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="134"/>
+ <source>The selected key contains a key that does not actually have a signature usage.&lt;br/&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="186"/>
+ <source>Notice</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="186"/>
+ <source>Short Crypto Text only supports Decrypt &amp; Verify.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="1082"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="200"/>
+ <source>Decrypting</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="376"/>
+ <source>Automatic public key exchange failed.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="415"/>
+ <source>Service Token Empty</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="416"/>
+ <source>Please go to the settings interface to set Own Key and get Service Token.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="525"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="541"/>
+ <source>Key Not Found.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="572"/>
<source>Outdated Version</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="1083"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="573"/>
<source>This version(%1) is out of date, please update the latest version in time. </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="1085"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="1092"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="575"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="582"/>
<source>You can download the latest version(%1) on Github Releases Page.&lt;br/&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="1089"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="579"/>
<source>Unreleased Version</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="1090"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="580"/>
<source>This version(%1) has not been officially released and is not recommended for use in a production environment. &lt;br/&gt;</source>
<translation type="unfinished"></translation>
</message>
@@ -2792,109 +3003,147 @@
</message>
</context>
<context>
+ <name>PubkeyGetter</name>
+ <message>
+ <location filename="../../src/server/api/PubkeyGetter.cpp" line="66"/>
+ <location filename="../../src/server/api/PubkeyGetter.cpp" line="90"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/server/api/PubkeyGetter.cpp" line="67"/>
+ <location filename="../../src/server/api/PubkeyGetter.cpp" line="91"/>
+ <source>The communication content with the server does not meet the requirements</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PubkeyUploader</name>
+ <message>
+ <location filename="../../src/server/api/PubkeyUploader.cpp" line="95"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/server/api/PubkeyUploader.cpp" line="96"/>
+ <source>The communication content with the server does not meet the requirements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/server/api/PubkeyUploader.cpp" line="103"/>
+ <source>Warning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/server/api/PubkeyUploader.cpp" line="104"/>
+ <source>Partial failure of automatic pubkey exchange</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>QApplication</name>
<message>
- <location filename="../../src/gpg/result_analyse/DecryptResultAnalyse.cpp" line="42"/>
- <source>&gt;Recipient: </source>
+ <location filename="../../src/gpg/result_analyse/DecryptResultAnalyse.cpp" line="66"/>
+ <source> {&gt;} Recipient: </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="35"/>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="61"/>
<source>One or More Bad Signatures.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="40"/>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="66"/>
<source>A </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="42"/>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="68"/>
<source>Good </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="45"/>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="71"/>
<source>Bad </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="48"/>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="74"/>
<source>Expired </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="51"/>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="77"/>
<source>Missing Key&apos;s </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="54"/>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="80"/>
<source>Revoked Key&apos;s </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="57"/>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="83"/>
<source>Expired Key&apos;s </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="60"/>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="86"/>
<source>Missing CRL&apos;s </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="64"/>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="90"/>
<source>Signature Fully Valid.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="66"/>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="92"/>
<source>Signature NOT Fully Valid.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="74"/>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="100"/>
<source>Key is NOT present with ID 0x</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="81"/>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="107"/>
<source>A signature could NOT be verified due to a Missing Key
</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="85"/>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="111"/>
<source>A signature is valid but the key used to verify the signature has been revoked
</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="93"/>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="119"/>
<source>A signature is valid but expired
</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="100"/>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="126"/>
<source>A signature is valid but the key used to verify the signature has expired.
</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="107"/>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="133"/>
<source>There was some other error which prevented the signature verification.
</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="113"/>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="139"/>
<source>Error for key with fingerprint </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="128"/>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="152"/>
<source>Signed By: </source>
<translation type="unfinished"></translation>
</message>
@@ -2994,63 +3243,83 @@
<context>
<name>SendMailTab</name>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="289"/>
+ <location filename="../../src/ui/settings/SettingsSendMail.cpp" line="33"/>
<source>Enable</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="311"/>
+ <location filename="../../src/ui/settings/SettingsSendMail.cpp" line="51"/>
+ <source>Check Connection</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/settings/SettingsSendMail.cpp" line="53"/>
+ <source>General</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/settings/SettingsSendMail.cpp" line="54"/>
+ <source>Connection</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/settings/SettingsSendMail.cpp" line="55"/>
+ <source>Preference</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/settings/SettingsSendMail.cpp" line="61"/>
<source>SMTP Address</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="313"/>
+ <location filename="../../src/ui/settings/SettingsSendMail.cpp" line="63"/>
<source>Username</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="315"/>
+ <location filename="../../src/ui/settings/SettingsSendMail.cpp" line="65"/>
<source>Password</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="317"/>
+ <location filename="../../src/ui/settings/SettingsSendMail.cpp" line="67"/>
<source>Port</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="319"/>
+ <location filename="../../src/ui/settings/SettingsSendMail.cpp" line="69"/>
<source>Connection Security</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="322"/>
+ <location filename="../../src/ui/settings/SettingsSendMail.cpp" line="75"/>
<source>Default Sender</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="404"/>
- <location filename="../../src/ui/SettingsDialog.cpp" line="408"/>
+ <location filename="../../src/ui/settings/SettingsSendMail.cpp" line="161"/>
+ <location filename="../../src/ui/settings/SettingsSendMail.cpp" line="165"/>
<source>Fail</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="404"/>
+ <location filename="../../src/ui/settings/SettingsSendMail.cpp" line="161"/>
<source>Fail to Connect SMTP Server</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="408"/>
+ <location filename="../../src/ui/settings/SettingsSendMail.cpp" line="165"/>
<source>Fail to Login</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="413"/>
+ <location filename="../../src/ui/settings/SettingsSendMail.cpp" line="170"/>
<source>Success</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="413"/>
+ <location filename="../../src/ui/settings/SettingsSendMail.cpp" line="170"/>
<source>Succeed in connecting and login</source>
<translation type="unfinished"></translation>
</message>
@@ -3058,131 +3327,210 @@
<context>
<name>SettingsDialog</name>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="40"/>
+ <location filename="../../src/ui/settings/SettingsDialog.cpp" line="39"/>
<source>General</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="41"/>
+ <location filename="../../src/ui/settings/SettingsDialog.cpp" line="40"/>
<source>Appearance</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="42"/>
+ <location filename="../../src/ui/settings/SettingsDialog.cpp" line="41"/>
<source>Send Mail</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="43"/>
+ <location filename="../../src/ui/settings/SettingsDialog.cpp" line="42"/>
<source>Key Server</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="45"/>
+ <location filename="../../src/ui/settings/SettingsDialog.cpp" line="44"/>
<source>Advanced</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="58"/>
+ <location filename="../../src/ui/settings/SettingsDialog.cpp" line="59"/>
<source>Settings</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="103"/>
+ <location filename="../../src/ui/settings/SettingsDialog.cpp" line="105"/>
<source>System Default</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
+ <name>SignResultAnalyse</name>
+ <message>
+ <location filename="../../src/gpg/result_analyse/SignResultAnalyse.cpp" line="29"/>
+ <source>[#] Sign Operation </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/SignResultAnalyse.cpp" line="32"/>
+ <source>[Success]</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/SignResultAnalyse.cpp" line="34"/>
+ <source>[Failed] </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/SignResultAnalyse.cpp" line="43"/>
+ <source>[&gt;] New Signature: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/SignResultAnalyse.cpp" line="47"/>
+ <source> Sign Mode: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/SignResultAnalyse.cpp" line="49"/>
+ <source>Normal</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/SignResultAnalyse.cpp" line="51"/>
+ <source>Clear</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/SignResultAnalyse.cpp" line="53"/>
+ <source>Detach</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/SignResultAnalyse.cpp" line="59"/>
+ <location filename="../../src/gpg/result_analyse/SignResultAnalyse.cpp" line="61"/>
+ <source> Signer: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/SignResultAnalyse.cpp" line="61"/>
+ <source>&lt;unknown&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/SignResultAnalyse.cpp" line="63"/>
+ <source> Public Key Algo: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/SignResultAnalyse.cpp" line="64"/>
+ <source> Hash Algo: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/SignResultAnalyse.cpp" line="65"/>
+ <source> Date &amp; Time: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/SignResultAnalyse.cpp" line="75"/>
+ <source>Invalid Signers: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/SignResultAnalyse.cpp" line="79"/>
+ <source>[&gt;] Signer: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/SignResultAnalyse.cpp" line="80"/>
+ <source> Fingerprint: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/SignResultAnalyse.cpp" line="81"/>
+ <source> Reason: </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>SignersPicker</name>
+ <message>
+ <location filename="../../src/ui/widgets/SignersPicker.cpp" line="28"/>
+ <source>Confirm</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>SubkeyGenerateDialog</name>
<message>
- <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="46"/>
+ <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="47"/>
<source>Generate New Subkey</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="61"/>
+ <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="62"/>
<source>Encryption</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="64"/>
+ <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="65"/>
<source>Signing</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="67"/>
+ <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="68"/>
<source>Certification</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="70"/>
+ <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="71"/>
<source>Authentication</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="114"/>
+ <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="115"/>
<source>Expiration Date:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="115"/>
+ <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="116"/>
<source>Never Expire</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="116"/>
+ <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="117"/>
<source>KeySize (in Bit):</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="117"/>
+ <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="118"/>
<source>Key Type:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="126"/>
+ <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="127"/>
<source>Basic Information</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="214"/>
+ <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="215"/>
<source> Expiration time no more than 2 years. </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="235"/>
- <source>Generating Subkey...</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="238"/>
- <source>Collecting random data for subkey generation.
- This may take a while.
- To speed up the process use your computer
- (e.g. browse the net, listen to music,...)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="309"/>
+ <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="244"/>
<source>Success</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="309"/>
+ <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="244"/>
<source>The new subkey has been generated.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="311"/>
+ <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="247"/>
<source>Failure</source>
<translation type="unfinished"></translation>
</message>
- <message>
- <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="311"/>
- <source>An error occurred during subkey generation.</source>
- <translation type="unfinished"></translation>
- </message>
</context>
<context>
<name>TextEdit</name>
@@ -3248,35 +3596,48 @@
</message>
</context>
<context>
+ <name>UnknownSignersChecker</name>
+ <message>
+ <location filename="../../src/advance/UnknownSignersChecker.cpp" line="69"/>
+ <source>Warning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/advance/UnknownSignersChecker.cpp" line="70"/>
+ <source>Automatic public key exchange failed.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>UpdateTab</name>
<message>
- <location filename="../../src/ui/help/AboutDialog.cpp" line="127"/>
+ <location filename="../../src/ui/help/AboutDialog.cpp" line="129"/>
<source>It is recommended that you always check the version of GpgFrontend and upgrade to the latest version.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/help/AboutDialog.cpp" line="129"/>
+ <location filename="../../src/ui/help/AboutDialog.cpp" line="131"/>
<source>New versions not only represent new features, but also often represent functional and security fixes.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/help/AboutDialog.cpp" line="133"/>
+ <location filename="../../src/ui/help/AboutDialog.cpp" line="135"/>
<source>Current Version: </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/help/AboutDialog.cpp" line="141"/>
+ <location filename="../../src/ui/help/AboutDialog.cpp" line="143"/>
<source>The current version is inconsistent with the latest version on github.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/help/AboutDialog.cpp" line="143"/>
+ <location filename="../../src/ui/help/AboutDialog.cpp" line="145"/>
<source>Please click &lt;a href=&quot;https://github.com/saturneric/GpgFrontend/releases&quot;&gt;here&lt;/a&gt; to download the latest version.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/help/AboutDialog.cpp" line="187"/>
- <location filename="../../src/ui/help/AboutDialog.cpp" line="209"/>
+ <location filename="../../src/ui/help/AboutDialog.cpp" line="199"/>
+ <location filename="../../src/ui/help/AboutDialog.cpp" line="214"/>
<source>Latest Version From Github: </source>
<translation type="unfinished"></translation>
</message>
@@ -3454,36 +3815,33 @@
</message>
</context>
<context>
- <name>Wizard</name>
+ <name>VerifyResultAnalyse</name>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="46"/>
- <source>First Start Wizard</source>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="31"/>
+ <source>[#] Verify Operation </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="76"/>
- <source>Import Error</source>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="34"/>
+ <source>[Success]</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="76"/>
- <source>Couldn&apos;t locate any keyring file in %1</source>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="36"/>
+ <source>[Failed] </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="84"/>
- <location filename="../../src/ui/Wizard.cpp" line="95"/>
- <source>Import error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../src/ui/Wizard.cpp" line="85"/>
- <source>Couldn&apos;t open private keyringfile: %1</source>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="158"/>
+ <source>&lt;Unknown&gt;</source>
<translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>Wizard</name>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="96"/>
- <source>Couldn&apos;t open public keyringfile: %1</source>
+ <location filename="../../src/ui/Wizard.cpp" line="40"/>
+ <source>First Start Wizard</source>
<translation type="unfinished"></translation>
</message>
</context>
diff --git a/resource/ts/gpgfrontend_es.ts b/resource/ts/gpgfrontend_es.ts
index a3f8dd53..866ccad0 100644
--- a/resource/ts/gpgfrontend_es.ts
+++ b/resource/ts/gpgfrontend_es.ts
@@ -1,198 +1,311 @@
-<?xml version="1.0" ?><!DOCTYPE TS><TS version="2.1" language="es_ES">
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="es_ES">
<context>
<name>AboutDialog</name>
<message>
<location filename="../../src/ui/help/AboutDialog.cpp" line="35"/>
<source>About </source>
- <translation type="finished">Acerca de</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/help/AboutDialog.cpp" line="42"/>
<source>General</source>
- <translation type="finished">General</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/help/AboutDialog.cpp" line="43"/>
<source>Translators</source>
- <translation type="unfinished"/>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/help/AboutDialog.cpp" line="44"/>
<source>Update</source>
- <translation type="finished">Actualizar</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
<name>AdvancedTab</name>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="679"/>
- <source>Show Steganography Options [Advanced]</source>
- <translation type="finished">Mostrar opciones de steganography [Avanzado]</translation>
+ <location filename="../../src/ui/settings/SettingsAdvanced.cpp" line="34"/>
+ <source>Show Steganography Options</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="681"/>
+ <location filename="../../src/ui/settings/SettingsAdvanced.cpp" line="36"/>
<source>Show Steganographic Options.</source>
- <translation type="finished">Mostrar opciones de STANGANOGRÁFICA.</translation>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/settings/SettingsAdvanced.cpp" line="40"/>
+ <source>Pubkey Exchange</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/settings/SettingsAdvanced.cpp" line="42"/>
+ <source>Auto Pubkey Exchange</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
<name>AppearanceTab</name>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="444"/>
+ <location filename="../../src/ui/settings/SettingsAppearance.cpp" line="34"/>
<source>Iconsize</source>
- <translation type="finished">Tamaño de ícono.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="446"/>
+ <location filename="../../src/ui/settings/SettingsAppearance.cpp" line="36"/>
<source>small</source>
- <translation type="unfinished"/>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="447"/>
+ <location filename="../../src/ui/settings/SettingsAppearance.cpp" line="37"/>
<source>medium</source>
- <translation type="finished">medio</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="448"/>
+ <location filename="../../src/ui/settings/SettingsAppearance.cpp" line="38"/>
<source>large</source>
- <translation type="finished">grande</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="464"/>
+ <location filename="../../src/ui/settings/SettingsAppearance.cpp" line="54"/>
<source>Iconstyle</source>
- <translation type="finished">IconStyle</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="466"/>
+ <location filename="../../src/ui/settings/SettingsAppearance.cpp" line="56"/>
<source>just text</source>
- <translation type="finished">Solo texto</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="467"/>
+ <location filename="../../src/ui/settings/SettingsAppearance.cpp" line="57"/>
<source>just icons</source>
- <translation type="finished">solo iconos</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="468"/>
+ <location filename="../../src/ui/settings/SettingsAppearance.cpp" line="58"/>
<source>text and icons</source>
- <translation type="finished">Texto e Iconos</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="484"/>
+ <location filename="../../src/ui/settings/SettingsAppearance.cpp" line="74"/>
<source>Windowstate</source>
- <translation type="finished">Estado de ventanas</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="487"/>
+ <location filename="../../src/ui/settings/SettingsAppearance.cpp" line="77"/>
<source>Save window size and position on exit.</source>
- <translation type="finished">Guardar el tamaño de la ventana y la posición en la salida.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="495"/>
+ <location filename="../../src/ui/settings/SettingsAppearance.cpp" line="85"/>
<source>Information Board</source>
- <translation type="finished">Tarjeta de la información</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="501"/>
+ <location filename="../../src/ui/settings/SettingsAppearance.cpp" line="91"/>
<source> Front Size</source>
- <translation type="finished">Tamaño delantero</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ChoosePage</name>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="165"/>
+ <location filename="../../src/ui/Wizard.cpp" line="121"/>
<source>Choose your action...</source>
- <translation type="finished">Elige tu acción ...</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="166"/>
+ <location filename="../../src/ui/Wizard.cpp" line="122"/>
<source>...by clicking on the appropriate link.</source>
- <translation type="finished">... haciendo clic en el enlace apropiado.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="168"/>
- <source>If you have never used GPGFrontend before and also don't own a gpg key yet you may possibly want to read how to</source>
- <translation type="finished">Si nunca ha usado GPGFRontend antes y tampoco tiene una clave GPG, pero posiblemente quiera leer cómo leer</translation>
+ <location filename="../../src/ui/Wizard.cpp" line="124"/>
+ <source>If you have never used GPGFrontend before and also don&apos;t own a gpg key yet you may possibly want to read how to</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="170"/>
+ <location filename="../../src/ui/Wizard.cpp" line="127"/>
<source>Generate Key</source>
- <translation type="finished">Generar clave</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="176"/>
+ <location filename="../../src/ui/Wizard.cpp" line="134"/>
<source>If you want to learn how to encrypt, decrypt, sign and verify text, you can read </source>
- <translation type="finished">Si desea aprender cómo cifrar, descifrar, firmar y verificar el texto, puede leer</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="178"/>
+ <location filename="../../src/ui/Wizard.cpp" line="136"/>
<source>Encrypt &amp; Decrypt Text</source>
- <translation type="finished">Cifrar y descifrar texto</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="178"/>
- <location filename="../../src/ui/Wizard.cpp" line="190"/>
+ <location filename="../../src/ui/Wizard.cpp" line="136"/>
+ <location filename="../../src/ui/Wizard.cpp" line="149"/>
<source>or</source>
- <translation type="finished">o</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="180"/>
+ <location filename="../../src/ui/Wizard.cpp" line="138"/>
<source>Sign &amp; Verify Text</source>
- <translation type="finished">Firmar y verificar el texto</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="188"/>
+ <location filename="../../src/ui/Wizard.cpp" line="146"/>
<source>If you want to operate file, you can read </source>
- <translation type="finished">Si desea operar el archivo, puede leer</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="190"/>
+ <location filename="../../src/ui/Wizard.cpp" line="149"/>
<source>Encrypt &amp; Sign File</source>
- <translation type="finished">Cifrar y firmar archivo</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="192"/>
+ <location filename="../../src/ui/Wizard.cpp" line="152"/>
<source>Sign &amp; Verify File</source>
- <translation type="finished">Firmar y verificar el archivo</translation>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ComUtils</name>
+ <message>
+ <location filename="../../src/server/ComUtils.cpp" line="35"/>
+ <location filename="../../src/server/ComUtils.cpp" line="55"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/server/ComUtils.cpp" line="35"/>
+ <source>Nothing Reply. Please check the Internet connection.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/server/ComUtils.cpp" line="55"/>
+ <source>Unknown Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/server/ComUtils.cpp" line="75"/>
+ <location filename="../../src/server/ComUtils.cpp" line="90"/>
+ <source>Network Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/server/ComUtils.cpp" line="75"/>
+ <source>Outdated Reply</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/server/ComUtils.cpp" line="87"/>
+ <source>Unknown Reason</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/server/ComUtils.cpp" line="90"/>
+ <source>Unknown Reply Format</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ConclusionPage</name>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="407"/>
+ <location filename="../../src/ui/Wizard.cpp" line="224"/>
<source>Ready.</source>
- <translation type="finished">Listo.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="408"/>
+ <location filename="../../src/ui/Wizard.cpp" line="225"/>
<source>Have fun with GPGFrontend!</source>
- <translation type="finished">¡Diviértete con GPGFRontend!</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="410"/>
+ <location filename="../../src/ui/Wizard.cpp" line="227"/>
<source>You are ready to use GPGFrontend now.&lt;br&gt;&lt;br&gt;</source>
- <translation type="finished">Estás listo para usar GPGFRontend ahora. &lt;br&gt; &lt;br&gt;</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="412"/>
+ <location filename="../../src/ui/Wizard.cpp" line="229"/>
<source>The Online Document</source>
- <translation type="finished">El documento en línea</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="413"/>
+ <location filename="../../src/ui/Wizard.cpp" line="231"/>
<source> will get you started with GPGFrontend. It will open in the main window.&lt;br&gt;</source>
- <translation type="finished">Te harás comenzar con GPGFRontend.Se abrirá en la ventana principal. &lt;br&gt;</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="420"/>
+ <location filename="../../src/ui/Wizard.cpp" line="238"/>
<source>Open offline help.</source>
- <translation type="finished">Ayuda fuera de línea abierta.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="423"/>
+ <location filename="../../src/ui/Wizard.cpp" line="241"/>
<source>Dont show the wizard again.</source>
- <translation type="finished">No vuelvas a mostrar al asistente.</translation>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DecryptResultAnalyse</name>
+ <message>
+ <location filename="../../src/gpg/result_analyse/DecryptResultAnalyse.cpp" line="30"/>
+ <source>[#] Decrypt Operation </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/DecryptResultAnalyse.cpp" line="33"/>
+ <source>[Success]</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/DecryptResultAnalyse.cpp" line="35"/>
+ <source>[Failed] </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/DecryptResultAnalyse.cpp" line="39"/>
+ <source>Unsupported Algo: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/DecryptResultAnalyse.cpp" line="46"/>
+ <source>File Name: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/DecryptResultAnalyse.cpp" line="52"/>
+ <source>Recipient(s): </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/DecryptResultAnalyse.cpp" line="82"/>
+ <source> Keu ID: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/DecryptResultAnalyse.cpp" line="83"/>
+ <source> Public Algo: </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>EncryptResultAnalyse</name>
+ <message>
+ <location filename="../../src/gpg/result_analyse/EncryptResultAnalyse.cpp" line="41"/>
+ <source>Invalid Recipients: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/EncryptResultAnalyse.cpp" line="44"/>
+ <source>Fingerprint: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/EncryptResultAnalyse.cpp" line="45"/>
+ <source>Reason: </source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -200,99 +313,98 @@
<message>
<location filename="../../src/ui/FileEncryptionDialog.cpp" line="32"/>
<source>Decrypt File</source>
- <translation type="finished">Archivo de descifrado</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/FileEncryptionDialog.cpp" line="34"/>
<source>Encrypt File</source>
- <translation type="finished">Cifrar archivo</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/FileEncryptionDialog.cpp" line="36"/>
<source>Sign File</source>
- <translation type="finished">Archivo de firma</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/FileEncryptionDialog.cpp" line="38"/>
<source>Verify File</source>
- <translation type="finished">Verificar archivo</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/FileEncryptionDialog.cpp" line="47"/>
<source>Input Parameters</source>
- <translation type="finished">Parámetros de entrada</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/FileEncryptionDialog.cpp" line="53"/>
<source>Target File</source>
- <translation type="finished">Archivo de destino</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/FileEncryptionDialog.cpp" line="59"/>
<source>Output File</source>
- <translation type="finished">Archivo de salida</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/FileEncryptionDialog.cpp" line="75"/>
<source>Signature File(.sig) Path</source>
- <translation type="finished">Ruta del archivo de firma (.sig)</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/FileEncryptionDialog.cpp" line="134"/>
<location filename="../../src/ui/FileEncryptionDialog.cpp" line="177"/>
<source>Open File</source>
- <translation type="finished">Abrir documento</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/FileEncryptionDialog.cpp" line="165"/>
<source>Save File</source>
- <translation type="finished">Guardar el archivo</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/FileEncryptionDialog.cpp" line="194"/>
<location filename="../../src/ui/FileEncryptionDialog.cpp" line="245"/>
- <source>Couldn't open file</source>
- <translation type="finished">No se pudo abrir el archivo</translation>
+ <source>Couldn&apos;t open file</source>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/FileEncryptionDialog.cpp" line="213"/>
<location filename="../../src/ui/FileEncryptionDialog.cpp" line="224"/>
<location filename="../../src/ui/FileEncryptionDialog.cpp" line="235"/>
<source>Error</source>
- <translation type="finished">Error</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/FileEncryptionDialog.cpp" line="214"/>
<source>Error Occurred During Encryption</source>
- <translation type="finished">Se produjo un error durante el cifrado</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/FileEncryptionDialog.cpp" line="225"/>
<source>Error Occurred During Decryption</source>
- <translation type="finished">Se produjo un error durante la descifrado.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/FileEncryptionDialog.cpp" line="236"/>
<source>Error Occurred During Signature</source>
- <translation type="finished">Se produjo un error durante la firma</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/FileEncryptionDialog.cpp" line="259"/>
<location filename="../../src/ui/FileEncryptionDialog.cpp" line="268"/>
<source>File</source>
- <translation type="finished">Archivo</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/FileEncryptionDialog.cpp" line="260"/>
<source>File exists! Do you want to overwrite it?</source>
- <translation type="finished">¡El archivo existe! ¿Quieres sobreescribirlo?</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/FileEncryptionDialog.cpp" line="269"/>
<source>Cannot write file %1:
%2.</source>
- <translation type="finished">No se puede escribir archivo% 1:
-% 2.</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -300,52 +412,52 @@
<message>
<location filename="../../src/ui/widgets/FilePage.cpp" line="161"/>
<source>Open</source>
- <translation type="finished">Abierto</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/FilePage.cpp" line="163"/>
<source>Delete</source>
- <translation type="finished">Borrar</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/FilePage.cpp" line="165"/>
<source>Encrypt and Sign</source>
- <translation type="finished">Cifrar y firmar</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/FilePage.cpp" line="167"/>
<source>Decrypt and Verify</source>
- <translation type="finished">Descifrar y verificar</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/FilePage.cpp" line="169"/>
<source>Only Sign</source>
- <translation type="finished">Solo signo</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/FilePage.cpp" line="171"/>
<source>Only Verify</source>
- <translation type="finished">Solo verificar</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/FilePage.cpp" line="222"/>
<source>Warning</source>
- <translation type="finished">Advertencia</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/FilePage.cpp" line="223"/>
<source>Are you sure you want to delete it?</source>
- <translation type="finished">¿Estás seguro de que quieres borrarlo?</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/FilePage.cpp" line="233"/>
<source>Error</source>
- <translation type="finished">Error</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/FilePage.cpp" line="234"/>
<source>Unable to delete the file or folder.</source>
- <translation type="finished">No se puede eliminar el archivo o la carpeta.</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -353,202 +465,179 @@
<message>
<location filename="../../src/ui/FindWidget.cpp" line="38"/>
<source>Find:</source>
- <translation type="finished">Encontrar:</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
<name>GeneralTab</name>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="137"/>
- <source>Remember Password</source>
- <translation type="finished">Recordar contraseña</translation>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="40"/>
+ <source>GpgFrontend Server</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="140"/>
- <source>Remember password until closing gpg4usb</source>
- <translation type="finished">Recuerde la contraseña hasta que cierre GPG4USB</translation>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="45"/>
+ <source>Server that provides short key and key exchange services</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="147"/>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="52"/>
<source>Save Checked Keys</source>
- <translation type="finished">Guardar las llaves revisadas</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="150"/>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="55"/>
<source>Save checked private keys on exit and restore them on next start.</source>
- <translation type="finished">Guarda las llaves privadas revisadas en la salida y restaurándolas en el próximo inicio.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="159"/>
- <source>Confirm drag'n'drop key import</source>
- <translation type="finished">Confirmar la tecla Drag'n'n'Drop Import</translation>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="64"/>
+ <source>Confirm drag&apos;n&apos;drop key import</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="162"/>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="67"/>
<source>Import files dropped on the keylist without confirmation.</source>
- <translation type="finished">Importar archivos cayeron en el keylist sin confirmación.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="169"/>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="74"/>
<source>Language</source>
- <translation type="finished">Idioma</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="178"/>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="83"/>
<source>&lt;b&gt;NOTE: &lt;/b&gt; GpgFrontend will restart automatically if you change the language!</source>
- <translation type="finished">&lt;B&gt; Nota: &lt;/ b&gt; GPGFRontend se reiniciará automáticamente si cambia el idioma!</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="187"/>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="92"/>
<source>Own key</source>
- <translation type="finished">Clave</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="195"/>
- <source>&lt;none&gt;</source>
- <translation type="finished">&lt;ninguno&gt;</translation>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="96"/>
+ <source>Get Service Token</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="209"/>
- <source>Key pair for synchronization and identity authentication</source>
- <translation type="finished">Pareja de llaves para la autenticación de sincronización e identidad</translation>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="97"/>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="234"/>
+ <source>No Service Token Found</source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>GpgME::GpgContext</name>
<message>
- <location filename="../../src/gpg/GpgContext.cpp" line="528"/>
- <source>Wrong password</source>
- <translation type="finished">Contraseña incorrecta</translation>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="103"/>
+ <source>&lt;none&gt;</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/GpgContext.cpp" line="536"/>
- <source>Enter Password for</source>
- <translation type="finished">Ingrese la contraseña para</translation>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="120"/>
+ <source>Key pair for synchronization and identity authentication</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/GpgContext.cpp" line="540"/>
- <source>Enter Password</source>
- <translation type="finished">Introducir la contraseña</translation>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="252"/>
+ <source>Invalid Operation</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/GpgContext.cpp" line="706"/>
- <source>Key Selection</source>
- <translation type="finished">Selección de claves</translation>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="253"/>
+ <source>Own Key can not be None while getting service token.</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/GpgContext.cpp" line="706"/>
- <source>No Private Key Selected</source>
- <translation type="finished">No hay llave privada seleccionada</translation>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="265"/>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="336"/>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="353"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/GpgContext.cpp" line="746"/>
- <source>Error in signing:</source>
- <translation type="finished">Error en la firma:</translation>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="266"/>
+ <source>Key Not Exists</source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>GpgPathsTab</name>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="711"/>
- <source>Relative path to keydb</source>
- <translation type="finished">Camino relativo a KeyDB</translation>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="337"/>
+ <source>The communication content with the server does not meet the requirements</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="724"/>
- <source>Current keydb path: </source>
- <translation type="finished">Ruta de KeyDB actual:</translation>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="350"/>
+ <source>Notice</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="729"/>
- <source>&lt;b&gt;NOTE: &lt;/b&gt; Gpg4usb will restart automatically if you change the keydb path!</source>
- <translation type="finished">&lt;B&gt; Nota: &lt;/ b&gt; gpg4usb se reiniciará automáticamente si cambia la ruta KeyDB!</translation>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="351"/>
+ <source>Succeed in getting service token</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="758"/>
- <source>Choose keydb directory</source>
- <translation type="finished">Elija el directorio de KeyDB</translation>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="353"/>
+ <source>There is a problem with the communication with the server</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
- <name>ImportFromGnupgPage</name>
- <message>
- <location filename="../../src/ui/Wizard.cpp" line="302"/>
- <source>Import keys...</source>
- <translation type="finished">Importar teclas ...</translation>
- </message>
- <message>
- <location filename="../../src/ui/Wizard.cpp" line="303"/>
- <source>...from existing GnuPG installation</source>
- <translation type="finished">... de la instalación de GNUPG existente</translation>
- </message>
- <message>
- <location filename="../../src/ui/Wizard.cpp" line="305"/>
- <source>You can import keys from a locally installed GnuPG.&lt;br&gt;&lt;br&gt; The location is read from registry in Windows or assumed to be the .gnupg folder in the your home directory in Linux.&lt;br&gt;</source>
- <translation type="finished">Puede importar claves desde un GNUPG instalado localmente. &lt;br&gt; &lt;br&gt; La ubicación se lee desde el registro en Windows o se supone que es la carpeta .GNUPG en el directorio de su casa en Linux. &lt;br&gt;</translation>
- </message>
+ <name>GpgME::GpgContext</name>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="309"/>
- <source>Import keys from GnuPG</source>
- <translation type="finished">Importar claves de gnupg</translation>
+ <location filename="../../src/gpg/gpg_context/GpgContext.cpp" line="184"/>
+ <source>Wrong password</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="323"/>
- <source>Import Error</source>
- <translation type="finished">Error de importación</translation>
+ <location filename="../../src/gpg/gpg_context/GpgContext.cpp" line="192"/>
+ <source>Enter Password for</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="323"/>
- <source>Couldn't locate GnuPG home directory</source>
- <translation type="finished">No se pudo localizar el directorio de inicio de gnupg</translation>
- </message>
-</context>
-<context>
- <name>ImportFromGpg4usbPage</name>
- <message>
- <location filename="../../src/ui/Wizard.cpp" line="225"/>
- <source>Import from...</source>
- <translation type="finished">Importar de...</translation>
+ <location filename="../../src/gpg/gpg_context/GpgContext.cpp" line="196"/>
+ <source>Enter Password</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="226"/>
- <source>...existing GPGFrontend</source>
- <translation type="finished">... gpgfrontend existente</translation>
+ <location filename="../../src/gpg/gpg_context/GpgContext.cpp" line="258"/>
+ <source>Processing</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="228"/>
- <source>You can import keys and/or settings from existing GPGFrontend. &lt;br&gt;&lt;br&gt;Just check what you want to import, click the import button and choose the directory of your other GPGFrontend in the appearing file dialog.</source>
- <translation type="finished">Puede importar claves y / o configuraciones desde GPGFrontend existente.&lt;br&gt; &lt;br&gt; Simplemente compruebe lo que desea importar, haga clic en el botón Importar y elija el directorio de su otro GPGFrontend en el cuadro de diálogo de archivo de apariencia.</translation>
+ <location filename="../../src/gpg/gpg_context/GpgContextBasicOpera.cpp" line="164"/>
+ <source>Key Selection</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="235"/>
- <source>Keys</source>
- <translation type="finished">Llaves</translation>
+ <location filename="../../src/gpg/gpg_context/GpgContextBasicOpera.cpp" line="164"/>
+ <source>No Private Key Selected</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="239"/>
- <source>Configuration</source>
- <translation type="finished">Configuración</translation>
+ <location filename="../../src/gpg/gpg_context/GpgContextBasicOpera.cpp" line="195"/>
+ <source>Error in signing:</source>
+ <translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>GpgPathsTab</name>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="241"/>
- <source>Import from GPGFrontend</source>
- <translation type="finished">Importación de GPGFRontend</translation>
+ <location filename="../../src/ui/settings/SettingsDialog.cpp" line="139"/>
+ <source>Relative path to keydb</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="256"/>
- <source>Other GPGFrontend directory</source>
- <translation type="finished">Otro GPGFrontend Directorio</translation>
+ <location filename="../../src/ui/settings/SettingsDialog.cpp" line="152"/>
+ <source>Current keydb path: </source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="275"/>
- <source>Configuration Imported</source>
- <translation type="finished">Configuración importada</translation>
+ <location filename="../../src/ui/settings/SettingsDialog.cpp" line="157"/>
+ <source>&lt;b&gt;NOTE: &lt;/b&gt; Gpg4usb will restart automatically if you change the keydb path!</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="276"/>
- <source>Imported Configuration from old GPGFrontend.&lt;br&gt;Will now restart to activate the configuration.</source>
- <translation type="finished">Configuración importada desde el antiguo GPGFrontend. Se reiniciará ahora para activar la configuración.</translation>
+ <location filename="../../src/ui/settings/SettingsDialog.cpp" line="186"/>
+ <source>Choose keydb directory</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -556,78 +645,78 @@
<message>
<location filename="../../src/ui/widgets/InfoBoardWidget.cpp" line="40"/>
<source>Import missing key from Keyserver</source>
- <translation type="finished">Importar la tecla faltante de Keyserver</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/InfoBoardWidget.cpp" line="57"/>
- <source>Optional Actions Menu</source>
- <translation type="finished">MENÚ DE ACCIONES OPCIONALES</translation>
+ <source>Optional Actions</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
<name>InfoTab</name>
<message>
- <location filename="../../src/ui/help/AboutDialog.cpp" line="74"/>
- <source>&lt;br&gt;&lt;center&gt;GPGFrontend is an easy-to-use, compact, cross-platform, &lt;br&gt;and installation-free gpg front-end tool.&lt;br&gt;It visualizes most of the common operations of gpg commands.&lt;br&gt;It's licensed under the GPL v3&lt;br&gt;&lt;br&gt;&lt;b&gt;Developer:&lt;/b&gt;&lt;br&gt;Saturneric&lt;br&gt;&lt;br&gt;If you have any questions or suggestions, raise an issue&lt;br/&gt;at &lt;a href=&quot;https://github.com/saturneric/GpgFrontend&quot;&gt;GitHub&lt;/a&gt; or send a mail to my mailing list at &lt;a href=&quot;mailto:[email protected]&quot;&gt;[email protected]&lt;/a&gt;.</source>
- <translation type="finished">&lt;br&gt; &lt;Centre&gt; GPGFRontend es una herramienta de front-end de GPG de fácil uso, compacta, compacta, compacta y sin instalación. &lt;br&gt; Se visualiza la mayoría de las operaciones comunes de los comandos GPG. &lt;BR&gt; Está licenciado bajo el GPL V3 &lt;br&gt; &lt;br&gt; &lt;B&gt; Desarrollador: &lt;/ b&gt; &lt;br&gt; Saturnérico &lt;br&gt; &lt;br&gt; Si tiene alguna pregunta o sugerencia, plantee un problema &lt;br/&gt; a &lt;Ahref = &quot;https://github.com/saturnic/gpgfrontend&quot;&gt; github &lt;/a&gt; o envíe un correo a mi lista de correo en &lt;a href=&quot;mailto [email protected]&quot;&gt; [email protected] &lt;/ a&gt;.</translation>
+ <location filename="../../src/ui/help/AboutDialog.cpp" line="76"/>
+ <source>&lt;br&gt;&lt;center&gt;GPGFrontend is an easy-to-use, compact, cross-platform, &lt;br&gt;and installation-free gpg front-end tool.&lt;br&gt;It visualizes most of the common operations of gpg commands.&lt;br&gt;It&apos;s licensed under the GPL v3&lt;br&gt;&lt;br&gt;&lt;b&gt;Developer:&lt;/b&gt;&lt;br&gt;Saturneric&lt;br&gt;&lt;br&gt;If you have any questions or suggestions, raise an issue&lt;br/&gt;at &lt;a href=&quot;https://github.com/saturneric/GpgFrontend&quot;&gt;GitHub&lt;/a&gt; or send a mail to my mailing list at &lt;a href=&quot;mailto:[email protected]&quot;&gt;[email protected]&lt;/a&gt;.</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/help/AboutDialog.cpp" line="82"/>
+ <location filename="../../src/ui/help/AboutDialog.cpp" line="84"/>
<source>&lt;br&gt;&lt;br&gt; Built with Qt </source>
- <translation type="finished">&lt;br&gt; &lt;br&gt; construido con qt</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/help/AboutDialog.cpp" line="83"/>
+ <location filename="../../src/ui/help/AboutDialog.cpp" line="85"/>
<source> and GPGME </source>
- <translation type="finished">y gpgme</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/help/AboutDialog.cpp" line="84"/>
+ <location filename="../../src/ui/help/AboutDialog.cpp" line="86"/>
<source>&lt;br&gt;Built at </source>
- <translation type="finished">&lt;br&gt; construido en</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
<name>IntroPage</name>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="111"/>
+ <location filename="../../src/ui/Wizard.cpp" line="66"/>
<source>Getting Started...</source>
- <translation type="finished">Empezando...</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="112"/>
+ <location filename="../../src/ui/Wizard.cpp" line="67"/>
<source>... with GPGFrontend</source>
- <translation type="finished">... con gpgfrontend</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="114"/>
+ <location filename="../../src/ui/Wizard.cpp" line="69"/>
<source>Welcome to use GPGFrontend for decrypting and signing text or file!</source>
- <translation type="finished">¡Bienvenido a usar GPGFRontend para descifrar y firmar texto o archivo!</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="116"/>
+ <location filename="../../src/ui/Wizard.cpp" line="71"/>
<source>is a Powerful, Easy-to-Use, Compact, Cross-Platform, and Installation-Free OpenPGP Crypto Tool.</source>
- <translation type="finished">Es una herramienta CRYPTO OpenPGP Potente, fácil de usar, compacta, multiplataforma y sin instalación.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="117"/>
+ <location filename="../../src/ui/Wizard.cpp" line="72"/>
<source>For brief information have a look at the</source>
- <translation type="finished">Para obtener información breve, eche un vistazo a la</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="118"/>
+ <location filename="../../src/ui/Wizard.cpp" line="74"/>
<source>Overview</source>
- <translation type="finished">Descripción general</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="119"/>
+ <location filename="../../src/ui/Wizard.cpp" line="75"/>
<source>by clicking the link, the page will open in the web browser</source>
- <translation type="finished">Al hacer clic en el enlace, la página se abrirá en el navegador web.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="127"/>
+ <location filename="../../src/ui/Wizard.cpp" line="83"/>
<source>Choose a Language</source>
- <translation type="finished">Elegir un idioma</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -635,182 +724,161 @@
<message>
<location filename="../../src/ui/keypair_details/KeyDetailsDialog.cpp" line="31"/>
<source>KeyPair</source>
- <translation type="finished">Par de claves</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyDetailsDialog.cpp" line="32"/>
<source>UIDs</source>
- <translation type="finished">Uids</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyDetailsDialog.cpp" line="33"/>
<source>Subkeys</source>
- <translation type="finished">Subcecheras</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyDetailsDialog.cpp" line="40"/>
<source>Key Details</source>
- <translation type="finished">Detalles clave</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
<name>KeyGenDialog</name>
<message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="32"/>
+ <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="33"/>
<source>Generate Key</source>
- <translation type="finished">Generar clave</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="68"/>
+ <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="69"/>
<source> Name must contain at least five characters.
</source>
- <translation type="finished">El nombre debe contener al menos cinco caracteres.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="70"/>
+ <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="71"/>
<source> Please give a email address.
</source>
- <translation type="finished">Por favor, proporcione una dirección de correo electrónico.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="77"/>
+ <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="78"/>
<source> Expiration time no more than 2 years.
</source>
- <translation type="finished">Tiempo de vencimiento No más de 2 años.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="103"/>
- <source>Generating Key...</source>
- <translation type="finished">Generando llave ...</translation>
+ <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="112"/>
+ <source>Success</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="106"/>
- <source>Collecting random data for key generation.
- This may take a while.
- To speed up the process use your computer
- (e.g. browse the net, listen to music,...)</source>
- <translation type="finished">Recogiendo datos aleatorios para la generación de claves.
- Esto puede tardar un rato.
- Para acelerar el proceso, use su computadora.
- (Por ejemplo, navega por la red, escucha música, ...)</translation>
+ <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="112"/>
+ <source>The new key pair has been generated.</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="150"/>
+ <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="116"/>
+ <source>Failure</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="145"/>
<source>Key Usage</source>
- <translation type="finished">Uso clave</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="152"/>
+ <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="147"/>
<source>Encryption</source>
- <translation type="unfinished"/>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="155"/>
+ <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="150"/>
<source>Signing</source>
- <translation type="finished">Firma</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="158"/>
+ <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="153"/>
<source>Certification</source>
- <translation type="finished">Certificación</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="161"/>
+ <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="156"/>
<source>Authentication</source>
- <translation type="finished">Autenticación</translation>
- </message>
- <message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="312"/>
- <source>Success</source>
- <translation type="finished">Éxito</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="312"/>
- <source>The new key pair has been generated.</source>
- <translation type="finished">Se ha generado el nuevo par de llaves.</translation>
- </message>
- <message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="314"/>
- <source>Failure</source>
- <translation type="finished">Falla</translation>
- </message>
- <message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="314"/>
- <source>An error occurred during key generation.</source>
- <translation type="finished">Se produjo un error durante la generación de claves.</translation>
- </message>
- <message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="350"/>
+ <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="338"/>
<source>Name:</source>
- <translation type="finished">Nombre:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="351"/>
+ <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="339"/>
<source>Email Address:</source>
- <translation type="finished">Dirección de correo electrónico:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="352"/>
+ <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="340"/>
<source>Comment:</source>
- <translation type="finished">Comentario:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="353"/>
+ <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="341"/>
<source>Expiration Date:</source>
- <translation type="finished">Fecha de caducidad:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="354"/>
+ <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="342"/>
<source>Never Expire</source>
- <translation type="finished">Nunca expira</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="355"/>
+ <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="343"/>
<source>KeySize (in Bit):</source>
- <translation type="finished">Keysize (en bit):</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="356"/>
+ <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="344"/>
<source>Key Type:</source>
- <translation type="finished">Tipo de llave:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="357"/>
+ <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="345"/>
<source>Non Pass Phrase</source>
- <translation type="finished">Frase sin paso</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="370"/>
+ <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="358"/>
<source>Basic Information</source>
- <translation type="finished">Información básica</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
<name>KeyGenPage</name>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="366"/>
+ <location filename="../../src/ui/Wizard.cpp" line="183"/>
<source>Create a keypair...</source>
- <translation type="finished">Crea un keypair ...</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="367"/>
+ <location filename="../../src/ui/Wizard.cpp" line="184"/>
<source>...for decrypting and signing messages</source>
- <translation type="finished">... para descifrar y firmar mensajes</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="368"/>
+ <location filename="../../src/ui/Wizard.cpp" line="185"/>
<source>You should create a new keypair.The pair consists of a public and a private key.&lt;br&gt;Other users can use the public key to encrypt messages for you and verify messages signed by you.You can use the private key to decrypt and sign messages.&lt;br&gt;For more information have a look at the offline tutorial (which then is shown in the main window):</source>
- <translation type="finished">Debe crear un nuevo teclado. El par consiste en una clave pública y privada. Otros usuarios pueden usar la clave pública para cifrar mensajes para usted y verificar los mensajes firmados por usted. Puede usar la clave privada para descifrar y firmarMensajes. Para más información, eche un vistazo al tutorial fuera de línea (que luego se muestra en la ventana principal):</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="375"/>
+ <location filename="../../src/ui/Wizard.cpp" line="192"/>
<source>Offline tutorial</source>
- <translation type="finished">Tutorial fuera de línea</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="382"/>
+ <location filename="../../src/ui/Wizard.cpp" line="199"/>
<source>Create New Key</source>
- <translation type="finished">Crear nueva llave</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -819,429 +887,442 @@
<location filename="../../src/ui/KeyImportDetailDialog.cpp" line="34"/>
<location filename="../../src/ui/KeyImportDetailDialog.cpp" line="53"/>
<source>Key Update Details</source>
- <translation type="finished">Detalles de actualización clave</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyImportDetailDialog.cpp" line="34"/>
<source>No keys found</source>
- <translation type="finished">No se han encontrado llaves</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyImportDetailDialog.cpp" line="36"/>
<location filename="../../src/ui/KeyImportDetailDialog.cpp" line="55"/>
<source>Key Import Details</source>
- <translation type="finished">Detalles de importación clave</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyImportDetailDialog.cpp" line="36"/>
<source>No keys found to import</source>
- <translation type="finished">No se han encontrado llaves para importar</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyImportDetailDialog.cpp" line="64"/>
<source>General key info</source>
- <translation type="finished">Información general de clave</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyImportDetailDialog.cpp" line="67"/>
<source>Considered:</source>
- <translation type="unfinished"/>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyImportDetailDialog.cpp" line="71"/>
<source>Public unchanged:</source>
- <translation type="finished">Público sin cambios:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyImportDetailDialog.cpp" line="76"/>
<source>Imported:</source>
- <translation type="unfinished"/>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyImportDetailDialog.cpp" line="81"/>
<source>Not imported:</source>
- <translation type="finished">No importado:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyImportDetailDialog.cpp" line="86"/>
<source>Private read:</source>
- <translation type="finished">LEER PRIVADO:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyImportDetailDialog.cpp" line="91"/>
<source>Private imported:</source>
- <translation type="finished">Importado privado:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyImportDetailDialog.cpp" line="96"/>
<source>Private unchanged:</source>
- <translation type="finished">Privado sin cambios:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyImportDetailDialog.cpp" line="111"/>
<source>Name</source>
- <translation type="finished">Nombre</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyImportDetailDialog.cpp" line="111"/>
<source>Email</source>
- <translation type="finished">Correo electrónico</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyImportDetailDialog.cpp" line="111"/>
<source>Status</source>
- <translation type="finished">Estado</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyImportDetailDialog.cpp" line="111"/>
<source>Fingerprint</source>
- <translation type="finished">Huella dactilar</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyImportDetailDialog.cpp" line="135"/>
<source>private</source>
- <translation type="unfinished"/>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyImportDetailDialog.cpp" line="138"/>
<source>public</source>
- <translation type="unfinished"/>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyImportDetailDialog.cpp" line="141"/>
<source>unchanged</source>
- <translation type="finished">sin alterar</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyImportDetailDialog.cpp" line="144"/>
<source>new key</source>
- <translation type="finished">nueva llave</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyImportDetailDialog.cpp" line="147"/>
<source>new subkey</source>
- <translation type="finished">Nueva Subkey</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyImportDetailDialog.cpp" line="151"/>
<source>new signature</source>
- <translation type="finished">nueva firma</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyImportDetailDialog.cpp" line="155"/>
<source>new uid</source>
- <translation type="finished">Nuevo uid</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
<name>KeyList</name>
<message>
- <location filename="../../src/ui/widgets/KeyList.cpp" line="77"/>
+ <location filename="../../src/ui/widgets/KeyList.cpp" line="76"/>
<source>Select</source>
- <translation type="finished">Seleccione</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/widgets/KeyList.cpp" line="77"/>
+ <location filename="../../src/ui/widgets/KeyList.cpp" line="76"/>
<source>Type</source>
- <translation type="finished">Tipo</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/widgets/KeyList.cpp" line="77"/>
+ <location filename="../../src/ui/widgets/KeyList.cpp" line="76"/>
<source>Name</source>
- <translation type="finished">Nombre</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/widgets/KeyList.cpp" line="77"/>
+ <location filename="../../src/ui/widgets/KeyList.cpp" line="76"/>
<source>Email Address</source>
- <translation type="finished">Dirección de correo electrónico</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/widgets/KeyList.cpp" line="78"/>
+ <location filename="../../src/ui/widgets/KeyList.cpp" line="77"/>
<source>Usage</source>
- <translation type="finished">Uso</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/widgets/KeyList.cpp" line="78"/>
+ <location filename="../../src/ui/widgets/KeyList.cpp" line="77"/>
<source>Validity</source>
- <translation type="finished">Validez</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/widgets/KeyList.cpp" line="78"/>
+ <location filename="../../src/ui/widgets/KeyList.cpp" line="77"/>
<source>Finger Print</source>
- <translation type="finished">Huella dactilar</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/widgets/KeyList.cpp" line="315"/>
+ <location filename="../../src/ui/widgets/KeyList.cpp" line="302"/>
<source>Import Keys</source>
- <translation type="finished">Teclas de importación</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/widgets/KeyList.cpp" line="317"/>
- <source>You've dropped something on the table.
+ <location filename="../../src/ui/widgets/KeyList.cpp" line="305"/>
+ <source>You&apos;ve dropped something on the table.
GpgFrontend will now try to import key(s).</source>
- <translation type="finished">Has dejado caer algo sobre la mesa.
- GPGFRontend ahora intentará importar la (s) clave (s).</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/widgets/KeyList.cpp" line="320"/>
+ <location filename="../../src/ui/widgets/KeyList.cpp" line="308"/>
<source>Always import without bothering.</source>
- <translation type="finished">Siempre importar sin molestarse.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/widgets/KeyList.cpp" line="356"/>
- <source>Couldn't Open File: </source>
- <translation type="finished">No se pudo abrir el archivo:</translation>
+ <location filename="../../src/ui/widgets/KeyList.cpp" line="341"/>
+ <source>Couldn&apos;t Open File: </source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
<name>KeyMgmt</name>
<message>
- <location filename="../../src/ui/KeyMgmt.cpp" line="81"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="82"/>
<source>Key Pair Management</source>
- <translation type="finished">Gestión de pares clave</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="88"/>
<source>&amp;Open</source>
- <translation type="finished">&amp;Abierto</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="89"/>
<source>Ctrl+O</source>
- <translation type="finished">Ctrl + o</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="90"/>
<source>Open Key File</source>
- <translation type="finished">Abrir archivo de clave</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="93"/>
<source>&amp;Close</source>
- <translation type="finished">&amp;Cerca</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="94"/>
<source>Ctrl+Q</source>
- <translation type="finished">Ctrl + Q</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="96"/>
<source>Close</source>
- <translation type="finished">Cerca</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="99"/>
<source>New Keypair</source>
- <translation type="finished">Nuevo llave</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="100"/>
<source>Ctrl+N</source>
- <translation type="finished">Ctrl + n</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="102"/>
<source>Generate KeyPair</source>
- <translation type="finished">Generar par de claves</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="105"/>
<source>New Subkey</source>
- <translation type="finished">Nueva Subkey</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="106"/>
<source>Ctrl+Shift+N</source>
- <translation type="finished">CTRL + MAYÚS + N</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="108"/>
<source>Generate Subkey For Selected KeyPair</source>
- <translation type="finished">Generar subclave para la tecla seleccionada.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="111"/>
- <location filename="../../src/ui/KeyMgmt.cpp" line="152"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="151"/>
<source>&amp;File</source>
- <translation type="finished">&amp;Archivo</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="113"/>
<source>Import New Key From File</source>
- <translation type="finished">Importar nueva llave desde el archivo</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="116"/>
<source>&amp;Clipboard</source>
- <translation type="finished">&amp;Portapapeles</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="118"/>
<source>Import New Key From Clipboard</source>
- <translation type="finished">Importar nueva llave desde el portapapeles</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="121"/>
<source>&amp;Keyserver</source>
- <translation type="finished">&amp; Keyserver</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="123"/>
<source>Import New Key From Keyserver</source>
- <translation type="finished">Importar nueva llave de Keyserver</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="126"/>
<source>Export To &amp;Clipboard</source>
- <translation type="finished">Exportar al portapapeles</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="128"/>
<source>Export Selected Key(s) To Clipboard</source>
- <translation type="finished">Exportar la (s) clave (s) seleccionada (s) al portapapeles</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="131"/>
<source>Export To &amp;File</source>
- <translation type="finished">Exportar a &amp; Archivo</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="133"/>
<source>Export Selected Key(s) To File</source>
- <translation type="finished">Exportar clave seleccionada (s) para archivar</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="136"/>
<source>Delete Selected Key(s)</source>
- <translation type="finished">Eliminar la (s) clave seleccionada (s)</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="137"/>
<source>Delete the Selected keys</source>
- <translation type="finished">Eliminar las teclas seleccionadas</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="140"/>
<source>Delete Checked Key(s)</source>
- <translation type="finished">Eliminar la (s) clave de verificación (s)</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="141"/>
<source>Delete the Checked keys</source>
- <translation type="finished">Eliminar las teclas marcadas</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="145"/>
<source>Show Key Details</source>
- <translation type="finished">Mostrar detalles clave</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="146"/>
<source>Show Details for this Key</source>
- <translation type="finished">Mostrar detalles para esta clave</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyMgmt.cpp" line="156"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="155"/>
<source>&amp;Key</source>
- <translation type="finished">&amp;Clave</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyMgmt.cpp" line="157"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="156"/>
<source>&amp;Generate Key</source>
- <translation type="finished">Generar clave</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyMgmt.cpp" line="161"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="160"/>
<source>&amp;Import Key</source>
- <translation type="finished">E importar clave</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyMgmt.cpp" line="173"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="171"/>
<source>Key</source>
- <translation type="finished">Clave</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyMgmt.cpp" line="181"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="179"/>
<source>Generate</source>
- <translation type="finished">Generar</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyMgmt.cpp" line="182"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="180"/>
<source>Generate A New Keypair or Subkey</source>
- <translation type="finished">Generar un nuevo teclado o suba.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyMgmt.cpp" line="191"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="189"/>
<source>Import key</source>
- <translation type="finished">Tecla de importación</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyMgmt.cpp" line="192"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="190"/>
<source>Import Key</source>
- <translation type="finished">Tecla de importación</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyMgmt.cpp" line="213"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="209"/>
<source>Open Key</source>
- <translation type="finished">Llave abierta</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyMgmt.cpp" line="213"/>
- <location filename="../../src/ui/KeyMgmt.cpp" line="299"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="210"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="302"/>
<source>Key Files</source>
- <translation type="finished">Archivos clave</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyMgmt.cpp" line="213"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="210"/>
<source>Keyring files</source>
- <translation type="finished">Archivos de llavero</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyMgmt.cpp" line="218"/>
- <source>Couldn't Open File: </source>
- <translation type="finished">No se pudo abrir el archivo:</translation>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="216"/>
+ <source>Couldn&apos;t Open File: </source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyMgmt.cpp" line="268"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="262"/>
<source>Deleting Keys</source>
- <translation type="finished">Eliminar llaves</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyMgmt.cpp" line="269"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="263"/>
<source>Are you sure that you want to delete the following keys?</source>
- <translation type="finished">¿Está seguro de que desea eliminar las siguientes teclas?</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyMgmt.cpp" line="270"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="265"/>
<source>The action can not be undone.</source>
- <translation type="finished">La acción no se puede deshacer.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyMgmt.cpp" line="299"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="281"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="296"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="344"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="281"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="296"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="344"/>
+ <source>Key Not Found.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="301"/>
<source>Export Key To File</source>
- <translation type="finished">Clave de exportación a archivo</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyMgmt.cpp" line="309"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="312"/>
<source>key(s) exported</source>
- <translation type="finished">llave (s) exportada</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="338"/>
- <location filename="../../src/ui/KeyMgmt.cpp" line="345"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="349"/>
<source>Invalid Operation</source>
- <translation type="finished">Operación inválida</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="339"/>
<source>Please select one KeyPair before doing this operation.</source>
- <translation type="finished">Por favor seleccione una tecla antes de hacer esta operación.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyMgmt.cpp" line="346"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="350"/>
<source>If a key pair does not have a private key then it will not be able to generate sub-keys.</source>
- <translation type="finished">Si un par de claves no tiene una clave privada, no podrá generar sub-llaves.</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -1249,34 +1330,34 @@
<message>
<location filename="../../src/ui/keypair_details/KeyNewUIDDialog.cpp" line="40"/>
<source>Name</source>
- <translation type="finished">Nombre</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyNewUIDDialog.cpp" line="41"/>
<source>Email</source>
- <translation type="finished">Correo electrónico</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyNewUIDDialog.cpp" line="42"/>
<source>Comment</source>
- <translation type="finished">Comentario</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyNewUIDDialog.cpp" line="55"/>
<source>Create New UID</source>
- <translation type="finished">Crear nuevo uid</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyNewUIDDialog.cpp" line="68"/>
<source> Name must contain at least five characters.
</source>
- <translation type="finished">El nombre debe contener al menos cinco caracteres.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyNewUIDDialog.cpp" line="70"/>
<source> Please give a email address.
</source>
- <translation type="finished">Por favor, proporcione una dirección de correo electrónico.</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -1284,202 +1365,212 @@
<message>
<location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="34"/>
<source>Owner</source>
- <translation type="unfinished"/>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="35"/>
<source>Master Key</source>
- <translation type="finished">Llave maestra</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="36"/>
<source>Fingerprint</source>
- <translation type="finished">Huella dactilar</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="37"/>
<source>Additional UIDs</source>
- <translation type="finished">UIDS adicionales</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="58"/>
<source>Exists</source>
- <translation type="finished">Existe</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="58"/>
<source>Not Exists</source>
- <translation type="finished">No existe</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="83"/>
<source>Name:</source>
- <translation type="finished">Nombre:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="84"/>
<source>Email Address:</source>
- <translation type="finished">Dirección de correo electrónico:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="85"/>
<source>Comment:</source>
- <translation type="finished">Comentario:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="90"/>
<source>Key ID: </source>
- <translation type="finished">ID clave:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="91"/>
<source>Algorithm: </source>
- <translation type="finished">Algoritmo:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="92"/>
<source>Key Size:</source>
- <translation type="finished">Tamaño de la llave:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="93"/>
<source>Nominal Usage: </source>
- <translation type="finished">Uso nominal:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="94"/>
<source>Actual Usage: </source>
- <translation type="finished">Uso actual:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="95"/>
<source>Expires on: </source>
- <translation type="finished">Expira el:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="96"/>
<source>Last Update: </source>
- <translation type="finished">Última actualización:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="97"/>
<source>Secret Key Existence: </source>
- <translation type="finished">Existencia clave secreta:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="121"/>
<source>Copy</source>
- <translation type="finished">Dupdo</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="123"/>
<source>copy fingerprint to clipboard</source>
- <translation type="finished">Copia la huella digital al portapapeles</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="133"/>
<source>Operations</source>
- <translation type="finished">Operaciones</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="136"/>
<source>Export Private Key (Include Subkey)</source>
- <translation type="finished">Clave privada de exportación (incluir subclave)</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="141"/>
<source>Modify Expiration Datetime (Master Key)</source>
- <translation type="finished">Modificar fecha de vencimiento (clave maestra)</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="146"/>
<source>Key Server Operation (Pubkey)</source>
- <translation type="finished">Operación del servidor clave (Pubkey)</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="149"/>
<source>Generate Revoke Certificate</source>
- <translation type="finished">Genera revocar certificado</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="175"/>
+ <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="174"/>
<source>Warning: The Master Key has expired.</source>
- <translation type="finished">Advertencia: la clave maestra ha caducado.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="178"/>
+ <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="177"/>
<source>Warning: The Master Key has been revoked</source>
- <translation type="finished">Advertencia: la clave maestra ha sido revocada</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="202"/>
+ <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="201"/>
<source>Exporting private Key</source>
- <translation type="finished">Exportación de clave privada</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="203"/>
+ <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="202"/>
<source>You are about to export your</source>
- <translation type="finished">Estás a punto de exportar tu</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="204"/>
+ <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="203"/>
<source>PRIVATE KEY</source>
- <translation type="finished">LLAVE PRIVADA</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="205"/>
- <source>This is NOT your Public Key, so DON'T give it away.</source>
- <translation type="finished">Esta no es su clave pública, así que no lo desye.</translation>
+ <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="204"/>
+ <source>This is NOT your Public Key, so DON&apos;T give it away.</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="206"/>
+ <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="205"/>
<source>Do you REALLY want to export your PRIVATE KEY?</source>
- <translation type="finished">¿Realmente quieres exportar tu clave privada?</translation>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="219"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="219"/>
+ <source>Key Not Found.</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="221"/>
+ <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="224"/>
<source>Export Key To File</source>
- <translation type="finished">Clave de exportación a archivo</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="222"/>
+ <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="225"/>
<source>Key Files</source>
- <translation type="finished">Archivos clave</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="225"/>
+ <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="228"/>
<source>Export Error</source>
- <translation type="finished">Error de exportación</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="225"/>
- <source>Couldn't open %1 for writing</source>
- <translation type="finished">No se pudo abrir% 1 por escrito.</translation>
+ <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="228"/>
+ <source>Couldn&apos;t open %1 for writing</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="295"/>
+ <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="298"/>
<source>Never Expire</source>
- <translation type="finished">Nunca expira</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="315"/>
+ <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="318"/>
<source>Upload Key Pair to Key Server</source>
- <translation type="finished">Cargar un par de claves para clave del servidor</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="317"/>
+ <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="320"/>
<source>Update Key Pair</source>
- <translation type="finished">Actualizar par de claves</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="340"/>
+ <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="343"/>
<source>Generate revocation certificate</source>
- <translation type="finished">Generar certificado de revocación</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="343"/>
+ <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="346"/>
<source>Revocation Certificates</source>
- <translation type="finished">Certificados de revocación</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -1487,87 +1578,87 @@
<message>
<location filename="../../src/ui/keypair_details/KeyPairSubkeyTab.cpp" line="37"/>
<source>Generate A New Subkey</source>
- <translation type="finished">Generar una nueva subclave</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairSubkeyTab.cpp" line="54"/>
<source>Key ID: </source>
- <translation type="finished">ID clave:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairSubkeyTab.cpp" line="55"/>
<source>Algorithm: </source>
- <translation type="finished">Algoritmo:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairSubkeyTab.cpp" line="56"/>
<source>Key Size:</source>
- <translation type="finished">Tamaño de la llave:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairSubkeyTab.cpp" line="57"/>
<source>Usage: </source>
- <translation type="finished">Uso:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairSubkeyTab.cpp" line="58"/>
<source>Expires On </source>
- <translation type="finished">Expira el</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairSubkeyTab.cpp" line="59"/>
<source>Last Update: </source>
- <translation type="finished">Última actualización:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairSubkeyTab.cpp" line="60"/>
<source>Existence: </source>
- <translation type="finished">Existencia:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairSubkeyTab.cpp" line="61"/>
<source>Fingerprint: </source>
- <translation type="finished">Huella dactilar:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairSubkeyTab.cpp" line="121"/>
<source>Subkey ID</source>
- <translation type="finished">ID de suba</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairSubkeyTab.cpp" line="121"/>
<source>Key Size</source>
- <translation type="finished">Tamaño de la llave</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairSubkeyTab.cpp" line="121"/>
<source>Algo</source>
- <translation type="finished">Algo</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairSubkeyTab.cpp" line="121"/>
<source>Create Date</source>
- <translation type="finished">Fecha de Creación</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairSubkeyTab.cpp" line="121"/>
<source>Expire Date</source>
- <translation type="finished">Fecha de caducidad</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyPairSubkeyTab.cpp" line="161"/>
+ <location filename="../../src/ui/keypair_details/KeyPairSubkeyTab.cpp" line="160"/>
<source>Never Expire</source>
- <translation type="finished">Nunca expira</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyPairSubkeyTab.cpp" line="185"/>
+ <location filename="../../src/ui/keypair_details/KeyPairSubkeyTab.cpp" line="184"/>
<source>Never Expires</source>
- <translation type="finished">Nunca expira</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyPairSubkeyTab.cpp" line="231"/>
+ <location filename="../../src/ui/keypair_details/KeyPairSubkeyTab.cpp" line="230"/>
<source>Edit Expire Date</source>
- <translation type="finished">Editar fecha de vencimiento</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -1575,64 +1666,64 @@
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="39"/>
<source>New UID</source>
- <translation type="finished">Nuevo uid</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="40"/>
<source>UID Management</source>
- <translation type="finished">Gestión UID</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="59"/>
<source>UIDs</source>
- <translation type="finished">Uids</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="67"/>
<source>Signature of Selected UID</source>
- <translation type="finished">Firma de UID seleccionado</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="103"/>
<source>Select</source>
- <translation type="finished">Seleccione</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="103"/>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="126"/>
<source>Name</source>
- <translation type="finished">Nombre</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="103"/>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="126"/>
<source>Email</source>
- <translation type="finished">Correo electrónico</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="103"/>
<source>Comment</source>
- <translation type="finished">Comentario</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="126"/>
<source>Key ID</source>
- <translation type="finished">ID clave</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="126"/>
<source>Create Date</source>
- <translation type="finished">Fecha de Creación</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="126"/>
<source>Expired Date</source>
- <translation type="finished">Fecha de vencimiento</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="219"/>
<source>Never Expires</source>
- <translation type="finished">Nunca expira</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="237"/>
@@ -1642,33 +1733,33 @@
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="480"/>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="487"/>
<source>Invalid Operation</source>
- <translation type="finished">Operación inválida</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="238"/>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="301"/>
<source>Please select one or more UIDs before doing this operation.</source>
- <translation type="finished">Seleccione uno o más UID antes de hacer esta operación.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="263"/>
<source>Sign Selected UID(s)</source>
- <translation type="finished">Signo de uid seleccionado (s)</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="265"/>
<source>Delete Selected UID(s)</source>
- <translation type="finished">Eliminar UID seleccionado (s)</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="284"/>
<source>Successful Operation</source>
- <translation type="finished">Operación exitosa</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="285"/>
<source>Successfully added a new UID.</source>
- <translation type="finished">Agregó con éxito un nuevo UID.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="288"/>
@@ -1677,7 +1768,7 @@
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="460"/>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="507"/>
<source>Operation Failed</source>
- <translation type="finished">Operación fallida</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="289"/>
@@ -1686,17 +1777,17 @@
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="461"/>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="508"/>
<source>An error occurred during the operation.</source>
- <translation type="finished">Se produjo un error durante la operación.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="313"/>
<source>Deleting UIDs</source>
- <translation type="finished">Eliminar UIDS</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="314"/>
<source>Are you sure that you want to delete the following uids?</source>
- <translation type="finished">¿Está seguro de que desea eliminar los siguientes uids?</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="315"/>
@@ -1704,73 +1795,73 @@
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="454"/>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="501"/>
<source>The action can not be undone.</source>
- <translation type="finished">La acción no se puede deshacer.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="355"/>
<source>Set Primary UID</source>
- <translation type="finished">Establecer uid primario</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="356"/>
<source>Are you sure that you want to set the Primary UID to?</source>
- <translation type="finished">¿Está seguro de que desea configurar el UID primario para?</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="395"/>
<source>Set As Primary</source>
- <translation type="finished">Establecer como primario</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="397"/>
<source>Sign UID</source>
- <translation type="finished">Muestra uid</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="399"/>
<source>Delete UID</source>
- <translation type="finished">Eliminar uid</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="426"/>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="441"/>
<source>Please select one UID before doing this operation.</source>
- <translation type="finished">Por favor, seleccione una UID antes de hacer esta operación.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="452"/>
<source>Deleting UID</source>
- <translation type="finished">Eliminar uid</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="453"/>
<source>Are you sure that you want to delete the following uid?</source>
- <translation type="finished">¿Está seguro de que desea eliminar el siguiente UID?</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="469"/>
<source>Delete(Revoke) Key Signature</source>
- <translation type="finished">Eliminar (revocar) Firma clave</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="481"/>
<source>Please select one Key Signature before doing this operation.</source>
- <translation type="finished">Seleccione una firma clave antes de hacer esta operación.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="488"/>
<source>To delete the signature, you need to have its corresponding public key in the local database.</source>
- <translation type="finished">Para eliminar la firma, debe tener su clave pública correspondiente en la base de datos local.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="499"/>
<source>Deleting Key Signature</source>
- <translation type="finished">Eliminar la firma clave</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="500"/>
<source>Are you sure that you want to delete the following signature?</source>
- <translation type="finished">¿Está seguro de que desea eliminar la siguiente firma?</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -1778,140 +1869,140 @@
<message>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="40"/>
<source>&amp;Close</source>
- <translation type="finished">&amp;Cerca</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="41"/>
<source>&amp;Import ALL</source>
- <translation type="finished">E importar todos</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="42"/>
<source>&amp;Search</source>
- <translation type="finished">&amp;Buscar</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="45"/>
<source>Search String:</source>
- <translation type="finished">Cadena de búsqueda:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="49"/>
<source>Key Server:</source>
- <translation type="finished">Servidor de teclas:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="97"/>
<source>Update Keys from Keyserver</source>
- <translation type="finished">Actualizar las teclas de Keyserver</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="99"/>
<source>Import Keys from Keyserver</source>
- <translation type="finished">Importar claves de Keyserver</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="158"/>
<source>UID</source>
- <translation type="finished">Uid</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="158"/>
<source>Creation date</source>
- <translation type="finished">Fecha de creación</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="158"/>
<source>KeyID</source>
- <translation type="finished">Keyid</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="158"/>
<source>Tag</source>
- <translation type="finished">Etiqueta</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="179"/>
<source>Text is empty.</source>
- <translation type="finished">El texto está vacío.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="213"/>
<source>Not Key Found</source>
- <translation type="finished">No se encuentra clave</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="216"/>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="386"/>
<source>Timeout</source>
- <translation type="finished">Se acabó el tiempo</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="219"/>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="389"/>
<source>Key Server Not Found</source>
- <translation type="finished">Servidor de teclas no encontrado</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="222"/>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="392"/>
<source>Connection Error</source>
- <translation type="finished">Error de conexión</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="230"/>
<source>Too many responses from keyserver!</source>
- <translation type="finished">Demasiadas respuestas de Keyserver!</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="237"/>
<source>No keys found, input may be kexId, retrying search with 0x.</source>
- <translation type="finished">No se han encontrado llaves, la entrada puede ser kexid, volviendo a intentar la búsqueda con 0x.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="242"/>
<source>No keys found containing the search string!</source>
- <translation type="finished">¡No se han encontrado llaves que contengan la cadena de búsqueda!</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="246"/>
<source>Insufficiently specific search string!</source>
- <translation type="finished">Insuficientemente específica de la cadena de búsqueda!</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="274"/>
<source>revoked</source>
- <translation type="unfinished"/>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="277"/>
<source>disabled</source>
- <translation type="unfinished"/>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="317"/>
<source>&lt;h4&gt;%1 keys found. Double click a key to import it.&lt;/h4&gt;</source>
- <translation type="finished">&lt;h4&gt;% 1 llaves encontradas.Haga doble clic en una tecla para importarlo. &lt;/ H4&gt;</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="383"/>
<source>Key Not Found</source>
- <translation type="finished">Clave no encontrada</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="410"/>
<source>&lt;h4&gt;Key Updated&lt;/h4&gt;</source>
- <translation type="finished">&lt;H4&gt; Tecla actualizada &lt;/ h4&gt;</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="412"/>
<source>&lt;h4&gt;Key Imported&lt;/h4&gt;</source>
- <translation type="finished">&lt;H4&gt; Clave importado &lt;/ h4&gt;</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="473"/>
<source>Upload Keys from Keyserver</source>
- <translation type="finished">Subir claves de Keyserver</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -1919,22 +2010,22 @@
<message>
<location filename="../../src/ui/keypair_details/KeySetExpireDateDialog.cpp" line="36"/>
<source>Confirm</source>
- <translation type="finished">Confirmar</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeySetExpireDateDialog.cpp" line="41"/>
<source>Never Expire</source>
- <translation type="finished">Nunca expira</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeySetExpireDateDialog.cpp" line="61"/>
<source>Operation Failed</source>
- <translation type="finished">Operación fallida</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeySetExpireDateDialog.cpp" line="62"/>
<source>An error occurred during the operation.</source>
- <translation type="finished">Se produjo un error durante la operación.</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -1942,73 +2033,93 @@
<message>
<location filename="../../src/ui/keypair_details/KeyUIDSignDialog.cpp" line="72"/>
<source>Expire Date</source>
- <translation type="finished">Fecha de caducidad</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyUIDSignDialog.cpp" line="81"/>
- <source>Sign For Key's UID(s)</source>
- <translation type="finished">Signo para uid (s) de clave (s)</translation>
+ <source>Sign For Key&apos;s UID(s)</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyUIDSignDialog.cpp" line="100"/>
+ <location filename="../../src/ui/keypair_details/KeyUIDSignDialog.cpp" line="99"/>
<source>Unsuccessful Operation</source>
- <translation type="finished">Operación fallida</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyUIDSignDialog.cpp" line="101"/>
+ <location filename="../../src/ui/keypair_details/KeyUIDSignDialog.cpp" line="100"/>
<source>Signature operation failed for UID </source>
- <translation type="finished">La operación de la firma falló por UID</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyUIDSignDialog.cpp" line="108"/>
+ <location filename="../../src/ui/keypair_details/KeyUIDSignDialog.cpp" line="107"/>
<source>Operation Complete</source>
- <translation type="finished">Operación completa</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyUIDSignDialog.cpp" line="109"/>
+ <location filename="../../src/ui/keypair_details/KeyUIDSignDialog.cpp" line="108"/>
<source>The signature operation of the UID is complete</source>
- <translation type="finished">El funcionamiento de la firma del UID está completo.</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
<name>KeyUploadDialog</name>
<message>
- <location filename="../../src/ui/KeyUploadDialog.cpp" line="49"/>
+ <location filename="../../src/ui/KeyUploadDialog.cpp" line="47"/>
<source>Uploading Public Key</source>
- <translation type="finished">Subiendo la clave pública</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyUploadDialog.cpp" line="112"/>
+ <location filename="../../src/ui/KeyUploadDialog.cpp" line="110"/>
<source>Key Not Found</source>
- <translation type="finished">Clave no encontrada</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyUploadDialog.cpp" line="115"/>
+ <location filename="../../src/ui/KeyUploadDialog.cpp" line="113"/>
<source>Timeout</source>
- <translation type="finished">Se acabó el tiempo</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyUploadDialog.cpp" line="118"/>
+ <location filename="../../src/ui/KeyUploadDialog.cpp" line="116"/>
<source>Key Server Not Found</source>
- <translation type="finished">Servidor de teclas no encontrado</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyUploadDialog.cpp" line="121"/>
+ <location filename="../../src/ui/KeyUploadDialog.cpp" line="119"/>
<source>Connection Error</source>
- <translation type="finished">Error de conexión</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
<name>KeyserverTab</name>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="607"/>
- <source>Default Key Server for import:</source>
- <translation type="finished">Servidor de tecla predeterminado para importar:</translation>
+ <location filename="../../src/ui/settings/SettingsKeyServer.cpp" line="32"/>
+ <source>General</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/settings/SettingsKeyServer.cpp" line="53"/>
+ <source>No.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/settings/SettingsKeyServer.cpp" line="53"/>
+ <source>Address</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="624"/>
+ <location filename="../../src/ui/settings/SettingsKeyServer.cpp" line="53"/>
+ <source>Available</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/settings/SettingsKeyServer.cpp" line="57"/>
+ <source>Default Key Server for Import:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/settings/SettingsKeyServer.cpp" line="67"/>
<source>Add</source>
- <translation type="finished">Agregar</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -2016,890 +2127,1025 @@
<message>
<location filename="../../src/MainWindow.cpp" line="35"/>
<source>Loading Gnupg</source>
- <translation type="finished">Cargando gnupg</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/MainWindow.cpp" line="62"/>
<source>ENV Loading Failed</source>
- <translation type="finished">Enviando env falla</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/MainWindow.cpp" line="63"/>
<source>Gnupg is not installed correctly, please follow the ReadME instructions to install gnupg and then open GPGFrontend.</source>
- <translation type="finished">GNUPG no está instalado correctamente, siga las instrucciones de README para instalar GNUPG y luego abrir GPGFRontend.</translation>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="36"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="40"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="44"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="114"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="127"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="131"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="135"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="196"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="212"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="216"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="220"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="294"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="326"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="331"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="335"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="383"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="396"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="400"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="404"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="501"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="513"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="517"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="521"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="583"/>
+ <location filename="../../src/ui/main_window/MainWindowServerSlotFunction.cpp" line="51"/>
+ <location filename="../../src/ui/main_window/MainWindowServerSlotFunction.cpp" line="112"/>
+ <location filename="../../src/ui/main_window/MainWindowServerSlotFunction.cpp" line="126"/>
+ <location filename="../../src/ui/main_window/MainWindowServerSlotFunction.cpp" line="218"/>
+ <location filename="../../src/ui/main_window/MainWindowServerSlotFunction.cpp" line="231"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="525"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="541"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="38"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="117"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="286"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="525"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="702"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="885"/>
- <source>No Key Selected</source>
- <translation type="finished">Sin llave seleccionada</translation>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="36"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="127"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="212"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="396"/>
+ <source>Select a file before doing it.</source>
+ <translation type="unfinished"></translation>
</message>
<message>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="40"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="131"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="216"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="400"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="517"/>
+ <source>No permission to read this file.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="44"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="135"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="220"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="404"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="521"/>
+ <source>No permission to create file.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="49"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="150"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="226"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="409"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="375"/>
+ <source>Warning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="50"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="151"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="227"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="410"/>
+ <source>The target file already exists, do you need to overwrite it?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="62"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="239"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="422"/>
<location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="45"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="124"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="532"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="709"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="126"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="298"/>
+ <source>No Key Selected</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="69"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="246"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="52"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="133"/>
<source>Invalid Operation</source>
- <translation type="finished">Operación inválida</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="46"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="533"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="710"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="70"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="247"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="53"/>
<source>The selected key contains a key that does not actually have a encrypt usage.&lt;br/&gt;</source>
- <translation type="finished">La clave seleccionada contiene una clave que en realidad no tiene un uso de cifrado. &lt;br/&gt;</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="47"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="126"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="300"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="534"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="711"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="899"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="71"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="248"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="436"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="54"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="135"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="312"/>
<source>&lt;br/&gt;For example the Following Key: &lt;br/&gt;</source>
- <translation type="finished">&lt;br/&gt; Por ejemplo, la siguiente clave: &lt;br/&gt;</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="65"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="554"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="91"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="72"/>
<source>Encrypting</source>
- <translation type="unfinished"/>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="94"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="368"/>
- <source>Function Disabled</source>
- <translation type="finished">Función desactivada</translation>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="114"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="196"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="294"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="383"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="501"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="583"/>
+ <source>An error occurred during operation.</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="95"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="369"/>
- <source>Please go to the settings interface to enable and configure this function.</source>
- <translation type="finished">Por favor, vaya a la interfaz de configuración para habilitar y configurar esta función.</translation>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="268"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="151"/>
+ <source>Signing</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="125"/>
- <source>The selected key contains a key that does not actually have a signature usage.&lt;br/&gt;</source>
- <translation type="finished">La clave seleccionada contiene una clave que en realidad no tiene un uso de la firma. &lt;br/&gt;</translation>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="327"/>
+ <source>Please select the appropriate target file or signature file. Ensure that both are in this directory.</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="142"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="731"/>
- <source>Signing</source>
- <translation type="finished">Firma</translation>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="331"/>
+ <source>No permission to read target file.</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="186"/>
- <source>Decrypting</source>
- <translation type="unfinished"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="335"/>
+ <source>No permission to read signature file.</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="246"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="816"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="353"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="259"/>
<source>Verifying</source>
- <translation type="finished">Verificar</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="298"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="897"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="434"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="310"/>
<source>Invalid KeyPair</source>
- <translation type="finished">Teclado no válido</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="299"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="898"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="435"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="311"/>
<source>The selected keypair cannot be used for signing and encryption at the same time.&lt;br/&gt;</source>
- <translation type="finished">El teclado seleccionado no se puede utilizar para la firma y el cifrado al mismo tiempo. &lt;br/&gt;</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="310"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="317"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="909"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="916"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="446"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="453"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="322"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="329"/>
<source>Incomplete Operation</source>
- <translation type="finished">Operación incompleta</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="311"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="910"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="447"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="323"/>
<source>None of the selected key pairs can provide the encryption function.</source>
- <translation type="finished">Ninguno de los pares de teclas seleccionados puede proporcionar la función de cifrado.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="318"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="917"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="454"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="330"/>
<source>None of the selected key pairs can provide the signature function.</source>
- <translation type="finished">Ninguno de los pares de teclas seleccionados puede proporcionar la función de firma.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="335"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="936"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="473"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="365"/>
<source>Encrypting and Signing</source>
- <translation type="finished">Cifrado y firma</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="401"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="1014"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="513"/>
+ <source>Select a file(.gpg/.asc) before doing it.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="551"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="461"/>
<source>Decrypting and Verifying</source>
- <translation type="finished">Descifrar y verificar</translation>
- </message>
- <message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="499"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="503"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="507"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="577"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="590"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="594"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="598"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="659"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="675"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="679"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="683"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="757"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="789"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="794"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="798"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="846"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="859"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="863"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="867"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="964"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="976"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="980"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="984"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="1046"/>
- <source>Error</source>
- <translation type="finished">Error</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="499"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="590"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="675"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="859"/>
- <source>Select a file before doing it.</source>
- <translation type="finished">Seleccione un archivo antes de hacerlo.</translation>
+ <location filename="../../src/ui/main_window/MainWindowServerSlotFunction.cpp" line="43"/>
+ <location filename="../../src/ui/main_window/MainWindowServerSlotFunction.cpp" line="155"/>
+ <source>Invalid Own Key</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="503"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="594"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="679"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="863"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="980"/>
- <source>No permission to read this file.</source>
- <translation type="finished">No hay permiso para leer este archivo.</translation>
+ <location filename="../../src/ui/main_window/MainWindowServerSlotFunction.cpp" line="43"/>
+ <location filename="../../src/ui/main_window/MainWindowServerSlotFunction.cpp" line="155"/>
+ <source>Own Key can not be use to do any operation.</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="507"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="598"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="683"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="867"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="984"/>
- <source>No permission to create file.</source>
- <translation type="finished">No hay permiso para crear un archivo.</translation>
+ <location filename="../../src/ui/main_window/MainWindowServerSlotFunction.cpp" line="52"/>
+ <source>Please obtain a Service Token from the server in the settings.</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="512"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="613"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="689"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="872"/>
- <source>Warning</source>
- <translation type="finished">Advertencia</translation>
+ <location filename="../../src/ui/main_window/MainWindowServerSlotFunction.cpp" line="91"/>
+ <source>Getting Cpt From Server</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="513"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="614"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="690"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="873"/>
- <source>The target file already exists, do you need to overwrite it?</source>
- <translation type="finished">El archivo objetivo ya existe, ¿necesita sobrescribirlo?</translation>
+ <location filename="../../src/ui/main_window/MainWindowServerSlotFunction.cpp" line="113"/>
+ <location filename="../../src/ui/main_window/MainWindowServerSlotFunction.cpp" line="219"/>
+ <source>The communication content with the server does not meet the requirements</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="577"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="659"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="757"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="846"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="964"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="1046"/>
- <source>An error occurred during operation.</source>
- <translation type="finished">Se produjo un error durante la operación.</translation>
+ <location filename="../../src/ui/main_window/MainWindowServerSlotFunction.cpp" line="126"/>
+ <source>Invalid short ciphertext</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="790"/>
- <source>Please select the appropriate target file or signature file. Ensure that both are in this directory.</source>
- <translation type="finished">Por favor, seleccione el archivo de destino o firma apropiado.Asegúrese de que ambos estén en este directorio.</translation>
+ <location filename="../../src/ui/main_window/MainWindowServerSlotFunction.cpp" line="144"/>
+ <source>Invalid Service Token</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="794"/>
- <source>No permission to read target file.</source>
- <translation type="finished">No hay permiso para leer el archivo de destino.</translation>
+ <location filename="../../src/ui/main_window/MainWindowServerSlotFunction.cpp" line="145"/>
+ <source>Please go to the setting interface to get a ServiceToken.</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="798"/>
- <source>No permission to read signature file.</source>
- <translation type="finished">No hay permiso para leer el archivo de firma.</translation>
+ <location filename="../../src/ui/main_window/MainWindowServerSlotFunction.cpp" line="203"/>
+ <source>Getting Scpt From Server</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="976"/>
- <source>Select a file(.gpg/.asc) before doing it.</source>
- <translation type="finished">Seleccione un archivo (.gpg / .asc) antes de hacerlo.</translation>
+ <location filename="../../src/ui/main_window/MainWindowServerSlotFunction.cpp" line="228"/>
+ <source>Notice: Use Decrypt &amp; Verify operation to decrypt this short crypto text.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/main_window/MainWindowServerSlotFunction.cpp" line="231"/>
+ <source>There is a problem with the communication with the server</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="1082"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="103"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="408"/>
+ <source>Function Disabled</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="104"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="409"/>
+ <source>Please go to the settings interface to enable and configure this function.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="134"/>
+ <source>The selected key contains a key that does not actually have a signature usage.&lt;br/&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="186"/>
+ <source>Notice</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="186"/>
+ <source>Short Crypto Text only supports Decrypt &amp; Verify.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="200"/>
+ <source>Decrypting</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="376"/>
+ <source>Automatic public key exchange failed.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="415"/>
+ <source>Service Token Empty</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="416"/>
+ <source>Please go to the settings interface to set Own Key and get Service Token.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="525"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="541"/>
+ <source>Key Not Found.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="572"/>
<source>Outdated Version</source>
- <translation type="finished">Versión desactualizada</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="1083"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="573"/>
<source>This version(%1) is out of date, please update the latest version in time. </source>
- <translation type="finished">Esta versión (% 1) está desactualizada, actualice la última versión en el tiempo.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="1085"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="1092"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="575"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="582"/>
<source>You can download the latest version(%1) on Github Releases Page.&lt;br/&gt;</source>
- <translation type="finished">Puede descargar la última versión (% 1) en la página de lanzamientos GitHub. &lt;br/&gt;</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="1089"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="579"/>
<source>Unreleased Version</source>
- <translation type="finished">Versión inédita</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="1090"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="580"/>
<source>This version(%1) has not been officially released and is not recommended for use in a production environment. &lt;br/&gt;</source>
- <translation type="finished">Esta versión (% 1) no se ha liberado oficialmente y no se recomienda para su uso en un entorno de producción.&lt;br/&gt;</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowSlotUI.cpp" line="58"/>
<source>There is one unencrypted file in attachment folder</source>
- <translation type="finished">Hay un archivo sin cifrado en la carpeta de archivos adjuntos</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowSlotUI.cpp" line="60"/>
<source>There are </source>
- <translation type="finished">Existen</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowSlotUI.cpp" line="60"/>
<source> unencrypted files in attachment folder</source>
- <translation type="finished">Archivos sin cifrar en la carpeta ADJUNTO</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="30"/>
<source>&amp;New</source>
- <translation type="unfinished"/>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="36"/>
<source>Open a new file</source>
- <translation type="finished">Abrir un nuevo archivo</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="39"/>
<source>&amp;Open...</source>
- <translation type="finished">&amp;Abierto...</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="42"/>
<source>Open an existing file</source>
- <translation type="finished">Abra un archivo existente</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="45"/>
<source>&amp;Browser</source>
- <translation type="unfinished"/>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="47"/>
<source>Open a file browser</source>
- <translation type="finished">Abra un navegador de archivos</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="50"/>
<source>&amp;Save</source>
- <translation type="finished">&amp;Ahorrar</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="53"/>
<source>Save the current File</source>
- <translation type="finished">Guarda el archivo actual</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="56"/>
<source>Save &amp;As</source>
- <translation type="finished">Guardar como</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="59"/>
<source>Save the current File as...</source>
- <translation type="finished">Guarde el archivo actual como ...</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="62"/>
<source>&amp;Print</source>
- <translation type="finished">&amp;Impresión</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="65"/>
<source>Print Document</source>
- <translation type="finished">Imprimir documento</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="68"/>
<source>&amp;Close</source>
- <translation type="finished">&amp;Cerca</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="70"/>
<source>Close file</source>
- <translation type="finished">Cerrar el archivo</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="73"/>
<source>&amp;Quit</source>
- <translation type="finished">&amp;Dejar</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="76"/>
<source>Quit Program</source>
- <translation type="finished">Programa de dejar de fumar</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="81"/>
<source>&amp;Undo</source>
- <translation type="finished">&amp;Deshacer</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="83"/>
<source>Undo Last Edit Action</source>
- <translation type="finished">Deshacer Última edición de acción</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="86"/>
<source>&amp;Redo</source>
- <translation type="finished">&amp;Rehacer</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="88"/>
<source>Redo Last Edit Action</source>
- <translation type="finished">Rehacer la última acción de edición</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="91"/>
<source>Zoom In</source>
- <translation type="finished">Acercarse</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="95"/>
<source>Zoom Out</source>
- <translation type="finished">Disminuir el zoom</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="99"/>
<source>&amp;Paste</source>
- <translation type="finished">&amp;Pegar</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="102"/>
<source>Paste Text From Clipboard</source>
- <translation type="finished">Pegar texto del portapapeles</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="105"/>
<source>Cu&amp;t</source>
- <translation type="finished">Con &amp; t.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="108"/>
- <source>Cut the current selection's contents to the clipboard</source>
- <translation type="finished">Cortar los contenidos de la selección actual al portapapeles.</translation>
+ <source>Cut the current selection&apos;s contents to the clipboard</source>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="112"/>
<source>&amp;Copy</source>
- <translation type="finished">&amp;Dupdo</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="115"/>
- <source>Copy the current selection's contents to the clipboard</source>
- <translation type="finished">Copia los contenidos de la selección actual al portapapeles.</translation>
+ <source>Copy the current selection&apos;s contents to the clipboard</source>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="119"/>
<source>&amp;Quote</source>
- <translation type="finished">&amp; quot</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="121"/>
<source>Quote whole text</source>
- <translation type="finished">Cita todo el texto</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="124"/>
<source>Select &amp;All</source>
- <translation type="finished">Seleccionar todo</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="127"/>
<source>Select the whole text</source>
- <translation type="finished">Seleccione todo el texto</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="130"/>
<source>&amp;Find</source>
- <translation type="finished">&amp;Encontrar</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="132"/>
<source>Find a word</source>
- <translation type="finished">Encontrar una palabra</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="135"/>
<source>Remove &amp;spacing</source>
- <translation type="finished">Retirar y espaciar</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="138"/>
<source>Remove double linebreaks, e.g. in pasted text from webmailer</source>
- <translation type="finished">Retire las letras dobles, por ejemplo.En texto pegado desde Webmailer.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="141"/>
<source>Se&amp;ttings</source>
- <translation type="finished">Y tutting</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="142"/>
<source>Open settings dialog</source>
- <translation type="finished">Abrir configuración de diálogo</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="148"/>
<source>&amp;Encrypt</source>
- <translation type="finished">Y cifrar</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="151"/>
<source>Encrypt Message</source>
- <translation type="finished">Cifrar mensaje</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="154"/>
<source>&amp;Encrypt &amp;Sign</source>
- <translation type="finished">&amp; Cifrar y firmar</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="157"/>
<source>Encrypt and Sign Message</source>
- <translation type="finished">Cifrar y firmar mensaje</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="160"/>
<source>&amp;Decrypt</source>
- <translation type="finished">Y descifrar</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="163"/>
<source>Decrypt Message</source>
- <translation type="finished">Mensaje de descifra</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="166"/>
<source>&amp;Decrypt &amp;Verify</source>
- <translation type="finished">Y descifrar y verificar</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="169"/>
<source>Decrypt and Verify Message</source>
- <translation type="finished">Descifrar y verificar el mensaje</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="175"/>
<source>&amp;Encrypt File</source>
- <translation type="finished">Cifrar archivo</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="176"/>
<source>Encrypt File</source>
- <translation type="finished">Cifrar archivo</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="179"/>
<source>&amp;Decrypt File</source>
- <translation type="finished">Archivo de descifrado</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="180"/>
<source>Decrypt File</source>
- <translation type="finished">Archivo de descifrado</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="183"/>
<source>&amp;Sign File</source>
- <translation type="finished">Y firmar archivo</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="184"/>
<source>Sign File</source>
- <translation type="finished">Archivo de firma</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="187"/>
<source>&amp;Verify File</source>
- <translation type="finished">Y verificar el archivo</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="188"/>
<source>Verify File</source>
- <translation type="finished">Verificar archivo</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="192"/>
<source>&amp;Sign</source>
- <translation type="finished">&amp;Firmar</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="195"/>
<source>Sign Message</source>
- <translation type="finished">Mensaje de signo</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="198"/>
<source>&amp;Verify</source>
- <translation type="finished">&amp;Verificar</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="201"/>
<source>Verify Message</source>
- <translation type="finished">Verificar mensaje</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="207"/>
<source>&amp;Editor</source>
- <translation type="unfinished"/>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="209"/>
<source>Import New Key From Editor</source>
- <translation type="finished">Importar nueva clave del editor</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="212"/>
<source>Manage &amp;Keys</source>
- <translation type="finished">Gestión y llaves</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="214"/>
<source>Open Keymanagement</source>
- <translation type="finished">MANIFICACIÓN ABIERTA</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="220"/>
<source>&amp;About</source>
- <translation type="finished">&amp;Acerca de</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="222"/>
- <source>Show the application's About box</source>
- <translation type="finished">Muestra la siguiente aplicación</translation>
+ <source>Show the application&apos;s About box</source>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="228"/>
<source>&amp;Check for Updates</source>
- <translation type="finished">Compruebe las actualizaciones</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="230"/>
<source>Check for updates</source>
- <translation type="finished">Compruebe las actualizaciones</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="233"/>
<source>Open &amp;Wizard</source>
- <translation type="finished">Abierto y asistente</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="234"/>
<source>Open the wizard</source>
- <translation type="finished">Abrir el asistente</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="239"/>
<source>Append Selected Key(s) To Text</source>
- <translation type="finished">Anexar la (s) clave (s) seleccionada (s) al texto</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="240"/>
<source>Append The Selected Keys To Text in Editor</source>
- <translation type="finished">Anexar las teclas seleccionadas al texto en el editor</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="243"/>
<source>Copy Email</source>
- <translation type="finished">Copiar el correo electrónico</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="244"/>
<source>Copy selected Email to clipboard</source>
- <translation type="finished">Copia el correo electrónico seleccionado al portapapeles.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="248"/>
<source>Show Key Details</source>
- <translation type="finished">Mostrar detalles clave</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="249"/>
<source>Show Details for this Key</source>
- <translation type="finished">Mostrar detalles para esta clave</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="252"/>
<source>Refresh Key From Key Server</source>
- <translation type="finished">Actualizar la llave del servidor clave</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="253"/>
<source>Refresh key from default key server</source>
- <translation type="finished">Actualizar la tecla del servidor de clave predeterminado</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="256"/>
<source>Upload Public Key(s) To Server</source>
- <translation type="finished">Cargar la (s) clave pública al servidor</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="257"/>
<source>Upload The Selected Public Keys To Server</source>
- <translation type="finished">Sube las claves públicas seleccionadas para el servidor</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="272"/>
<source>Remove PGP Header</source>
- <translation type="finished">Retire el encabezado PGP</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="275"/>
<source>Add PGP Header</source>
- <translation type="finished">Añadir PGP Encabezado</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="280"/>
<source>&amp;File</source>
- <translation type="finished">&amp;Archivo</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="293"/>
<source>&amp;Edit</source>
- <translation type="finished">&amp;Editar</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="311"/>
<source>&amp;File...</source>
- <translation type="finished">&amp;Archivo...</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="317"/>
<source>&amp;Crypt</source>
- <translation type="finished">&amp;Cripta</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="328"/>
<source>&amp;Keys</source>
- <translation type="finished">&amp;Llaves</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="329"/>
<source>&amp;Import Key</source>
- <translation type="finished">E importar clave</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="338"/>
<source>&amp;Steganography</source>
- <translation type="finished">Steganography</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="347"/>
<source>&amp;View</source>
- <translation type="finished">&amp;Vista</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="349"/>
<source>&amp;Help</source>
- <translation type="finished">&amp;Ayudar</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="358"/>
<source>File</source>
- <translation type="finished">Archivo</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="366"/>
<source>Crypt</source>
- <translation type="finished">Cripta</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="376"/>
<source>Key</source>
- <translation type="finished">Clave</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="381"/>
<source>Edit</source>
- <translation type="finished">Editar</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="388"/>
<source>Special Edit</source>
- <translation type="finished">Edición especial</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="400"/>
<source>Import key from...</source>
- <translation type="finished">Clave de importación de ...</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="401"/>
<source>Import key</source>
- <translation type="finished">Tecla de importación</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="409"/>
<source>Browser to view and operate file</source>
- <translation type="finished">Navegador para ver y operar el archivo</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="410"/>
<source>Browser</source>
- <translation type="unfinished"/>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="428"/>
<source>Ready</source>
- <translation type="finished">Listo</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="435"/>
<source>Key ToolBox</source>
- <translation type="finished">Caja de herramientas clave</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="443"/>
<source>Information Board</source>
- <translation type="finished">Tarjeta de la información</translation>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PubkeyGetter</name>
+ <message>
+ <location filename="../../src/server/api/PubkeyGetter.cpp" line="66"/>
+ <location filename="../../src/server/api/PubkeyGetter.cpp" line="90"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/server/api/PubkeyGetter.cpp" line="67"/>
+ <location filename="../../src/server/api/PubkeyGetter.cpp" line="91"/>
+ <source>The communication content with the server does not meet the requirements</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PubkeyUploader</name>
+ <message>
+ <location filename="../../src/server/api/PubkeyUploader.cpp" line="95"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/server/api/PubkeyUploader.cpp" line="96"/>
+ <source>The communication content with the server does not meet the requirements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/server/api/PubkeyUploader.cpp" line="103"/>
+ <source>Warning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/server/api/PubkeyUploader.cpp" line="104"/>
+ <source>Partial failure of automatic pubkey exchange</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
<name>QApplication</name>
<message>
- <location filename="../../src/gpg/result_analyse/DecryptResultAnalyse.cpp" line="42"/>
- <source>&gt;Recipient: </source>
- <translation type="finished">&gt; Recipiente:</translation>
+ <location filename="../../src/gpg/result_analyse/DecryptResultAnalyse.cpp" line="66"/>
+ <source> {&gt;} Recipient: </source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="35"/>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="61"/>
<source>One or More Bad Signatures.</source>
- <translation type="finished">Una o más firmas malas.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="40"/>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="66"/>
<source>A </source>
- <translation type="unfinished"/>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="42"/>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="68"/>
<source>Good </source>
- <translation type="finished">Bien</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="45"/>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="71"/>
<source>Bad </source>
- <translation type="unfinished"/>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="48"/>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="74"/>
<source>Expired </source>
- <translation type="unfinished"/>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="51"/>
- <source>Missing Key's </source>
- <translation type="finished">Llaves perdidas</translation>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="77"/>
+ <source>Missing Key&apos;s </source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="54"/>
- <source>Revoked Key's </source>
- <translation type="finished">Clave revocada</translation>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="80"/>
+ <source>Revoked Key&apos;s </source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="57"/>
- <source>Expired Key's </source>
- <translation type="finished">Key caducado</translation>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="83"/>
+ <source>Expired Key&apos;s </source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="60"/>
- <source>Missing CRL's </source>
- <translation type="finished">Falta CRL</translation>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="86"/>
+ <source>Missing CRL&apos;s </source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="64"/>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="90"/>
<source>Signature Fully Valid.</source>
- <translation type="finished">Firma totalmente válida.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="66"/>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="92"/>
<source>Signature NOT Fully Valid.</source>
- <translation type="finished">Firma no completamente válida.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="74"/>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="100"/>
<source>Key is NOT present with ID 0x</source>
- <translation type="finished">La llave no está presente con ID 0x</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="81"/>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="107"/>
<source>A signature could NOT be verified due to a Missing Key
</source>
- <translation type="finished">No se pudo verificar una firma debido a una llave faltante.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="85"/>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="111"/>
<source>A signature is valid but the key used to verify the signature has been revoked
</source>
- <translation type="finished">Una firma es válida, pero la clave utilizada para verificar la firma ha sido revocada</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="93"/>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="119"/>
<source>A signature is valid but expired
</source>
- <translation type="finished">Una firma es válida pero caducada.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="100"/>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="126"/>
<source>A signature is valid but the key used to verify the signature has expired.
</source>
- <translation type="finished">Una firma es válida, pero la clave utilizada para verificar la firma ha caducado.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="107"/>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="133"/>
<source>There was some other error which prevented the signature verification.
</source>
- <translation type="finished">Hubo algún otro error que impidió la verificación de la firma.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="113"/>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="139"/>
<source>Error for key with fingerprint </source>
- <translation type="finished">Error a la llave con la huella digital</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="128"/>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="152"/>
<source>Signed By: </source>
- <translation type="finished">Firmado por:</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -2907,22 +3153,22 @@
<message>
<location filename="../../src/ui/QuitDialog.cpp" line="29"/>
<source>Unsaved Files</source>
- <translation type="finished">Archivos no guardados</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/QuitDialog.cpp" line="77"/>
<source>%1 files contain unsaved information.&lt;br/&gt;Save the changes before closing?</source>
- <translation type="finished">% 1 Los archivos contienen información no guardada. &lt;br/&gt; ¡Guarda los cambios antes de cerrar?</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/QuitDialog.cpp" line="88"/>
<source>Check the files you want to save:</source>
- <translation type="finished">Compruebe los archivos que desea guardar:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/QuitDialog.cpp" line="89"/>
- <source>&lt;b&gt;Note:&lt;/b&gt; If you don't save these files, all changes are lost.&lt;br/&gt;</source>
- <translation type="finished">&lt;b&gt; Nota: &lt;/ b&gt; Si no guarda estos archivos, todos los cambios se pierden. &lt;br/&gt;</translation>
+ <source>&lt;b&gt;Note:&lt;/b&gt; If you don&apos;t save these files, all changes are lost.&lt;br/&gt;</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -2930,264 +3176,360 @@
<message>
<location filename="../../src/ui/SendMailDialog.cpp" line="35"/>
<source>Incomplete configuration</source>
- <translation type="finished">Configuración incompleta</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/SendMailDialog.cpp" line="36"/>
<source>The SMTP address is empty, please go to the setting interface to complete the configuration.</source>
- <translation type="finished">La dirección SMTP está vacía, vaya a la interfaz de configuración para completar la configuración.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/SendMailDialog.cpp" line="86"/>
<source> Recipient cannot be empty
</source>
- <translation type="finished">El destinatario no puede estar vacío</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/SendMailDialog.cpp" line="91"/>
- <source> One or more Recipient's Email Address is invalid
+ <source> One or more Recipient&apos;s Email Address is invalid
</source>
- <translation type="finished">Una o más dirección de correo electrónico del destinatario no es válida</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/SendMailDialog.cpp" line="97"/>
<source> Sender cannot be empty
</source>
- <translation type="finished">El remitente no puede estar vacío</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/SendMailDialog.cpp" line="99"/>
- <source> Sender's Email Address is invalid
+ <source> Sender&apos;s Email Address is invalid
</source>
- <translation type="finished">La dirección de correo electrónico del remitente no es válida</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/SendMailDialog.cpp" line="155"/>
<location filename="../../src/ui/SendMailDialog.cpp" line="160"/>
<location filename="../../src/ui/SendMailDialog.cpp" line="165"/>
<source>Fail</source>
- <translation type="finished">Fallar</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/SendMailDialog.cpp" line="155"/>
<source>Fail to Connect SMTP Server</source>
- <translation type="finished">Falla en conectar el servidor SMTP</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/SendMailDialog.cpp" line="160"/>
<source>Fail to Login into SMTP Server</source>
- <translation type="finished">No iniciar sesión en el servidor SMTP</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/SendMailDialog.cpp" line="165"/>
<source>Fail to Send Mail to SMTP Server</source>
- <translation type="finished">No enviar correo al servidor SMTP</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/SendMailDialog.cpp" line="171"/>
<source>Success</source>
- <translation type="finished">Éxito</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/SendMailDialog.cpp" line="171"/>
<source>Succeed in Sending Mail to SMTP Server</source>
- <translation type="finished">Tener éxito en enviar correo al servidor SMTP</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SendMailTab</name>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="289"/>
+ <location filename="../../src/ui/settings/SettingsSendMail.cpp" line="33"/>
<source>Enable</source>
- <translation type="finished">Permitir</translation>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/settings/SettingsSendMail.cpp" line="51"/>
+ <source>Check Connection</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="311"/>
+ <location filename="../../src/ui/settings/SettingsSendMail.cpp" line="53"/>
+ <source>General</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/settings/SettingsSendMail.cpp" line="54"/>
+ <source>Connection</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/settings/SettingsSendMail.cpp" line="55"/>
+ <source>Preference</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/settings/SettingsSendMail.cpp" line="61"/>
<source>SMTP Address</source>
- <translation type="finished">Dirección SMTP</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="313"/>
+ <location filename="../../src/ui/settings/SettingsSendMail.cpp" line="63"/>
<source>Username</source>
- <translation type="finished">Nombre de usuario</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="315"/>
+ <location filename="../../src/ui/settings/SettingsSendMail.cpp" line="65"/>
<source>Password</source>
- <translation type="finished">Contraseña</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="317"/>
+ <location filename="../../src/ui/settings/SettingsSendMail.cpp" line="67"/>
<source>Port</source>
- <translation type="finished">Puerto</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="319"/>
+ <location filename="../../src/ui/settings/SettingsSendMail.cpp" line="69"/>
<source>Connection Security</source>
- <translation type="finished">Seguridad de la conexión</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="322"/>
+ <location filename="../../src/ui/settings/SettingsSendMail.cpp" line="75"/>
<source>Default Sender</source>
- <translation type="finished">Remitente predeterminado</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="404"/>
- <location filename="../../src/ui/SettingsDialog.cpp" line="408"/>
+ <location filename="../../src/ui/settings/SettingsSendMail.cpp" line="161"/>
+ <location filename="../../src/ui/settings/SettingsSendMail.cpp" line="165"/>
<source>Fail</source>
- <translation type="finished">Fallar</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="404"/>
+ <location filename="../../src/ui/settings/SettingsSendMail.cpp" line="161"/>
<source>Fail to Connect SMTP Server</source>
- <translation type="finished">Falla en conectar el servidor SMTP</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="408"/>
+ <location filename="../../src/ui/settings/SettingsSendMail.cpp" line="165"/>
<source>Fail to Login</source>
- <translation type="finished">Falla en iniciar sesión</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="413"/>
+ <location filename="../../src/ui/settings/SettingsSendMail.cpp" line="170"/>
<source>Success</source>
- <translation type="finished">Éxito</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="413"/>
+ <location filename="../../src/ui/settings/SettingsSendMail.cpp" line="170"/>
<source>Succeed in connecting and login</source>
- <translation type="finished">Tener éxito en la conexión e inicio de sesión</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SettingsDialog</name>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="40"/>
+ <location filename="../../src/ui/settings/SettingsDialog.cpp" line="39"/>
<source>General</source>
- <translation type="finished">General</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="41"/>
+ <location filename="../../src/ui/settings/SettingsDialog.cpp" line="40"/>
<source>Appearance</source>
- <translation type="finished">Apariencia</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="42"/>
+ <location filename="../../src/ui/settings/SettingsDialog.cpp" line="41"/>
<source>Send Mail</source>
- <translation type="finished">Enviar correo</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="43"/>
+ <location filename="../../src/ui/settings/SettingsDialog.cpp" line="42"/>
<source>Key Server</source>
- <translation type="finished">Servidor clave</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="45"/>
+ <location filename="../../src/ui/settings/SettingsDialog.cpp" line="44"/>
<source>Advanced</source>
- <translation type="unfinished"/>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="58"/>
+ <location filename="../../src/ui/settings/SettingsDialog.cpp" line="59"/>
<source>Settings</source>
- <translation type="finished">Ajustes</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="103"/>
+ <location filename="../../src/ui/settings/SettingsDialog.cpp" line="105"/>
<source>System Default</source>
- <translation type="finished">Sistema por defecto</translation>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>SignResultAnalyse</name>
+ <message>
+ <location filename="../../src/gpg/result_analyse/SignResultAnalyse.cpp" line="29"/>
+ <source>[#] Sign Operation </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/SignResultAnalyse.cpp" line="32"/>
+ <source>[Success]</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/SignResultAnalyse.cpp" line="34"/>
+ <source>[Failed] </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/SignResultAnalyse.cpp" line="43"/>
+ <source>[&gt;] New Signature: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/SignResultAnalyse.cpp" line="47"/>
+ <source> Sign Mode: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/SignResultAnalyse.cpp" line="49"/>
+ <source>Normal</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/SignResultAnalyse.cpp" line="51"/>
+ <source>Clear</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/SignResultAnalyse.cpp" line="53"/>
+ <source>Detach</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/SignResultAnalyse.cpp" line="59"/>
+ <location filename="../../src/gpg/result_analyse/SignResultAnalyse.cpp" line="61"/>
+ <source> Signer: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/SignResultAnalyse.cpp" line="61"/>
+ <source>&lt;unknown&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/SignResultAnalyse.cpp" line="63"/>
+ <source> Public Key Algo: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/SignResultAnalyse.cpp" line="64"/>
+ <source> Hash Algo: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/SignResultAnalyse.cpp" line="65"/>
+ <source> Date &amp; Time: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/SignResultAnalyse.cpp" line="75"/>
+ <source>Invalid Signers: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/SignResultAnalyse.cpp" line="79"/>
+ <source>[&gt;] Signer: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/SignResultAnalyse.cpp" line="80"/>
+ <source> Fingerprint: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/SignResultAnalyse.cpp" line="81"/>
+ <source> Reason: </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>SignersPicker</name>
+ <message>
+ <location filename="../../src/ui/widgets/SignersPicker.cpp" line="28"/>
+ <source>Confirm</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SubkeyGenerateDialog</name>
<message>
- <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="46"/>
+ <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="47"/>
<source>Generate New Subkey</source>
- <translation type="finished">Generar nueva subclave</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="61"/>
+ <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="62"/>
<source>Encryption</source>
- <translation type="unfinished"/>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="64"/>
+ <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="65"/>
<source>Signing</source>
- <translation type="finished">Firma</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="67"/>
+ <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="68"/>
<source>Certification</source>
- <translation type="finished">Certificación</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="70"/>
+ <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="71"/>
<source>Authentication</source>
- <translation type="finished">Autenticación</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="114"/>
+ <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="115"/>
<source>Expiration Date:</source>
- <translation type="finished">Fecha de caducidad:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="115"/>
+ <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="116"/>
<source>Never Expire</source>
- <translation type="finished">Nunca expira</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="116"/>
+ <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="117"/>
<source>KeySize (in Bit):</source>
- <translation type="finished">Keysize (en bit):</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="117"/>
+ <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="118"/>
<source>Key Type:</source>
- <translation type="finished">Tipo de llave:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="126"/>
+ <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="127"/>
<source>Basic Information</source>
- <translation type="finished">Información básica</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="214"/>
+ <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="215"/>
<source> Expiration time no more than 2 years. </source>
- <translation type="finished">Tiempo de vencimiento No más de 2 años.</translation>
- </message>
- <message>
- <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="235"/>
- <source>Generating Subkey...</source>
- <translation type="finished">Generando Subkey ...</translation>
- </message>
- <message>
- <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="238"/>
- <source>Collecting random data for subkey generation.
- This may take a while.
- To speed up the process use your computer
- (e.g. browse the net, listen to music,...)</source>
- <translation type="finished">Recogiendo datos aleatorios para la generación de suba.
- Esto puede tardar un rato.
- Para acelerar el proceso, use su computadora.
- (Por ejemplo, navega por la red, escucha música, ...)</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="309"/>
+ <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="244"/>
<source>Success</source>
- <translation type="finished">Éxito</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="309"/>
+ <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="244"/>
<source>The new subkey has been generated.</source>
- <translation type="finished">La nueva subclave ha sido generada.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="311"/>
+ <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="247"/>
<source>Failure</source>
- <translation type="finished">Falla</translation>
- </message>
- <message>
- <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="311"/>
- <source>An error occurred during subkey generation.</source>
- <translation type="finished">Se produjo un error durante la generación de sujetas.</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -3195,13 +3537,13 @@
<message>
<location filename="../../src/ui/widgets/TextEdit.cpp" line="53"/>
<source>untitled</source>
- <translation type="unfinished"/>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/TextEdit.cpp" line="120"/>
<location filename="../../src/ui/widgets/TextEdit.cpp" line="200"/>
<source>Warning</source>
- <translation type="finished">Advertencia</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/TextEdit.cpp" line="121"/>
@@ -3209,84 +3551,95 @@
<location filename="../../src/ui/widgets/TextEdit.cpp" line="482"/>
<source>Cannot read file %1:
%2.</source>
- <translation type="finished">No se puede leer el archivo% 1:
-% 2.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/TextEdit.cpp" line="175"/>
<source>Open file</source>
- <translation type="finished">Abrir documento</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/TextEdit.cpp" line="251"/>
<source>File</source>
- <translation type="finished">Archivo</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/TextEdit.cpp" line="252"/>
<source>Cannot write file %1:
%2.</source>
- <translation type="finished">No se puede escribir archivo% 1:
-% 2.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/TextEdit.cpp" line="270"/>
<source>Save file</source>
- <translation type="finished">Guardar el archivo</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/TextEdit.cpp" line="333"/>
<source>Unsaved document</source>
- <translation type="finished">Documento no guardado</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/TextEdit.cpp" line="334"/>
<source>The document &quot;%1&quot; has been modified. Do you want to save your changes?&lt;br/&gt;</source>
- <translation type="finished">El documento &quot;% 1&quot; ha sido modificado.¿Quieres guardar tus cambios? &lt;br/&gt;</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/TextEdit.cpp" line="337"/>
- <source>&lt;b&gt;Note:&lt;/b&gt; If you don't save these files, all changes are lost.&lt;br/&gt;</source>
- <translation type="finished">&lt;b&gt; Nota: &lt;/ b&gt; Si no guarda estos archivos, todos los cambios se pierden. &lt;br/&gt;</translation>
+ <source>&lt;b&gt;Note:&lt;/b&gt; If you don&apos;t save these files, all changes are lost.&lt;br/&gt;</source>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/TextEdit.cpp" line="481"/>
<source>Application</source>
- <translation type="finished">Solicitud</translation>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>UnknownSignersChecker</name>
+ <message>
+ <location filename="../../src/advance/UnknownSignersChecker.cpp" line="69"/>
+ <source>Warning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/advance/UnknownSignersChecker.cpp" line="70"/>
+ <source>Automatic public key exchange failed.</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
<name>UpdateTab</name>
<message>
- <location filename="../../src/ui/help/AboutDialog.cpp" line="127"/>
+ <location filename="../../src/ui/help/AboutDialog.cpp" line="129"/>
<source>It is recommended that you always check the version of GpgFrontend and upgrade to the latest version.</source>
- <translation type="finished">Se recomienda que siempre revise la versión de GPGFRontend y actualice a la última versión.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/help/AboutDialog.cpp" line="129"/>
+ <location filename="../../src/ui/help/AboutDialog.cpp" line="131"/>
<source>New versions not only represent new features, but also often represent functional and security fixes.</source>
- <translation type="finished">Las nuevas versiones no solo representan nuevas características, sino que también representan correcciones funcionales y de seguridad.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/help/AboutDialog.cpp" line="133"/>
+ <location filename="../../src/ui/help/AboutDialog.cpp" line="135"/>
<source>Current Version: </source>
- <translation type="finished">Versión actual:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/help/AboutDialog.cpp" line="141"/>
+ <location filename="../../src/ui/help/AboutDialog.cpp" line="143"/>
<source>The current version is inconsistent with the latest version on github.</source>
- <translation type="finished">La versión actual es inconsistente con la última versión en GitHub.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/help/AboutDialog.cpp" line="143"/>
+ <location filename="../../src/ui/help/AboutDialog.cpp" line="145"/>
<source>Please click &lt;a href=&quot;https://github.com/saturneric/GpgFrontend/releases&quot;&gt;here&lt;/a&gt; to download the latest version.</source>
- <translation type="finished">Haga clic en &lt;a href=&quot;https://github.com/saturnic/gpgfrontend/releseses&quot;&gt; aquí &lt;/a&gt; para descargar la última versión.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/help/AboutDialog.cpp" line="187"/>
- <location filename="../../src/ui/help/AboutDialog.cpp" line="209"/>
+ <location filename="../../src/ui/help/AboutDialog.cpp" line="199"/>
+ <location filename="../../src/ui/help/AboutDialog.cpp" line="214"/>
<source>Latest Version From Github: </source>
- <translation type="finished">Última versión de GitHub:</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -3294,32 +3647,32 @@
<message>
<location filename="../../src/ui/VerifyDetailsDialog.cpp" line="32"/>
<source>Signature Details</source>
- <translation type="finished">Detalles de la firma</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/VerifyDetailsDialog.cpp" line="53"/>
<source>Status: </source>
- <translation type="finished">Estado:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/VerifyDetailsDialog.cpp" line="56"/>
<source>No valid input found</source>
- <translation type="finished">No se ha encontrado ninguna entrada válida</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/VerifyDetailsDialog.cpp" line="67"/>
<source>Error Validating signature</source>
- <translation type="finished">Error al validar la firma</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/VerifyDetailsDialog.cpp" line="70"/>
<source>File was signed on %1 &lt;br/&gt; It Contains:&lt;br/&gt;&lt;br/&gt;</source>
- <translation type="finished">El archivo se firmó en% 1 &lt;br/&gt;, contiene: &lt;br/&gt; &lt;br/&gt;</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/VerifyDetailsDialog.cpp" line="72"/>
<source>Signed on %1 &lt;br/&gt; It Contains:&lt;br /&gt;&lt;br/&gt;</source>
- <translation type="finished">Firmado en% 1 &lt;br/&gt; contiene: &lt;br /&gt; &lt;br/&gt;</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -3327,22 +3680,22 @@
<message>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="36"/>
<source>Import from keyserver</source>
- <translation type="finished">Import desde Keyserver</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="39"/>
<source>Key not present with id 0x</source>
- <translation type="finished">Llave no presente con id 0x</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="43"/>
<source>Status:</source>
- <translation type="finished">Estado:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="45"/>
<source>Key not present in keylist</source>
- <translation type="finished">Llave no presente en el keylist</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="58"/>
@@ -3352,7 +3705,7 @@
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="115"/>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="129"/>
<source>Key Information is NOT Available</source>
- <translation type="finished">La información clave no está disponible</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="60"/>
@@ -3362,137 +3715,134 @@
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="117"/>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="131"/>
<source>Fingerprint: </source>
- <translation type="finished">Huella dactilar:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="67"/>
<source>Status: Cert Revoked</source>
- <translation type="finished">Estado: CERT REVOCED</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="81"/>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="95"/>
<source>Status: Signature Expired</source>
- <translation type="finished">Estado: Firma expiró</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="96"/>
<source>Status: Key Expired</source>
- <translation type="finished">Estado: clave expirada</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="110"/>
<source>Status: General Error</source>
- <translation type="finished">Estado: Error general</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="124"/>
<source>Status: Unknown Error</source>
- <translation type="finished">Estado: error desconocido</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="159"/>
<source>Signer Name:</source>
- <translation type="finished">Nombre del firmante:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="160"/>
<source>Signer Email:</source>
- <translation type="finished">Correo electrónico del firmante:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="161"/>
- <source>Key's Fingerprint:</source>
- <translation type="finished">Huella digital de la llave:</translation>
+ <source>Key&apos;s Fingerprint:</source>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="162"/>
<source>Valid:</source>
- <translation type="unfinished"/>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="163"/>
<source>Flags:</source>
- <translation type="finished">Banderas:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="171"/>
<source>Fully Valid</source>
- <translation type="finished">Completamente válido</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="173"/>
<source>NOT Fully Valid</source>
- <translation type="finished">No completamente válido</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="180"/>
<source>Good </source>
- <translation type="finished">Bien</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="183"/>
<source>Bad </source>
- <translation type="unfinished"/>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="186"/>
<source>Expired </source>
- <translation type="unfinished"/>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="189"/>
<source>Missing Key </source>
- <translation type="finished">Llave faltante</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="192"/>
<source>Revoked Key </source>
- <translation type="finished">Clave revocada</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="195"/>
<source>Expired Key </source>
- <translation type="finished">Clave caducada</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="198"/>
<source>Missing CRL </source>
- <translation type="finished">Falta CRL</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
- <name>Wizard</name>
+ <name>VerifyResultAnalyse</name>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="46"/>
- <source>First Start Wizard</source>
- <translation type="finished">Asistente de primer inicio</translation>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="31"/>
+ <source>[#] Verify Operation </source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="76"/>
- <source>Import Error</source>
- <translation type="finished">Error de importación</translation>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="34"/>
+ <source>[Success]</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="76"/>
- <source>Couldn't locate any keyring file in %1</source>
- <translation type="finished">No se pudo localizar ningún archivo de llaves en% 1</translation>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="36"/>
+ <source>[Failed] </source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="84"/>
- <location filename="../../src/ui/Wizard.cpp" line="95"/>
- <source>Import error</source>
- <translation type="finished">Error de importación</translation>
- </message>
- <message>
- <location filename="../../src/ui/Wizard.cpp" line="85"/>
- <source>Couldn't open private keyringfile: %1</source>
- <translation type="finished">No se pudo abrir el archivo de llavero privado:% 1</translation>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="158"/>
+ <source>&lt;Unknown&gt;</source>
+ <translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>Wizard</name>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="96"/>
- <source>Couldn't open public keyringfile: %1</source>
- <translation type="finished">No se pudo abrir el archivo de llavero público:% 1</translation>
+ <location filename="../../src/ui/Wizard.cpp" line="40"/>
+ <source>First Start Wizard</source>
+ <translation type="unfinished"></translation>
</message>
</context>
-</TS> \ No newline at end of file
+</TS>
diff --git a/resource/ts/gpgfrontend_fr.ts b/resource/ts/gpgfrontend_fr.ts
index fe49011a..8522c9be 100644
--- a/resource/ts/gpgfrontend_fr.ts
+++ b/resource/ts/gpgfrontend_fr.ts
@@ -6,7 +6,7 @@
<message>
<location filename="../../src/ui/help/AboutDialog.cpp" line="35"/>
<source>About </source>
- <translation>À propos</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/help/AboutDialog.cpp" line="42"/>
@@ -21,180 +21,291 @@
<message>
<location filename="../../src/ui/help/AboutDialog.cpp" line="44"/>
<source>Update</source>
- <translation>Mettre à jour</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
<name>AdvancedTab</name>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="679"/>
- <source>Show Steganography Options [Advanced]</source>
- <translation>Afficher les options de la stéganographie [avancée]</translation>
+ <location filename="../../src/ui/settings/SettingsAdvanced.cpp" line="34"/>
+ <source>Show Steganography Options</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="681"/>
+ <location filename="../../src/ui/settings/SettingsAdvanced.cpp" line="36"/>
<source>Show Steganographic Options.</source>
- <translation>Afficher les options stéganographiques.</translation>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/settings/SettingsAdvanced.cpp" line="40"/>
+ <source>Pubkey Exchange</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/settings/SettingsAdvanced.cpp" line="42"/>
+ <source>Auto Pubkey Exchange</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
<name>AppearanceTab</name>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="444"/>
+ <location filename="../../src/ui/settings/SettingsAppearance.cpp" line="34"/>
<source>Iconsize</source>
- <translation>Isoniser.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="446"/>
+ <location filename="../../src/ui/settings/SettingsAppearance.cpp" line="36"/>
<source>small</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="447"/>
+ <location filename="../../src/ui/settings/SettingsAppearance.cpp" line="37"/>
<source>medium</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="448"/>
+ <location filename="../../src/ui/settings/SettingsAppearance.cpp" line="38"/>
<source>large</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="464"/>
+ <location filename="../../src/ui/settings/SettingsAppearance.cpp" line="54"/>
<source>Iconstyle</source>
- <translation>Iconstyle</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="466"/>
+ <location filename="../../src/ui/settings/SettingsAppearance.cpp" line="56"/>
<source>just text</source>
- <translation>juste du texte</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="467"/>
+ <location filename="../../src/ui/settings/SettingsAppearance.cpp" line="57"/>
<source>just icons</source>
- <translation>juste des icônes</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="468"/>
+ <location filename="../../src/ui/settings/SettingsAppearance.cpp" line="58"/>
<source>text and icons</source>
- <translation>Texte et icônes</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="484"/>
+ <location filename="../../src/ui/settings/SettingsAppearance.cpp" line="74"/>
<source>Windowstate</source>
- <translation>Windowstate</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="487"/>
+ <location filename="../../src/ui/settings/SettingsAppearance.cpp" line="77"/>
<source>Save window size and position on exit.</source>
- <translation>Enregistrer la taille de la fenêtre et la position à la sortie.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="495"/>
+ <location filename="../../src/ui/settings/SettingsAppearance.cpp" line="85"/>
<source>Information Board</source>
- <translation>Tableau d&apos;information</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="501"/>
+ <location filename="../../src/ui/settings/SettingsAppearance.cpp" line="91"/>
<source> Front Size</source>
- <translation>Taille avant</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ChoosePage</name>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="165"/>
+ <location filename="../../src/ui/Wizard.cpp" line="121"/>
<source>Choose your action...</source>
- <translation>Choisissez votre action ...</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="166"/>
+ <location filename="../../src/ui/Wizard.cpp" line="122"/>
<source>...by clicking on the appropriate link.</source>
- <translation>... En cliquant sur le lien approprié.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="168"/>
+ <location filename="../../src/ui/Wizard.cpp" line="124"/>
<source>If you have never used GPGFrontend before and also don&apos;t own a gpg key yet you may possibly want to read how to</source>
- <translation>Si vous n&apos;avez jamais utilisé GPGFRontend avant et que vous ne possédez pas encore une clé GPG, vous pouvez éventuellement vouloir lire comment</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="170"/>
+ <location filename="../../src/ui/Wizard.cpp" line="127"/>
<source>Generate Key</source>
- <translation>Générer une clé</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="176"/>
+ <location filename="../../src/ui/Wizard.cpp" line="134"/>
<source>If you want to learn how to encrypt, decrypt, sign and verify text, you can read </source>
- <translation>Si vous souhaitez apprendre à crypter, déchiffrer, signer et vérifier le texte, vous pouvez lire</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="178"/>
+ <location filename="../../src/ui/Wizard.cpp" line="136"/>
<source>Encrypt &amp; Decrypt Text</source>
- <translation>Texte de chiffrement et de déchiffrement</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="178"/>
- <location filename="../../src/ui/Wizard.cpp" line="190"/>
+ <location filename="../../src/ui/Wizard.cpp" line="136"/>
+ <location filename="../../src/ui/Wizard.cpp" line="149"/>
<source>or</source>
- <translation>ou alors</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="180"/>
+ <location filename="../../src/ui/Wizard.cpp" line="138"/>
<source>Sign &amp; Verify Text</source>
- <translation>Signer et vérifier le texte</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="188"/>
+ <location filename="../../src/ui/Wizard.cpp" line="146"/>
<source>If you want to operate file, you can read </source>
- <translation>Si vous souhaitez utiliser un fichier, vous pouvez lire</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="190"/>
+ <location filename="../../src/ui/Wizard.cpp" line="149"/>
<source>Encrypt &amp; Sign File</source>
- <translation>Crypypt et fichier de signe</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="192"/>
+ <location filename="../../src/ui/Wizard.cpp" line="152"/>
<source>Sign &amp; Verify File</source>
- <translation>Signez et vérifiez le fichier</translation>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ComUtils</name>
+ <message>
+ <location filename="../../src/server/ComUtils.cpp" line="35"/>
+ <location filename="../../src/server/ComUtils.cpp" line="55"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/server/ComUtils.cpp" line="35"/>
+ <source>Nothing Reply. Please check the Internet connection.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/server/ComUtils.cpp" line="55"/>
+ <source>Unknown Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/server/ComUtils.cpp" line="75"/>
+ <location filename="../../src/server/ComUtils.cpp" line="90"/>
+ <source>Network Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/server/ComUtils.cpp" line="75"/>
+ <source>Outdated Reply</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/server/ComUtils.cpp" line="87"/>
+ <source>Unknown Reason</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/server/ComUtils.cpp" line="90"/>
+ <source>Unknown Reply Format</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ConclusionPage</name>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="407"/>
+ <location filename="../../src/ui/Wizard.cpp" line="224"/>
<source>Ready.</source>
- <translation>Prêt.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="408"/>
+ <location filename="../../src/ui/Wizard.cpp" line="225"/>
<source>Have fun with GPGFrontend!</source>
- <translation>Amusez-vous avec GPGFrontend!</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="410"/>
+ <location filename="../../src/ui/Wizard.cpp" line="227"/>
<source>You are ready to use GPGFrontend now.&lt;br&gt;&lt;br&gt;</source>
- <translation>Vous êtes prêt à utiliser GPGFronTend maintenant. &lt;br&gt; &lt;br&gt;</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="412"/>
+ <location filename="../../src/ui/Wizard.cpp" line="229"/>
<source>The Online Document</source>
- <translation>Le document en ligne</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="413"/>
+ <location filename="../../src/ui/Wizard.cpp" line="231"/>
<source> will get you started with GPGFrontend. It will open in the main window.&lt;br&gt;</source>
- <translation>vous fera commencer par GPGFronTend.Il s&apos;ouvrira dans la fenêtre principale. &lt;br&gt;</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="420"/>
+ <location filename="../../src/ui/Wizard.cpp" line="238"/>
<source>Open offline help.</source>
- <translation>Aide ouverte hors ligne.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="423"/>
+ <location filename="../../src/ui/Wizard.cpp" line="241"/>
<source>Dont show the wizard again.</source>
- <translation>Ne montrez pas à nouveau l&apos;assistant.</translation>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DecryptResultAnalyse</name>
+ <message>
+ <location filename="../../src/gpg/result_analyse/DecryptResultAnalyse.cpp" line="30"/>
+ <source>[#] Decrypt Operation </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/DecryptResultAnalyse.cpp" line="33"/>
+ <source>[Success]</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/DecryptResultAnalyse.cpp" line="35"/>
+ <source>[Failed] </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/DecryptResultAnalyse.cpp" line="39"/>
+ <source>Unsupported Algo: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/DecryptResultAnalyse.cpp" line="46"/>
+ <source>File Name: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/DecryptResultAnalyse.cpp" line="52"/>
+ <source>Recipient(s): </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/DecryptResultAnalyse.cpp" line="82"/>
+ <source> Keu ID: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/DecryptResultAnalyse.cpp" line="83"/>
+ <source> Public Algo: </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>EncryptResultAnalyse</name>
+ <message>
+ <location filename="../../src/gpg/result_analyse/EncryptResultAnalyse.cpp" line="41"/>
+ <source>Invalid Recipients: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/EncryptResultAnalyse.cpp" line="44"/>
+ <source>Fingerprint: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/EncryptResultAnalyse.cpp" line="45"/>
+ <source>Reason: </source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -202,99 +313,98 @@
<message>
<location filename="../../src/ui/FileEncryptionDialog.cpp" line="32"/>
<source>Decrypt File</source>
- <translation>Dossier de déchiffrement</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/FileEncryptionDialog.cpp" line="34"/>
<source>Encrypt File</source>
- <translation>Chiffrer</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/FileEncryptionDialog.cpp" line="36"/>
<source>Sign File</source>
- <translation>Fichier de signe</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/FileEncryptionDialog.cpp" line="38"/>
<source>Verify File</source>
- <translation>Vérifier le fichier</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/FileEncryptionDialog.cpp" line="47"/>
<source>Input Parameters</source>
- <translation>Paramètres d&apos;entrée</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/FileEncryptionDialog.cpp" line="53"/>
<source>Target File</source>
- <translation>Fichier cible</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/FileEncryptionDialog.cpp" line="59"/>
<source>Output File</source>
- <translation>Fichier de sortie</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/FileEncryptionDialog.cpp" line="75"/>
<source>Signature File(.sig) Path</source>
- <translation>Signature Fichier (.sig) chemin</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/FileEncryptionDialog.cpp" line="134"/>
<location filename="../../src/ui/FileEncryptionDialog.cpp" line="177"/>
<source>Open File</source>
- <translation>Fichier ouvert</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/FileEncryptionDialog.cpp" line="165"/>
<source>Save File</source>
- <translation>Enregistrer le fichier</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/FileEncryptionDialog.cpp" line="194"/>
<location filename="../../src/ui/FileEncryptionDialog.cpp" line="245"/>
<source>Couldn&apos;t open file</source>
- <translation>Impossible d&apos;ouvrir le fichier</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/FileEncryptionDialog.cpp" line="213"/>
<location filename="../../src/ui/FileEncryptionDialog.cpp" line="224"/>
<location filename="../../src/ui/FileEncryptionDialog.cpp" line="235"/>
<source>Error</source>
- <translation>Erreur</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/FileEncryptionDialog.cpp" line="214"/>
<source>Error Occurred During Encryption</source>
- <translation>Une erreur s&apos;est produite lors du cryptage</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/FileEncryptionDialog.cpp" line="225"/>
<source>Error Occurred During Decryption</source>
- <translation>Une erreur s&apos;est produite lors du déchiffrement</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/FileEncryptionDialog.cpp" line="236"/>
<source>Error Occurred During Signature</source>
- <translation>Une erreur s&apos;est produite lors de la signature</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/FileEncryptionDialog.cpp" line="259"/>
<location filename="../../src/ui/FileEncryptionDialog.cpp" line="268"/>
<source>File</source>
- <translation>Déposer</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/FileEncryptionDialog.cpp" line="260"/>
<source>File exists! Do you want to overwrite it?</source>
- <translation>Le fichier existe!Voulez-vous vous écraser?</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/FileEncryptionDialog.cpp" line="269"/>
<source>Cannot write file %1:
%2.</source>
- <translation>Impossible d&apos;écrire le fichier% 1:
-% 2.</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -307,47 +417,47 @@
<message>
<location filename="../../src/ui/widgets/FilePage.cpp" line="163"/>
<source>Delete</source>
- <translation>Effacer</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/FilePage.cpp" line="165"/>
<source>Encrypt and Sign</source>
- <translation>Chiffrer et signer</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/FilePage.cpp" line="167"/>
<source>Decrypt and Verify</source>
- <translation>Déchiffrer et vérifier</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/FilePage.cpp" line="169"/>
<source>Only Sign</source>
- <translation>Seulement signe</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/FilePage.cpp" line="171"/>
<source>Only Verify</source>
- <translation>Vérifiez seulement</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/FilePage.cpp" line="222"/>
<source>Warning</source>
- <translation>Avertissement</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/FilePage.cpp" line="223"/>
<source>Are you sure you want to delete it?</source>
- <translation>Es-tu sûr de vouloir le supprimer?</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/FilePage.cpp" line="233"/>
<source>Error</source>
- <translation>Erreur</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/FilePage.cpp" line="234"/>
<source>Unable to delete the file or folder.</source>
- <translation>Impossible de supprimer le fichier ou le dossier.</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -355,202 +465,179 @@
<message>
<location filename="../../src/ui/FindWidget.cpp" line="38"/>
<source>Find:</source>
- <translation>Trouve:</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
<name>GeneralTab</name>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="137"/>
- <source>Remember Password</source>
- <translation>Se souvenir du mot de passe</translation>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="40"/>
+ <source>GpgFrontend Server</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="140"/>
- <source>Remember password until closing gpg4usb</source>
- <translation>Rappelez-vous le mot de passe jusqu&apos;à la fermeture GPG4USB</translation>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="45"/>
+ <source>Server that provides short key and key exchange services</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="147"/>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="52"/>
<source>Save Checked Keys</source>
- <translation>Sauvegarder les clés cochées</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="150"/>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="55"/>
<source>Save checked private keys on exit and restore them on next start.</source>
- <translation>Enregistrez des clés privées cochées sur sortie et restaurez-les au prochain démarrage.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="159"/>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="64"/>
<source>Confirm drag&apos;n&apos;drop key import</source>
- <translation>Confirmer l&apos;importation principale de Drag&apos;N&apos;Drop</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="162"/>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="67"/>
<source>Import files dropped on the keylist without confirmation.</source>
- <translation>Les fichiers d&apos;importation ont chuté sur la frappe sans confirmation.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="169"/>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="74"/>
<source>Language</source>
- <translation>Langue</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="178"/>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="83"/>
<source>&lt;b&gt;NOTE: &lt;/b&gt; GpgFrontend will restart automatically if you change the language!</source>
- <translation>&lt;B&gt; REMARQUE: &lt;/ B&gt; GPGFRontend redémarrera automatiquement si vous changez la langue!</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="187"/>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="92"/>
<source>Own key</source>
- <translation>Clé propre</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="195"/>
- <source>&lt;none&gt;</source>
- <translation>&lt;aucun&gt;</translation>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="96"/>
+ <source>Get Service Token</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="209"/>
- <source>Key pair for synchronization and identity authentication</source>
- <translation>Paire de clé pour la synchronisation et l&apos;authentification d&apos;identité</translation>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="97"/>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="234"/>
+ <source>No Service Token Found</source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>GpgME::GpgContext</name>
<message>
- <location filename="../../src/gpg/GpgContext.cpp" line="528"/>
- <source>Wrong password</source>
- <translation>Mauvais mot de passe</translation>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="103"/>
+ <source>&lt;none&gt;</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/GpgContext.cpp" line="536"/>
- <source>Enter Password for</source>
- <translation>Entrez le mot de passe pour</translation>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="120"/>
+ <source>Key pair for synchronization and identity authentication</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/GpgContext.cpp" line="540"/>
- <source>Enter Password</source>
- <translation>Entrer le mot de passe</translation>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="252"/>
+ <source>Invalid Operation</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/GpgContext.cpp" line="706"/>
- <source>Key Selection</source>
- <translation>Sélection de clé</translation>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="253"/>
+ <source>Own Key can not be None while getting service token.</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/GpgContext.cpp" line="706"/>
- <source>No Private Key Selected</source>
- <translation>Aucune clé privée sélectionnée</translation>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="265"/>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="336"/>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="353"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/GpgContext.cpp" line="746"/>
- <source>Error in signing:</source>
- <translation>Erreur lors de la signature:</translation>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="266"/>
+ <source>Key Not Exists</source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>GpgPathsTab</name>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="711"/>
- <source>Relative path to keydb</source>
- <translation>Chemin relatif de Keydb</translation>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="337"/>
+ <source>The communication content with the server does not meet the requirements</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="724"/>
- <source>Current keydb path: </source>
- <translation>Chemin de Keydb actuel:</translation>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="350"/>
+ <source>Notice</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="729"/>
- <source>&lt;b&gt;NOTE: &lt;/b&gt; Gpg4usb will restart automatically if you change the keydb path!</source>
- <translation>&lt;B&gt; REMARQUE: &lt;/ B&gt; GPG4USB redémarrera automatiquement si vous modifiez le chemin Keydb!</translation>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="351"/>
+ <source>Succeed in getting service token</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="758"/>
- <source>Choose keydb directory</source>
- <translation>Choisissez le répertoire Keydb</translation>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="353"/>
+ <source>There is a problem with the communication with the server</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
- <name>ImportFromGnupgPage</name>
- <message>
- <location filename="../../src/ui/Wizard.cpp" line="302"/>
- <source>Import keys...</source>
- <translation>Keys d&apos;importation ...</translation>
- </message>
- <message>
- <location filename="../../src/ui/Wizard.cpp" line="303"/>
- <source>...from existing GnuPG installation</source>
- <translation>... de l&apos;installation GNUPG existante</translation>
- </message>
- <message>
- <location filename="../../src/ui/Wizard.cpp" line="305"/>
- <source>You can import keys from a locally installed GnuPG.&lt;br&gt;&lt;br&gt; The location is read from registry in Windows or assumed to be the .gnupg folder in the your home directory in Linux.&lt;br&gt;</source>
- <translation>Vous pouvez importer des clés à partir d&apos;un GNUPG installé localement. &lt;br&gt; &lt;br&gt; &lt;br&gt; L&apos;emplacement est lu depuis Registre sous Windows ou supposé être le dossier .gnupg dans votre annuaire de domicile sous Linux. &lt;br&gt;</translation>
- </message>
- <message>
- <location filename="../../src/ui/Wizard.cpp" line="309"/>
- <source>Import keys from GnuPG</source>
- <translation>Keys d&apos;importation de gnupg</translation>
- </message>
+ <name>GpgME::GpgContext</name>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="323"/>
- <source>Import Error</source>
- <translation>Erreur d&apos;importation</translation>
+ <location filename="../../src/gpg/gpg_context/GpgContext.cpp" line="184"/>
+ <source>Wrong password</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="323"/>
- <source>Couldn&apos;t locate GnuPG home directory</source>
- <translation>Ne pouvait pas localiser le répertoire de base gnupg</translation>
+ <location filename="../../src/gpg/gpg_context/GpgContext.cpp" line="192"/>
+ <source>Enter Password for</source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>ImportFromGpg4usbPage</name>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="225"/>
- <source>Import from...</source>
- <translation>Importer de...</translation>
+ <location filename="../../src/gpg/gpg_context/GpgContext.cpp" line="196"/>
+ <source>Enter Password</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="226"/>
- <source>...existing GPGFrontend</source>
- <translation>... GPGFronTend existant</translation>
+ <location filename="../../src/gpg/gpg_context/GpgContext.cpp" line="258"/>
+ <source>Processing</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="228"/>
- <source>You can import keys and/or settings from existing GPGFrontend. &lt;br&gt;&lt;br&gt;Just check what you want to import, click the import button and choose the directory of your other GPGFrontend in the appearing file dialog.</source>
- <translation>Vous pouvez importer des clés et / ou des paramètres de GPGFronTend existant.&lt;br&gt; &lt;br&gt; Vérifiez simplement ce que vous souhaitez importer, cliquez sur le bouton Importer et choisissez le répertoire de votre autre GPGFronTend dans la boîte de dialogue de fichiers apparaissant.</translation>
+ <location filename="../../src/gpg/gpg_context/GpgContextBasicOpera.cpp" line="164"/>
+ <source>Key Selection</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="235"/>
- <source>Keys</source>
- <translation>Clés</translation>
+ <location filename="../../src/gpg/gpg_context/GpgContextBasicOpera.cpp" line="164"/>
+ <source>No Private Key Selected</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="239"/>
- <source>Configuration</source>
- <translation>Configuration</translation>
+ <location filename="../../src/gpg/gpg_context/GpgContextBasicOpera.cpp" line="195"/>
+ <source>Error in signing:</source>
+ <translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>GpgPathsTab</name>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="241"/>
- <source>Import from GPGFrontend</source>
- <translation>Importer de GPGFrontend</translation>
+ <location filename="../../src/ui/settings/SettingsDialog.cpp" line="139"/>
+ <source>Relative path to keydb</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="256"/>
- <source>Other GPGFrontend directory</source>
- <translation>Autre répertoire GPGFRONTEND</translation>
+ <location filename="../../src/ui/settings/SettingsDialog.cpp" line="152"/>
+ <source>Current keydb path: </source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="275"/>
- <source>Configuration Imported</source>
- <translation>Configuration importée</translation>
+ <location filename="../../src/ui/settings/SettingsDialog.cpp" line="157"/>
+ <source>&lt;b&gt;NOTE: &lt;/b&gt; Gpg4usb will restart automatically if you change the keydb path!</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="276"/>
- <source>Imported Configuration from old GPGFrontend.&lt;br&gt;Will now restart to activate the configuration.</source>
- <translation>Configuration importée d&apos;Old GPGFronTend. &lt;br&gt; va maintenant redémarrer pour activer la configuration.</translation>
+ <location filename="../../src/ui/settings/SettingsDialog.cpp" line="186"/>
+ <source>Choose keydb directory</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -558,78 +645,78 @@
<message>
<location filename="../../src/ui/widgets/InfoBoardWidget.cpp" line="40"/>
<source>Import missing key from Keyserver</source>
- <translation>Importer la clé manquante de Keyserver</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/InfoBoardWidget.cpp" line="57"/>
- <source>Optional Actions Menu</source>
- <translation>Menu Actions optionnelles</translation>
+ <source>Optional Actions</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
<name>InfoTab</name>
<message>
- <location filename="../../src/ui/help/AboutDialog.cpp" line="74"/>
+ <location filename="../../src/ui/help/AboutDialog.cpp" line="76"/>
<source>&lt;br&gt;&lt;center&gt;GPGFrontend is an easy-to-use, compact, cross-platform, &lt;br&gt;and installation-free gpg front-end tool.&lt;br&gt;It visualizes most of the common operations of gpg commands.&lt;br&gt;It&apos;s licensed under the GPL v3&lt;br&gt;&lt;br&gt;&lt;b&gt;Developer:&lt;/b&gt;&lt;br&gt;Saturneric&lt;br&gt;&lt;br&gt;If you have any questions or suggestions, raise an issue&lt;br/&gt;at &lt;a href=&quot;https://github.com/saturneric/GpgFrontend&quot;&gt;GitHub&lt;/a&gt; or send a mail to my mailing list at &lt;a href=&quot;mailto:[email protected]&quot;&gt;[email protected]&lt;/a&gt;.</source>
- <translation>&lt;br&gt; &lt;centre&gt; GPGFronTend est un outil facile à utiliser, compact, plate-forme, &lt;br&gt; et sans installation GPG GPG GPG. Il visualise la plupart des opérations communes des commandes GPG. &lt;br&gt; Il est sous licence sous la GPL V3 &lt;br&gt; &lt;B&gt; Développeur: &lt;/ B&gt; &lt;br&gt; &lt;br&gt; Saturneric &lt;br&gt; &lt;br&gt; Si vous avez des questions ou des suggestions, soulevez un problème &lt;br/&gt; à &lt;Ahref = &quot;https://github.com/saturneric/gpgfrontend&quot;&gt; github &lt;/a&gt; ou envoyer un mail à ma liste de diffusion à &lt;a href=&quot;[email protected]&quot;&gt; [email protected] &lt;/ a&gt;.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/help/AboutDialog.cpp" line="82"/>
+ <location filename="../../src/ui/help/AboutDialog.cpp" line="84"/>
<source>&lt;br&gt;&lt;br&gt; Built with Qt </source>
- <translation>&lt;br&gt; &lt;br&gt; Construit avec QT</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/help/AboutDialog.cpp" line="83"/>
+ <location filename="../../src/ui/help/AboutDialog.cpp" line="85"/>
<source> and GPGME </source>
- <translation>et gpgme</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/help/AboutDialog.cpp" line="84"/>
+ <location filename="../../src/ui/help/AboutDialog.cpp" line="86"/>
<source>&lt;br&gt;Built at </source>
- <translation>&lt;br&gt; Construit à</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
<name>IntroPage</name>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="111"/>
+ <location filename="../../src/ui/Wizard.cpp" line="66"/>
<source>Getting Started...</source>
- <translation>Commencer...</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="112"/>
+ <location filename="../../src/ui/Wizard.cpp" line="67"/>
<source>... with GPGFrontend</source>
- <translation>... avec GPGFrontend</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="114"/>
+ <location filename="../../src/ui/Wizard.cpp" line="69"/>
<source>Welcome to use GPGFrontend for decrypting and signing text or file!</source>
- <translation>Bienvenue à utiliser GPGFronTend pour le déchiffrement et la signature de texte ou de fichier!</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="116"/>
+ <location filename="../../src/ui/Wizard.cpp" line="71"/>
<source>is a Powerful, Easy-to-Use, Compact, Cross-Platform, and Installation-Free OpenPGP Crypto Tool.</source>
- <translation>est une puissante, facile à utiliser, compacte, plate-forme multiplate-forme et sans installation.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="117"/>
+ <location filename="../../src/ui/Wizard.cpp" line="72"/>
<source>For brief information have a look at the</source>
- <translation>Pour de brèves informations, regardez le</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="118"/>
+ <location filename="../../src/ui/Wizard.cpp" line="74"/>
<source>Overview</source>
- <translation>Aperçu</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="119"/>
+ <location filename="../../src/ui/Wizard.cpp" line="75"/>
<source>by clicking the link, the page will open in the web browser</source>
- <translation>En cliquant sur le lien, la page s&apos;ouvrira dans le navigateur Web.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="127"/>
+ <location filename="../../src/ui/Wizard.cpp" line="83"/>
<source>Choose a Language</source>
- <translation>Choisissez une langue</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -637,182 +724,161 @@
<message>
<location filename="../../src/ui/keypair_details/KeyDetailsDialog.cpp" line="31"/>
<source>KeyPair</source>
- <translation>Clavier</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyDetailsDialog.cpp" line="32"/>
<source>UIDs</source>
- <translation>Uids</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyDetailsDialog.cpp" line="33"/>
<source>Subkeys</source>
- <translation>Souske</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyDetailsDialog.cpp" line="40"/>
<source>Key Details</source>
- <translation>Détails clés</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
<name>KeyGenDialog</name>
<message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="32"/>
+ <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="33"/>
<source>Generate Key</source>
- <translation>Générer une clé</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="68"/>
+ <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="69"/>
<source> Name must contain at least five characters.
</source>
- <translation>Le nom doit contenir au moins cinq caractères.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="70"/>
+ <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="71"/>
<source> Please give a email address.
</source>
- <translation>S&apos;il vous plaît donner une adresse email.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="77"/>
+ <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="78"/>
<source> Expiration time no more than 2 years.
</source>
- <translation>Heure d&apos;expiration Pas plus de 2 ans.</translation>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="112"/>
+ <source>Success</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="103"/>
- <source>Generating Key...</source>
- <translation>Clé génératrice ...</translation>
+ <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="112"/>
+ <source>The new key pair has been generated.</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="106"/>
- <source>Collecting random data for key generation.
- This may take a while.
- To speed up the process use your computer
- (e.g. browse the net, listen to music,...)</source>
- <translation>Collecte de données aléatoires pour la génération de clé.
- Cela peut prendre un peu de temps.
- Pour accélérer le processus, utilisez votre ordinateur
- (E.G. Parcourir le Net, écoutez de la musique, ...)</translation>
+ <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="116"/>
+ <source>Failure</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="150"/>
+ <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="145"/>
<source>Key Usage</source>
- <translation>Usage de clé</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="152"/>
+ <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="147"/>
<source>Encryption</source>
- <translation>Chiffrement</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="155"/>
+ <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="150"/>
<source>Signing</source>
- <translation>Signature</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="158"/>
+ <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="153"/>
<source>Certification</source>
- <translation>Certification</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="161"/>
+ <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="156"/>
<source>Authentication</source>
- <translation>Authentification</translation>
- </message>
- <message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="312"/>
- <source>Success</source>
- <translation>Succès</translation>
- </message>
- <message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="312"/>
- <source>The new key pair has been generated.</source>
- <translation>La nouvelle paire de clés a été générée.</translation>
- </message>
- <message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="314"/>
- <source>Failure</source>
- <translation>Échec</translation>
- </message>
- <message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="314"/>
- <source>An error occurred during key generation.</source>
- <translation>Une erreur s&apos;est produite lors de la génération de clé.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="350"/>
+ <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="338"/>
<source>Name:</source>
- <translation>Nom:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="351"/>
+ <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="339"/>
<source>Email Address:</source>
- <translation>Adresse e-mail:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="352"/>
+ <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="340"/>
<source>Comment:</source>
- <translation>Commenter:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="353"/>
+ <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="341"/>
<source>Expiration Date:</source>
- <translation>Date d&apos;expiration:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="354"/>
+ <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="342"/>
<source>Never Expire</source>
- <translation>N&apos;expire jamais</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="355"/>
+ <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="343"/>
<source>KeySize (in Bit):</source>
- <translation>Keysize (dans le bit):</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="356"/>
+ <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="344"/>
<source>Key Type:</source>
- <translation>Type de clé:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="357"/>
+ <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="345"/>
<source>Non Pass Phrase</source>
- <translation>Non Pass Phrase</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="370"/>
+ <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="358"/>
<source>Basic Information</source>
- <translation>Informations de base</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
<name>KeyGenPage</name>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="366"/>
+ <location filename="../../src/ui/Wizard.cpp" line="183"/>
<source>Create a keypair...</source>
- <translation>Créer un keypair ...</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="367"/>
+ <location filename="../../src/ui/Wizard.cpp" line="184"/>
<source>...for decrypting and signing messages</source>
- <translation>... pour décrypter et signature des messages</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="368"/>
+ <location filename="../../src/ui/Wizard.cpp" line="185"/>
<source>You should create a new keypair.The pair consists of a public and a private key.&lt;br&gt;Other users can use the public key to encrypt messages for you and verify messages signed by you.You can use the private key to decrypt and sign messages.&lt;br&gt;For more information have a look at the offline tutorial (which then is shown in the main window):</source>
- <translation>Vous devriez créer un nouveau keypair.La Paire consiste en une clé publique et privée. &lt;br&gt; Les autres utilisateurs peuvent utiliser la clé publique pour chiffrer les messages pour vous et vérifier les messages signés par vous.Vous pouvez utiliser la clé privée pour déchiffrer et signerMessages. &lt;br&gt; Pour plus d&apos;informations, consultez le tutoriel hors ligne (qui est ensuite affiché dans la fenêtre principale):</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="375"/>
+ <location filename="../../src/ui/Wizard.cpp" line="192"/>
<source>Offline tutorial</source>
- <translation>Tutoriel hors ligne</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="382"/>
+ <location filename="../../src/ui/Wizard.cpp" line="199"/>
<source>Create New Key</source>
- <translation>Créer une nouvelle clé</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -821,83 +887,83 @@
<location filename="../../src/ui/KeyImportDetailDialog.cpp" line="34"/>
<location filename="../../src/ui/KeyImportDetailDialog.cpp" line="53"/>
<source>Key Update Details</source>
- <translation>Détails de la mise à jour clés</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyImportDetailDialog.cpp" line="34"/>
<source>No keys found</source>
- <translation>Pas de clés trouvées</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyImportDetailDialog.cpp" line="36"/>
<location filename="../../src/ui/KeyImportDetailDialog.cpp" line="55"/>
<source>Key Import Details</source>
- <translation>Détails des importations clés</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyImportDetailDialog.cpp" line="36"/>
<source>No keys found to import</source>
- <translation>Aucune clé trouvée à l&apos;importation</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyImportDetailDialog.cpp" line="64"/>
<source>General key info</source>
- <translation>Info général de la clé</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyImportDetailDialog.cpp" line="67"/>
<source>Considered:</source>
- <translation>Pris en considération:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyImportDetailDialog.cpp" line="71"/>
<source>Public unchanged:</source>
- <translation>Public inchangé:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyImportDetailDialog.cpp" line="76"/>
<source>Imported:</source>
- <translation>Importé:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyImportDetailDialog.cpp" line="81"/>
<source>Not imported:</source>
- <translation>Non importé:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyImportDetailDialog.cpp" line="86"/>
<source>Private read:</source>
- <translation>Lire privée:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyImportDetailDialog.cpp" line="91"/>
<source>Private imported:</source>
- <translation>Privé importé:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyImportDetailDialog.cpp" line="96"/>
<source>Private unchanged:</source>
- <translation>Privé inchangé:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyImportDetailDialog.cpp" line="111"/>
<source>Name</source>
- <translation>Nom</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyImportDetailDialog.cpp" line="111"/>
<source>Email</source>
- <translation>E-mail</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyImportDetailDialog.cpp" line="111"/>
<source>Status</source>
- <translation>Statut</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyImportDetailDialog.cpp" line="111"/>
<source>Fingerprint</source>
- <translation>Empreinte digitale</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyImportDetailDialog.cpp" line="135"/>
@@ -917,90 +983,89 @@
<message>
<location filename="../../src/ui/KeyImportDetailDialog.cpp" line="144"/>
<source>new key</source>
- <translation>nouvelle clé</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyImportDetailDialog.cpp" line="147"/>
<source>new subkey</source>
- <translation>Nouvelle sous-clé</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyImportDetailDialog.cpp" line="151"/>
<source>new signature</source>
- <translation>nouvelle signature</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyImportDetailDialog.cpp" line="155"/>
<source>new uid</source>
- <translation>Nouveau UID</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
<name>KeyList</name>
<message>
- <location filename="../../src/ui/widgets/KeyList.cpp" line="77"/>
+ <location filename="../../src/ui/widgets/KeyList.cpp" line="76"/>
<source>Select</source>
- <translation>Sélectionner</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/widgets/KeyList.cpp" line="77"/>
+ <location filename="../../src/ui/widgets/KeyList.cpp" line="76"/>
<source>Type</source>
- <translation>Taper</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/widgets/KeyList.cpp" line="77"/>
+ <location filename="../../src/ui/widgets/KeyList.cpp" line="76"/>
<source>Name</source>
- <translation>Nom</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/widgets/KeyList.cpp" line="77"/>
+ <location filename="../../src/ui/widgets/KeyList.cpp" line="76"/>
<source>Email Address</source>
- <translation>Adresse e-mail</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/widgets/KeyList.cpp" line="78"/>
+ <location filename="../../src/ui/widgets/KeyList.cpp" line="77"/>
<source>Usage</source>
- <translation>Usage</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/widgets/KeyList.cpp" line="78"/>
+ <location filename="../../src/ui/widgets/KeyList.cpp" line="77"/>
<source>Validity</source>
- <translation>Validité</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/widgets/KeyList.cpp" line="78"/>
+ <location filename="../../src/ui/widgets/KeyList.cpp" line="77"/>
<source>Finger Print</source>
- <translation>Empreinte digitale</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/widgets/KeyList.cpp" line="315"/>
+ <location filename="../../src/ui/widgets/KeyList.cpp" line="302"/>
<source>Import Keys</source>
- <translation>Clés d&apos;importation</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/widgets/KeyList.cpp" line="317"/>
+ <location filename="../../src/ui/widgets/KeyList.cpp" line="305"/>
<source>You&apos;ve dropped something on the table.
GpgFrontend will now try to import key(s).</source>
- <translation>Vous avez laissé tomber quelque chose sur la table.
- GPGFronTend va maintenant essayer d&apos;importer des clés (s).</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/widgets/KeyList.cpp" line="320"/>
+ <location filename="../../src/ui/widgets/KeyList.cpp" line="308"/>
<source>Always import without bothering.</source>
- <translation>Toujours importer sans déranger.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/widgets/KeyList.cpp" line="356"/>
+ <location filename="../../src/ui/widgets/KeyList.cpp" line="341"/>
<source>Couldn&apos;t Open File: </source>
- <translation>Impossible d&apos;ouvrir le fichier:</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
<name>KeyMgmt</name>
<message>
- <location filename="../../src/ui/KeyMgmt.cpp" line="81"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="82"/>
<source>Key Pair Management</source>
- <translation>Gestion des paires de clés</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="88"/>
@@ -1010,240 +1075,254 @@
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="89"/>
<source>Ctrl+O</source>
- <translation>Ctrl + o</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="90"/>
<source>Open Key File</source>
- <translation>Ouvrir le fichier de clé</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="93"/>
<source>&amp;Close</source>
- <translation>&amp;Fermer</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="94"/>
<source>Ctrl+Q</source>
- <translation>Ctrl + q</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="96"/>
<source>Close</source>
- <translation>Fermer</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="99"/>
<source>New Keypair</source>
- <translation>Nouveau keypair</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="100"/>
<source>Ctrl+N</source>
- <translation>Ctrl + n</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="102"/>
<source>Generate KeyPair</source>
- <translation>Générer une paire de clés</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="105"/>
<source>New Subkey</source>
- <translation>Nouvelle sous-clé</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="106"/>
<source>Ctrl+Shift+N</source>
- <translation>Ctrl + Maj + n</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="108"/>
<source>Generate Subkey For Selected KeyPair</source>
- <translation>Générer de sous-clé pour sélectionner le clavier sélectionné</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="111"/>
- <location filename="../../src/ui/KeyMgmt.cpp" line="152"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="151"/>
<source>&amp;File</source>
- <translation>&amp;Déposer</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="113"/>
<source>Import New Key From File</source>
- <translation>Importer une nouvelle clé à partir de fichier</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="116"/>
<source>&amp;Clipboard</source>
- <translation>&amp; Presse-papiers</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="118"/>
<source>Import New Key From Clipboard</source>
- <translation>Importer une nouvelle clé de Presse-papiers</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="121"/>
<source>&amp;Keyserver</source>
- <translation>&amp; Keyserver</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="123"/>
<source>Import New Key From Keyserver</source>
- <translation>Importer une nouvelle clé de Keyserver</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="126"/>
<source>Export To &amp;Clipboard</source>
- <translation>Exporter vers le presse-papier</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="128"/>
<source>Export Selected Key(s) To Clipboard</source>
- <translation>Exporter des touches sélectionnées dans le presse-papier</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="131"/>
<source>Export To &amp;File</source>
- <translation>Exporter vers &amp; Fichier</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="133"/>
<source>Export Selected Key(s) To File</source>
- <translation>Exporter la ou les touches sélectionnées dans le fichier</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="136"/>
<source>Delete Selected Key(s)</source>
- <translation>Supprimer la ou les touches sélectionnées</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="137"/>
<source>Delete the Selected keys</source>
- <translation>Supprimer les touches sélectionnées</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="140"/>
<source>Delete Checked Key(s)</source>
- <translation>Supprimer les touches vérifiées</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="141"/>
<source>Delete the Checked keys</source>
- <translation>Supprimer les clés cochées</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="145"/>
<source>Show Key Details</source>
- <translation>Afficher les détails de la clé</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="146"/>
<source>Show Details for this Key</source>
- <translation>Afficher les détails de cette clé</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyMgmt.cpp" line="156"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="155"/>
<source>&amp;Key</source>
- <translation>&amp;Clé</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyMgmt.cpp" line="157"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="156"/>
<source>&amp;Generate Key</source>
- <translation>Générer une clé</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyMgmt.cpp" line="161"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="160"/>
<source>&amp;Import Key</source>
- <translation>Clé d&apos;importation</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyMgmt.cpp" line="173"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="171"/>
<source>Key</source>
- <translation>Clé</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyMgmt.cpp" line="181"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="179"/>
<source>Generate</source>
- <translation>produire</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyMgmt.cpp" line="182"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="180"/>
<source>Generate A New Keypair or Subkey</source>
- <translation>Générer un nouveau clavier ou une nouvelle sous-clé</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyMgmt.cpp" line="191"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="189"/>
<source>Import key</source>
- <translation>Clé d&apos;importation</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyMgmt.cpp" line="192"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="190"/>
<source>Import Key</source>
- <translation>Clé d&apos;importation</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyMgmt.cpp" line="213"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="209"/>
<source>Open Key</source>
- <translation>Touche ouverte</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyMgmt.cpp" line="213"/>
- <location filename="../../src/ui/KeyMgmt.cpp" line="299"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="210"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="302"/>
<source>Key Files</source>
- <translation>Fichiers clés</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyMgmt.cpp" line="213"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="210"/>
<source>Keyring files</source>
- <translation>Fichiers de porte-clés</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyMgmt.cpp" line="218"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="216"/>
<source>Couldn&apos;t Open File: </source>
- <translation>Impossible d&apos;ouvrir le fichier:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyMgmt.cpp" line="268"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="262"/>
<source>Deleting Keys</source>
- <translation>Suppression des clés</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyMgmt.cpp" line="269"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="263"/>
<source>Are you sure that you want to delete the following keys?</source>
- <translation>Êtes-vous sûr de vouloir supprimer les clés suivantes?</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyMgmt.cpp" line="270"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="265"/>
<source>The action can not be undone.</source>
- <translation>L&apos;action ne peut pas être annulée.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyMgmt.cpp" line="299"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="281"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="296"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="344"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="281"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="296"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="344"/>
+ <source>Key Not Found.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="301"/>
<source>Export Key To File</source>
- <translation>Exporter la clé pour déposer</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyMgmt.cpp" line="309"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="312"/>
<source>key(s) exported</source>
- <translation>clé (s) exportée (s)</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="338"/>
- <location filename="../../src/ui/KeyMgmt.cpp" line="345"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="349"/>
<source>Invalid Operation</source>
- <translation>Opération invalide</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="339"/>
<source>Please select one KeyPair before doing this operation.</source>
- <translation>Veuillez sélectionner un clavier avant de faire cette opération.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyMgmt.cpp" line="346"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="350"/>
<source>If a key pair does not have a private key then it will not be able to generate sub-keys.</source>
- <translation>Si une paire de clés n&apos;a pas de clé privée, elle ne pourra pas générer des sous-clés.</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -1251,34 +1330,34 @@
<message>
<location filename="../../src/ui/keypair_details/KeyNewUIDDialog.cpp" line="40"/>
<source>Name</source>
- <translation>Nom</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyNewUIDDialog.cpp" line="41"/>
<source>Email</source>
- <translation>E-mail</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyNewUIDDialog.cpp" line="42"/>
<source>Comment</source>
- <translation>Commenter</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyNewUIDDialog.cpp" line="55"/>
<source>Create New UID</source>
- <translation>Créer de nouveaux uid</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyNewUIDDialog.cpp" line="68"/>
<source> Name must contain at least five characters.
</source>
- <translation>Le nom doit contenir au moins cinq caractères.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyNewUIDDialog.cpp" line="70"/>
<source> Please give a email address.
</source>
- <translation>S&apos;il vous plaît donner une adresse email.</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -1286,202 +1365,212 @@
<message>
<location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="34"/>
<source>Owner</source>
- <translation>Propriétaire</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="35"/>
<source>Master Key</source>
- <translation>La clef maitresse</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="36"/>
<source>Fingerprint</source>
- <translation>Empreinte digitale</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="37"/>
<source>Additional UIDs</source>
- <translation>UID supplémentaires</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="58"/>
<source>Exists</source>
- <translation>Existe</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="58"/>
<source>Not Exists</source>
- <translation>N&apos;existe pas</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="83"/>
<source>Name:</source>
- <translation>Nom:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="84"/>
<source>Email Address:</source>
- <translation>Adresse e-mail:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="85"/>
<source>Comment:</source>
- <translation>Commenter:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="90"/>
<source>Key ID: </source>
- <translation>ID de clé:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="91"/>
<source>Algorithm: </source>
- <translation>Algorithme:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="92"/>
<source>Key Size:</source>
- <translation>Taille de la clé:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="93"/>
<source>Nominal Usage: </source>
- <translation>Utilisation nominale:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="94"/>
<source>Actual Usage: </source>
- <translation>Utilisation réelle:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="95"/>
<source>Expires on: </source>
- <translation>Expire le:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="96"/>
<source>Last Update: </source>
- <translation>Dernière mise à jour:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="97"/>
<source>Secret Key Existence: </source>
- <translation>Existence de clé secrète:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="121"/>
<source>Copy</source>
- <translation>Copie</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="123"/>
<source>copy fingerprint to clipboard</source>
- <translation>Copier l&apos;empreinte digitale dans le presse-papier</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="133"/>
<source>Operations</source>
- <translation>Exploitation</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="136"/>
<source>Export Private Key (Include Subkey)</source>
- <translation>Exporter une clé privée (inclure la sous-clé)</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="141"/>
<source>Modify Expiration Datetime (Master Key)</source>
- <translation>Modifier l&apos;expiration DateTime (clé principale)</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="146"/>
<source>Key Server Operation (Pubkey)</source>
- <translation>Fonctionnement du serveur clé (Pubkey)</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="149"/>
<source>Generate Revoke Certificate</source>
- <translation>Générer un certificat de révocation</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="175"/>
+ <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="174"/>
<source>Warning: The Master Key has expired.</source>
- <translation>AVERTISSEMENT: la clé principale a expiré.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="178"/>
+ <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="177"/>
<source>Warning: The Master Key has been revoked</source>
- <translation>AVERTISSEMENT: la clé principale a été révoquée</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="202"/>
+ <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="201"/>
<source>Exporting private Key</source>
- <translation>Exportation de la clé privée</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="203"/>
+ <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="202"/>
<source>You are about to export your</source>
- <translation>Vous êtes sur le point d&apos;exporter votre</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="204"/>
+ <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="203"/>
<source>PRIVATE KEY</source>
- <translation>CLÉ PRIVÉE</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="205"/>
+ <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="204"/>
<source>This is NOT your Public Key, so DON&apos;T give it away.</source>
- <translation>Ce n&apos;est pas votre clé publique, alors ne le donnez pas.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="206"/>
+ <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="205"/>
<source>Do you REALLY want to export your PRIVATE KEY?</source>
- <translation>Voulez-vous vraiment exporter votre clé privée?</translation>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="219"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="219"/>
+ <source>Key Not Found.</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="221"/>
+ <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="224"/>
<source>Export Key To File</source>
- <translation>Exporter la clé pour déposer</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="222"/>
+ <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="225"/>
<source>Key Files</source>
- <translation>Fichiers clés</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="225"/>
+ <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="228"/>
<source>Export Error</source>
- <translation>Erreur d&apos;exportation</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="225"/>
+ <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="228"/>
<source>Couldn&apos;t open %1 for writing</source>
- <translation>Ne pouvait pas ouvrir% 1 pour écrire</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="295"/>
+ <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="298"/>
<source>Never Expire</source>
- <translation>N&apos;expire jamais</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="315"/>
+ <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="318"/>
<source>Upload Key Pair to Key Server</source>
- <translation>Télécharger la paire de touches sur le serveur de clés</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="317"/>
+ <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="320"/>
<source>Update Key Pair</source>
- <translation>Mettre à jour la paire de clés</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="340"/>
+ <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="343"/>
<source>Generate revocation certificate</source>
- <translation>Générer un certificat de révocation</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="343"/>
+ <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="346"/>
<source>Revocation Certificates</source>
- <translation>Certificats de révocation</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -1489,87 +1578,87 @@
<message>
<location filename="../../src/ui/keypair_details/KeyPairSubkeyTab.cpp" line="37"/>
<source>Generate A New Subkey</source>
- <translation>Générer une nouvelle sous-clé</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairSubkeyTab.cpp" line="54"/>
<source>Key ID: </source>
- <translation>ID de clé:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairSubkeyTab.cpp" line="55"/>
<source>Algorithm: </source>
- <translation>Algorithme:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairSubkeyTab.cpp" line="56"/>
<source>Key Size:</source>
- <translation>Taille de la clé:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairSubkeyTab.cpp" line="57"/>
<source>Usage: </source>
- <translation>Usage:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairSubkeyTab.cpp" line="58"/>
<source>Expires On </source>
- <translation>Expire le</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairSubkeyTab.cpp" line="59"/>
<source>Last Update: </source>
- <translation>Dernière mise à jour:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairSubkeyTab.cpp" line="60"/>
<source>Existence: </source>
- <translation>Existence:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairSubkeyTab.cpp" line="61"/>
<source>Fingerprint: </source>
- <translation>Empreinte digitale:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairSubkeyTab.cpp" line="121"/>
<source>Subkey ID</source>
- <translation>Adresse de sous-clé</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairSubkeyTab.cpp" line="121"/>
<source>Key Size</source>
- <translation>Taille de clé</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairSubkeyTab.cpp" line="121"/>
<source>Algo</source>
- <translation>Quelque chose</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairSubkeyTab.cpp" line="121"/>
<source>Create Date</source>
- <translation>créer un rendez-vous</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairSubkeyTab.cpp" line="121"/>
<source>Expire Date</source>
- <translation>Date d&apos;expiration</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyPairSubkeyTab.cpp" line="161"/>
+ <location filename="../../src/ui/keypair_details/KeyPairSubkeyTab.cpp" line="160"/>
<source>Never Expire</source>
- <translation>N&apos;expire jamais</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyPairSubkeyTab.cpp" line="185"/>
+ <location filename="../../src/ui/keypair_details/KeyPairSubkeyTab.cpp" line="184"/>
<source>Never Expires</source>
- <translation>N&apos;expire jamais</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyPairSubkeyTab.cpp" line="231"/>
+ <location filename="../../src/ui/keypair_details/KeyPairSubkeyTab.cpp" line="230"/>
<source>Edit Expire Date</source>
- <translation>Modifier la date d&apos;expire</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -1577,64 +1666,64 @@
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="39"/>
<source>New UID</source>
- <translation>Nouveau UID</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="40"/>
<source>UID Management</source>
- <translation>Gestion UID</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="59"/>
<source>UIDs</source>
- <translation>Uids</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="67"/>
<source>Signature of Selected UID</source>
- <translation>Signature de l&apos;UID sélectionné</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="103"/>
<source>Select</source>
- <translation>Sélectionner</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="103"/>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="126"/>
<source>Name</source>
- <translation>Nom</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="103"/>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="126"/>
<source>Email</source>
- <translation>E-mail</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="103"/>
<source>Comment</source>
- <translation>Commenter</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="126"/>
<source>Key ID</source>
- <translation>Identifiant de clé</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="126"/>
<source>Create Date</source>
- <translation>créer un rendez-vous</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="126"/>
<source>Expired Date</source>
- <translation>Date d&apos;expiration</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="219"/>
<source>Never Expires</source>
- <translation>N&apos;expire jamais</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="237"/>
@@ -1644,33 +1733,33 @@
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="480"/>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="487"/>
<source>Invalid Operation</source>
- <translation>Opération invalide</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="238"/>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="301"/>
<source>Please select one or more UIDs before doing this operation.</source>
- <translation>Veuillez sélectionner un ou plusieurs UID avant de faire cette opération.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="263"/>
<source>Sign Selected UID(s)</source>
- <translation>Signer des UID sélectionnés</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="265"/>
<source>Delete Selected UID(s)</source>
- <translation>Supprimer l&apos;UID sélectionné (s) sélectionné (s)</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="284"/>
<source>Successful Operation</source>
- <translation>Exploitation réussie</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="285"/>
<source>Successfully added a new UID.</source>
- <translation>A ajouté avec succès une nouvelle UID.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="288"/>
@@ -1679,7 +1768,7 @@
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="460"/>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="507"/>
<source>Operation Failed</source>
- <translation>L&apos;opération a échoué</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="289"/>
@@ -1688,17 +1777,17 @@
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="461"/>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="508"/>
<source>An error occurred during the operation.</source>
- <translation>Une erreur s&apos;est produite lors de l&apos;opération.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="313"/>
<source>Deleting UIDs</source>
- <translation>Suppression des UID</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="314"/>
<source>Are you sure that you want to delete the following uids?</source>
- <translation>Êtes-vous sûr de vouloir supprimer les UID suivants?</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="315"/>
@@ -1706,73 +1795,73 @@
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="454"/>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="501"/>
<source>The action can not be undone.</source>
- <translation>L&apos;action ne peut pas être annulée.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="355"/>
<source>Set Primary UID</source>
- <translation>Définir UID primaire</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="356"/>
<source>Are you sure that you want to set the Primary UID to?</source>
- <translation>Êtes-vous sûr de vouloir définir l&apos;UID principal?</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="395"/>
<source>Set As Primary</source>
- <translation>Définir comme principale</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="397"/>
<source>Sign UID</source>
- <translation>Signer uid</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="399"/>
<source>Delete UID</source>
- <translation>Supprimer UID</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="426"/>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="441"/>
<source>Please select one UID before doing this operation.</source>
- <translation>Veuillez sélectionner un UID avant de faire cette opération.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="452"/>
<source>Deleting UID</source>
- <translation>Supprimer UID</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="453"/>
<source>Are you sure that you want to delete the following uid?</source>
- <translation>Êtes-vous sûr de vouloir supprimer l&apos;UID suivant?</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="469"/>
<source>Delete(Revoke) Key Signature</source>
- <translation>Supprimer (révoquer) la signature de clé</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="481"/>
<source>Please select one Key Signature before doing this operation.</source>
- <translation>Veuillez sélectionner une signature de clé avant de faire cette opération.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="488"/>
<source>To delete the signature, you need to have its corresponding public key in the local database.</source>
- <translation>Pour supprimer la signature, vous devez avoir sa clé publique correspondante dans la base de données locale.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="499"/>
<source>Deleting Key Signature</source>
- <translation>Suppression de la signature de clé</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="500"/>
<source>Are you sure that you want to delete the following signature?</source>
- <translation>Êtes-vous sûr de vouloir supprimer la signature suivante?</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -1780,110 +1869,110 @@
<message>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="40"/>
<source>&amp;Close</source>
- <translation>&amp;Fermer</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="41"/>
<source>&amp;Import ALL</source>
- <translation>&amp; Importer tout</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="42"/>
<source>&amp;Search</source>
- <translation>&amp;Rechercher</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="45"/>
<source>Search String:</source>
- <translation>String de recherche:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="49"/>
<source>Key Server:</source>
- <translation>Serveur clé:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="97"/>
<source>Update Keys from Keyserver</source>
- <translation>Mettre à jour les clés de Keyserver</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="99"/>
<source>Import Keys from Keyserver</source>
- <translation>Keys d&apos;importation de KeyServer</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="158"/>
<source>UID</source>
- <translation>Uid</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="158"/>
<source>Creation date</source>
- <translation>Date de création</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="158"/>
<source>KeyID</source>
- <translation>Clés</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="158"/>
<source>Tag</source>
- <translation>Étiqueter</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="179"/>
<source>Text is empty.</source>
- <translation>Le texte est vide.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="213"/>
<source>Not Key Found</source>
- <translation>Pas la clé trouvée</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="216"/>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="386"/>
<source>Timeout</source>
- <translation>Temps libre</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="219"/>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="389"/>
<source>Key Server Not Found</source>
- <translation>Server clé non trouvé</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="222"/>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="392"/>
<source>Connection Error</source>
- <translation>Erreur de connexion</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="230"/>
<source>Too many responses from keyserver!</source>
- <translation>Trop de réponses de KeyServer!</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="237"/>
<source>No keys found, input may be kexId, retrying search with 0x.</source>
- <translation>Aucune clé trouvée, l&apos;entrée peut être Kexid, réessayant la recherche avec 0x.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="242"/>
<source>No keys found containing the search string!</source>
- <translation>Aucun clés trouvée contenant la chaîne de recherche!</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="246"/>
<source>Insufficiently specific search string!</source>
- <translation>String de recherche insuffisamment spécifique!</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="274"/>
<source>revoked</source>
- <translation>révoqué</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="277"/>
@@ -1893,27 +1982,27 @@
<message>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="317"/>
<source>&lt;h4&gt;%1 keys found. Double click a key to import it.&lt;/h4&gt;</source>
- <translation>&lt;H4&gt;% 1 clés trouvées.Double-cliquez sur une touche pour importer. &lt;/ H4&gt;</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="383"/>
<source>Key Not Found</source>
- <translation>Clé introuvable</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="410"/>
<source>&lt;h4&gt;Key Updated&lt;/h4&gt;</source>
- <translation>&lt;H4&gt; Touche Mise à jour &lt;/ h4&gt;</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="412"/>
<source>&lt;h4&gt;Key Imported&lt;/h4&gt;</source>
- <translation>&lt;H4&gt; Touche importée &lt;/ h4&gt;</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="473"/>
<source>Upload Keys from Keyserver</source>
- <translation>Touches de téléchargement de KeyServer</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -1921,22 +2010,22 @@
<message>
<location filename="../../src/ui/keypair_details/KeySetExpireDateDialog.cpp" line="36"/>
<source>Confirm</source>
- <translation>Confirmer</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeySetExpireDateDialog.cpp" line="41"/>
<source>Never Expire</source>
- <translation>N&apos;expire jamais</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeySetExpireDateDialog.cpp" line="61"/>
<source>Operation Failed</source>
- <translation>L&apos;opération a échoué</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeySetExpireDateDialog.cpp" line="62"/>
<source>An error occurred during the operation.</source>
- <translation>Une erreur s&apos;est produite lors de l&apos;opération.</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -1944,73 +2033,93 @@
<message>
<location filename="../../src/ui/keypair_details/KeyUIDSignDialog.cpp" line="72"/>
<source>Expire Date</source>
- <translation>Date d&apos;expiration</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyUIDSignDialog.cpp" line="81"/>
<source>Sign For Key&apos;s UID(s)</source>
- <translation>Signe pour UID (s) de la clé</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyUIDSignDialog.cpp" line="100"/>
+ <location filename="../../src/ui/keypair_details/KeyUIDSignDialog.cpp" line="99"/>
<source>Unsuccessful Operation</source>
- <translation>Opération infructueuse</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyUIDSignDialog.cpp" line="101"/>
+ <location filename="../../src/ui/keypair_details/KeyUIDSignDialog.cpp" line="100"/>
<source>Signature operation failed for UID </source>
- <translation>L&apos;opération de signature a échoué pour UID</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyUIDSignDialog.cpp" line="108"/>
+ <location filename="../../src/ui/keypair_details/KeyUIDSignDialog.cpp" line="107"/>
<source>Operation Complete</source>
- <translation>Opération complète</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyUIDSignDialog.cpp" line="109"/>
+ <location filename="../../src/ui/keypair_details/KeyUIDSignDialog.cpp" line="108"/>
<source>The signature operation of the UID is complete</source>
- <translation>L&apos;opération de signature de l&apos;UID est complète</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
<name>KeyUploadDialog</name>
<message>
- <location filename="../../src/ui/KeyUploadDialog.cpp" line="49"/>
+ <location filename="../../src/ui/KeyUploadDialog.cpp" line="47"/>
<source>Uploading Public Key</source>
- <translation>Téléchargement de clé publique</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyUploadDialog.cpp" line="112"/>
+ <location filename="../../src/ui/KeyUploadDialog.cpp" line="110"/>
<source>Key Not Found</source>
- <translation>Clé introuvable</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyUploadDialog.cpp" line="115"/>
+ <location filename="../../src/ui/KeyUploadDialog.cpp" line="113"/>
<source>Timeout</source>
- <translation>Temps libre</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyUploadDialog.cpp" line="118"/>
+ <location filename="../../src/ui/KeyUploadDialog.cpp" line="116"/>
<source>Key Server Not Found</source>
- <translation>Server clé non trouvé</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyUploadDialog.cpp" line="121"/>
+ <location filename="../../src/ui/KeyUploadDialog.cpp" line="119"/>
<source>Connection Error</source>
- <translation>Erreur de connexion</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
<name>KeyserverTab</name>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="607"/>
- <source>Default Key Server for import:</source>
- <translation>Server de clé par défaut pour importer:</translation>
+ <location filename="../../src/ui/settings/SettingsKeyServer.cpp" line="32"/>
+ <source>General</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="624"/>
+ <location filename="../../src/ui/settings/SettingsKeyServer.cpp" line="53"/>
+ <source>No.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/settings/SettingsKeyServer.cpp" line="53"/>
+ <source>Address</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/settings/SettingsKeyServer.cpp" line="53"/>
+ <source>Available</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/settings/SettingsKeyServer.cpp" line="57"/>
+ <source>Default Key Server for Import:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/settings/SettingsKeyServer.cpp" line="67"/>
<source>Add</source>
- <translation>Ajouter</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -2018,277 +2127,374 @@
<message>
<location filename="../../src/MainWindow.cpp" line="35"/>
<source>Loading Gnupg</source>
- <translation>Chargement gnupg</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/MainWindow.cpp" line="62"/>
<source>ENV Loading Failed</source>
- <translation>Échec du chargement env</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/MainWindow.cpp" line="63"/>
<source>Gnupg is not installed correctly, please follow the ReadME instructions to install gnupg and then open GPGFrontend.</source>
- <translation>GNUPG n&apos;est pas installé correctement, veuillez suivre les instructions README pour installer GNUPG, puis ouvrir GPGFontend.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="38"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="117"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="286"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="36"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="40"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="44"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="114"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="127"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="131"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="135"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="196"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="212"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="216"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="220"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="294"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="326"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="331"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="335"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="383"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="396"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="400"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="404"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="501"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="513"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="517"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="521"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="583"/>
+ <location filename="../../src/ui/main_window/MainWindowServerSlotFunction.cpp" line="51"/>
+ <location filename="../../src/ui/main_window/MainWindowServerSlotFunction.cpp" line="112"/>
+ <location filename="../../src/ui/main_window/MainWindowServerSlotFunction.cpp" line="126"/>
+ <location filename="../../src/ui/main_window/MainWindowServerSlotFunction.cpp" line="218"/>
+ <location filename="../../src/ui/main_window/MainWindowServerSlotFunction.cpp" line="231"/>
<location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="525"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="702"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="885"/>
- <source>No Key Selected</source>
- <translation>Aucune clé sélectionnée</translation>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="541"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="36"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="127"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="212"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="396"/>
+ <source>Select a file before doing it.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="40"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="131"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="216"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="400"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="517"/>
+ <source>No permission to read this file.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="44"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="135"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="220"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="404"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="521"/>
+ <source>No permission to create file.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="49"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="150"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="226"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="409"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="375"/>
+ <source>Warning</source>
+ <translation type="unfinished"></translation>
</message>
<message>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="50"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="151"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="227"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="410"/>
+ <source>The target file already exists, do you need to overwrite it?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="62"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="239"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="422"/>
<location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="45"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="124"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="532"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="709"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="126"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="298"/>
+ <source>No Key Selected</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="69"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="246"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="52"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="133"/>
<source>Invalid Operation</source>
- <translation>Opération invalide</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="46"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="533"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="710"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="70"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="247"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="53"/>
<source>The selected key contains a key that does not actually have a encrypt usage.&lt;br/&gt;</source>
- <translation>La clé sélectionnée contient une clé qui ne dispose pas d&apos;une utilisation en chiffrement. &lt;br/&gt;</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="47"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="126"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="300"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="534"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="711"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="899"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="71"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="248"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="436"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="54"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="135"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="312"/>
<source>&lt;br/&gt;For example the Following Key: &lt;br/&gt;</source>
- <translation>&lt;br/&gt; Par exemple, la clé suivante: &lt;br/&gt;</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="65"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="554"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="91"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="72"/>
<source>Encrypting</source>
- <translation>Cryptage</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="94"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="368"/>
- <source>Function Disabled</source>
- <translation>Fonction désactivée</translation>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="114"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="196"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="294"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="383"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="501"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="583"/>
+ <source>An error occurred during operation.</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="95"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="369"/>
- <source>Please go to the settings interface to enable and configure this function.</source>
- <translation>Veuillez vous rendre à l&apos;interface des paramètres pour activer et configurer cette fonction.</translation>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="268"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="151"/>
+ <source>Signing</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="125"/>
- <source>The selected key contains a key that does not actually have a signature usage.&lt;br/&gt;</source>
- <translation>La clé sélectionnée contient une clé qui ne dispose pas d&apos;une utilisation de signature. &lt;br/&gt;</translation>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="327"/>
+ <source>Please select the appropriate target file or signature file. Ensure that both are in this directory.</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="142"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="731"/>
- <source>Signing</source>
- <translation>Signature</translation>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="331"/>
+ <source>No permission to read target file.</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="186"/>
- <source>Decrypting</source>
- <translation>Décalage</translation>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="335"/>
+ <source>No permission to read signature file.</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="246"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="816"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="353"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="259"/>
<source>Verifying</source>
- <translation>Vérification</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="298"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="897"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="434"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="310"/>
<source>Invalid KeyPair</source>
- <translation>KeyPair non valide</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="299"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="898"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="435"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="311"/>
<source>The selected keypair cannot be used for signing and encryption at the same time.&lt;br/&gt;</source>
- <translation>Le clavier sélectionné ne peut pas être utilisé pour la signature et le cryptage en même temps. &lt;br/&gt;</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="310"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="317"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="909"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="916"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="446"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="453"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="322"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="329"/>
<source>Incomplete Operation</source>
- <translation>Opération incomplète</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="311"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="910"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="447"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="323"/>
<source>None of the selected key pairs can provide the encryption function.</source>
- <translation>Aucune des paires de touches sélectionnées ne peut fournir la fonction de cryptage.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="318"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="917"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="454"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="330"/>
<source>None of the selected key pairs can provide the signature function.</source>
- <translation>Aucune des paires de touches sélectionnées ne peut fournir la fonction de signature.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="335"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="936"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="473"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="365"/>
<source>Encrypting and Signing</source>
- <translation>Cryptage et signature</translation>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="513"/>
+ <source>Select a file(.gpg/.asc) before doing it.</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="401"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="1014"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="551"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="461"/>
<source>Decrypting and Verifying</source>
- <translation>Décrypter et vérifier</translation>
- </message>
- <message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="499"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="503"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="507"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="577"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="590"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="594"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="598"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="659"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="675"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="679"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="683"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="757"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="789"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="794"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="798"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="846"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="859"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="863"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="867"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="964"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="976"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="980"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="984"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="1046"/>
- <source>Error</source>
- <translation>Erreur</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="499"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="590"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="675"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="859"/>
- <source>Select a file before doing it.</source>
- <translation>Sélectionnez un fichier avant de le faire.</translation>
+ <location filename="../../src/ui/main_window/MainWindowServerSlotFunction.cpp" line="43"/>
+ <location filename="../../src/ui/main_window/MainWindowServerSlotFunction.cpp" line="155"/>
+ <source>Invalid Own Key</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="503"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="594"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="679"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="863"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="980"/>
- <source>No permission to read this file.</source>
- <translation>Aucune autorisation de lire ce fichier.</translation>
+ <location filename="../../src/ui/main_window/MainWindowServerSlotFunction.cpp" line="43"/>
+ <location filename="../../src/ui/main_window/MainWindowServerSlotFunction.cpp" line="155"/>
+ <source>Own Key can not be use to do any operation.</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="507"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="598"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="683"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="867"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="984"/>
- <source>No permission to create file.</source>
- <translation>Aucune autorisation de créer un fichier.</translation>
+ <location filename="../../src/ui/main_window/MainWindowServerSlotFunction.cpp" line="52"/>
+ <source>Please obtain a Service Token from the server in the settings.</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="512"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="613"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="689"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="872"/>
- <source>Warning</source>
- <translation>Avertissement</translation>
+ <location filename="../../src/ui/main_window/MainWindowServerSlotFunction.cpp" line="91"/>
+ <source>Getting Cpt From Server</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="513"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="614"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="690"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="873"/>
- <source>The target file already exists, do you need to overwrite it?</source>
- <translation>Le fichier cible existe déjà, devez-vous vous écraser?</translation>
+ <location filename="../../src/ui/main_window/MainWindowServerSlotFunction.cpp" line="113"/>
+ <location filename="../../src/ui/main_window/MainWindowServerSlotFunction.cpp" line="219"/>
+ <source>The communication content with the server does not meet the requirements</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="577"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="659"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="757"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="846"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="964"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="1046"/>
- <source>An error occurred during operation.</source>
- <translation>Une erreur s&apos;est produite lors du fonctionnement.</translation>
+ <location filename="../../src/ui/main_window/MainWindowServerSlotFunction.cpp" line="126"/>
+ <source>Invalid short ciphertext</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="790"/>
- <source>Please select the appropriate target file or signature file. Ensure that both are in this directory.</source>
- <translation>Veuillez sélectionner le fichier cible ou le fichier de signature approprié.Assurez-vous que les deux sont dans ce répertoire.</translation>
+ <location filename="../../src/ui/main_window/MainWindowServerSlotFunction.cpp" line="144"/>
+ <source>Invalid Service Token</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="794"/>
- <source>No permission to read target file.</source>
- <translation>Aucune autorisation de lire le fichier cible.</translation>
+ <location filename="../../src/ui/main_window/MainWindowServerSlotFunction.cpp" line="145"/>
+ <source>Please go to the setting interface to get a ServiceToken.</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="798"/>
- <source>No permission to read signature file.</source>
- <translation>Aucune autorisation de lire le fichier de signature.</translation>
+ <location filename="../../src/ui/main_window/MainWindowServerSlotFunction.cpp" line="203"/>
+ <source>Getting Scpt From Server</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="976"/>
- <source>Select a file(.gpg/.asc) before doing it.</source>
- <translation>Sélectionnez un fichier (.gpg / .asc) avant de le faire.</translation>
+ <location filename="../../src/ui/main_window/MainWindowServerSlotFunction.cpp" line="228"/>
+ <source>Notice: Use Decrypt &amp; Verify operation to decrypt this short crypto text.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/main_window/MainWindowServerSlotFunction.cpp" line="231"/>
+ <source>There is a problem with the communication with the server</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="103"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="408"/>
+ <source>Function Disabled</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="104"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="409"/>
+ <source>Please go to the settings interface to enable and configure this function.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="134"/>
+ <source>The selected key contains a key that does not actually have a signature usage.&lt;br/&gt;</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="1082"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="186"/>
+ <source>Notice</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="186"/>
+ <source>Short Crypto Text only supports Decrypt &amp; Verify.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="200"/>
+ <source>Decrypting</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="376"/>
+ <source>Automatic public key exchange failed.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="415"/>
+ <source>Service Token Empty</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="416"/>
+ <source>Please go to the settings interface to set Own Key and get Service Token.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="525"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="541"/>
+ <source>Key Not Found.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="572"/>
<source>Outdated Version</source>
- <translation>Version obsolète</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="1083"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="573"/>
<source>This version(%1) is out of date, please update the latest version in time. </source>
- <translation>Cette version (% 1) est obsolète, veuillez mettre à jour la dernière version à temps.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="1085"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="1092"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="575"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="582"/>
<source>You can download the latest version(%1) on Github Releases Page.&lt;br/&gt;</source>
- <translation>Vous pouvez télécharger la dernière version (% 1) sur la page Communiqués GitHub. &lt;br/&gt;</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="1089"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="579"/>
<source>Unreleased Version</source>
- <translation>Version non sélectionnée</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="1090"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="580"/>
<source>This version(%1) has not been officially released and is not recommended for use in a production environment. &lt;br/&gt;</source>
- <translation>Cette version (% 1) n&apos;a pas été officiellement libérée et n&apos;est pas recommandée pour une utilisation dans un environnement de production.&lt;br/&gt;</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowSlotUI.cpp" line="58"/>
<source>There is one unencrypted file in attachment folder</source>
- <translation>Il y a un fichier non crypté dans le dossier de pièce jointe</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowSlotUI.cpp" line="60"/>
<source>There are </source>
- <translation>Il y a</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowSlotUI.cpp" line="60"/>
<source> unencrypted files in attachment folder</source>
- <translation>Fichiers non cryptés dans le dossier de pièce jointe</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="30"/>
@@ -2298,7 +2504,7 @@
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="36"/>
<source>Open a new file</source>
- <translation>Ouvrir un nouveau fichier</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="39"/>
@@ -2308,277 +2514,277 @@
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="42"/>
<source>Open an existing file</source>
- <translation>Ouvrir un fichier existant</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="45"/>
<source>&amp;Browser</source>
- <translation>&amp;Le navigateur</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="47"/>
<source>Open a file browser</source>
- <translation>Ouvrez un navigateur de fichiers</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="50"/>
<source>&amp;Save</source>
- <translation>&amp;Sauvegarder</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="53"/>
<source>Save the current File</source>
- <translation>Enregistrez le fichier actuel</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="56"/>
<source>Save &amp;As</source>
- <translation>Enregistrer sous</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="59"/>
<source>Save the current File as...</source>
- <translation>Enregistrez le fichier actuel comme ...</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="62"/>
<source>&amp;Print</source>
- <translation>&amp;Imprimer</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="65"/>
<source>Print Document</source>
- <translation>Document d&apos;impression</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="68"/>
<source>&amp;Close</source>
- <translation>&amp;Fermer</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="70"/>
<source>Close file</source>
- <translation>Fermer le fichier</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="73"/>
<source>&amp;Quit</source>
- <translation>&amp;Quitter</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="76"/>
<source>Quit Program</source>
- <translation>Quitter le programme</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="81"/>
<source>&amp;Undo</source>
- <translation>&amp;Annuler</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="83"/>
<source>Undo Last Edit Action</source>
- <translation>Annuler la dernière action d&apos;édition</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="86"/>
<source>&amp;Redo</source>
- <translation>&amp;Prêt</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="88"/>
<source>Redo Last Edit Action</source>
- <translation>Refaire dernière action d&apos;édition</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="91"/>
<source>Zoom In</source>
- <translation>Agrandir</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="95"/>
<source>Zoom Out</source>
- <translation>Dézoomer</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="99"/>
<source>&amp;Paste</source>
- <translation>&amp;Pâte</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="102"/>
<source>Paste Text From Clipboard</source>
- <translation>Coller le texte du presse-papiers</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="105"/>
<source>Cu&amp;t</source>
- <translation>Avec &amp; T.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="108"/>
<source>Cut the current selection&apos;s contents to the clipboard</source>
- <translation>Couper le contenu de la sélection actuelle dans le presse-papiers</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="112"/>
<source>&amp;Copy</source>
- <translation>&amp;Copie</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="115"/>
<source>Copy the current selection&apos;s contents to the clipboard</source>
- <translation>Copiez le contenu de la sélection actuelle dans le Presse-papiers</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="119"/>
<source>&amp;Quote</source>
- <translation>&quot;</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="121"/>
<source>Quote whole text</source>
- <translation>Citer du texte entier</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="124"/>
<source>Select &amp;All</source>
- <translation>Tout sélectionner</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="127"/>
<source>Select the whole text</source>
- <translation>Sélectionnez le texte entier</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="130"/>
<source>&amp;Find</source>
- <translation>&amp;Trouve</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="132"/>
<source>Find a word</source>
- <translation>Trouver un mot</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="135"/>
<source>Remove &amp;spacing</source>
- <translation>Supprimer et espacer</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="138"/>
<source>Remove double linebreaks, e.g. in pasted text from webmailer</source>
- <translation>Supprimer Double Ligneurs, par exemple.dans le texte collé de webmailer</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="141"/>
<source>Se&amp;ttings</source>
- <translation>Et tuttine</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="142"/>
<source>Open settings dialog</source>
- <translation>Dialogue des paramètres ouverts</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="148"/>
<source>&amp;Encrypt</source>
- <translation>&amp;Crypter</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="151"/>
<source>Encrypt Message</source>
- <translation>Chiffrer</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="154"/>
<source>&amp;Encrypt &amp;Sign</source>
- <translation>&amp; Chiffrer et signer</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="157"/>
<source>Encrypt and Sign Message</source>
- <translation>Message de chiffrement et de signe</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="160"/>
<source>&amp;Decrypt</source>
- <translation>&amp; Déchiffrer</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="163"/>
<source>Decrypt Message</source>
- <translation>Decrypt Message</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="166"/>
<source>&amp;Decrypt &amp;Verify</source>
- <translation>&amp; Déchiffrer et vérifier</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="169"/>
<source>Decrypt and Verify Message</source>
- <translation>Déchiffrer et vérifier le message</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="175"/>
<source>&amp;Encrypt File</source>
- <translation>Chiffrer</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="176"/>
<source>Encrypt File</source>
- <translation>Chiffrer</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="179"/>
<source>&amp;Decrypt File</source>
- <translation>Dossier de déchiffrement</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="180"/>
<source>Decrypt File</source>
- <translation>Dossier de déchiffrement</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="183"/>
<source>&amp;Sign File</source>
- <translation>Et signe de signe</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="184"/>
<source>Sign File</source>
- <translation>Fichier de signe</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="187"/>
<source>&amp;Verify File</source>
- <translation>Vérifier le fichier</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="188"/>
<source>Verify File</source>
- <translation>Vérifier le fichier</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="192"/>
<source>&amp;Sign</source>
- <translation>&amp;Signe</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="195"/>
<source>Sign Message</source>
- <translation>Message de signe</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="198"/>
<source>&amp;Verify</source>
- <translation>&amp;Vérifier</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="201"/>
<source>Verify Message</source>
- <translation>Vérifier le message</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="207"/>
@@ -2588,320 +2794,358 @@
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="209"/>
<source>Import New Key From Editor</source>
- <translation>Importer une nouvelle clé de l&apos;éditeur</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="212"/>
<source>Manage &amp;Keys</source>
- <translation>Gérer et les clés</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="214"/>
<source>Open Keymanagement</source>
- <translation>Clés ouverte</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="220"/>
<source>&amp;About</source>
- <translation>&amp;À propos</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="222"/>
<source>Show the application&apos;s About box</source>
- <translation>Montrer l&apos;application à propos de la boîte</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="228"/>
<source>&amp;Check for Updates</source>
- <translation>Vérifier les mises à jour</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="230"/>
<source>Check for updates</source>
- <translation>Vérifier les mises à jour</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="233"/>
<source>Open &amp;Wizard</source>
- <translation>Open &amp; Wizard</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="234"/>
<source>Open the wizard</source>
- <translation>Ouvrir l&apos;assistant</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="239"/>
<source>Append Selected Key(s) To Text</source>
- <translation>Ajoutez la ou les touches sélectionnées sur le texte</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="240"/>
<source>Append The Selected Keys To Text in Editor</source>
- <translation>Ajouter les touches sélectionnées sur Text In Editor</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="243"/>
<source>Copy Email</source>
- <translation>Copier le courrier électronique</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="244"/>
<source>Copy selected Email to clipboard</source>
- <translation>Copier le courrier électronique sélectionné dans le presse-papiers</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="248"/>
<source>Show Key Details</source>
- <translation>Afficher les détails de la clé</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="249"/>
<source>Show Details for this Key</source>
- <translation>Afficher les détails de cette clé</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="252"/>
<source>Refresh Key From Key Server</source>
- <translation>Actualiser la clé de Key Server</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="253"/>
<source>Refresh key from default key server</source>
- <translation>Actualiser la clé à partir du serveur de clés par défaut</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="256"/>
<source>Upload Public Key(s) To Server</source>
- <translation>Télécharger des touches publiques sur le serveur</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="257"/>
<source>Upload The Selected Public Keys To Server</source>
- <translation>Téléchargez les touches publiques sélectionnées sur le serveur</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="272"/>
<source>Remove PGP Header</source>
- <translation>Supprimer l&apos;en-tête PGP</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="275"/>
<source>Add PGP Header</source>
- <translation>Ajouter l&apos;en-tête PGP</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="280"/>
<source>&amp;File</source>
- <translation>&amp;Déposer</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="293"/>
<source>&amp;Edit</source>
- <translation>&amp;Éditer</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="311"/>
<source>&amp;File...</source>
- <translation>&amp;Déposer...</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="317"/>
<source>&amp;Crypt</source>
- <translation>&amp;Crypte</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="328"/>
<source>&amp;Keys</source>
- <translation>&amp;Clés</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="329"/>
<source>&amp;Import Key</source>
- <translation>Clé d&apos;importation</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="338"/>
<source>&amp;Steganography</source>
- <translation>Stéganographie</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="347"/>
<source>&amp;View</source>
- <translation>&amp;Vue</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="349"/>
<source>&amp;Help</source>
- <translation>&amp;Aider</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="358"/>
<source>File</source>
- <translation>Déposer</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="366"/>
<source>Crypt</source>
- <translation>Crypte</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="376"/>
<source>Key</source>
- <translation>Clé</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="381"/>
<source>Edit</source>
- <translation>Éditer</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="388"/>
<source>Special Edit</source>
- <translation>Édition spéciale</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="400"/>
<source>Import key from...</source>
- <translation>Importer la clé de ...</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="401"/>
<source>Import key</source>
- <translation>Clé d&apos;importation</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="409"/>
<source>Browser to view and operate file</source>
- <translation>Navigateur pour voir et utiliser le fichier</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="410"/>
<source>Browser</source>
- <translation>Le navigateur</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="428"/>
<source>Ready</source>
- <translation>Prêt</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="435"/>
<source>Key ToolBox</source>
- <translation>Boîte à outils clé</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="443"/>
<source>Information Board</source>
- <translation>Tableau d&apos;information</translation>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PubkeyGetter</name>
+ <message>
+ <location filename="../../src/server/api/PubkeyGetter.cpp" line="66"/>
+ <location filename="../../src/server/api/PubkeyGetter.cpp" line="90"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/server/api/PubkeyGetter.cpp" line="67"/>
+ <location filename="../../src/server/api/PubkeyGetter.cpp" line="91"/>
+ <source>The communication content with the server does not meet the requirements</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PubkeyUploader</name>
+ <message>
+ <location filename="../../src/server/api/PubkeyUploader.cpp" line="95"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/server/api/PubkeyUploader.cpp" line="96"/>
+ <source>The communication content with the server does not meet the requirements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/server/api/PubkeyUploader.cpp" line="103"/>
+ <source>Warning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/server/api/PubkeyUploader.cpp" line="104"/>
+ <source>Partial failure of automatic pubkey exchange</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
<name>QApplication</name>
<message>
- <location filename="../../src/gpg/result_analyse/DecryptResultAnalyse.cpp" line="42"/>
- <source>&gt;Recipient: </source>
- <translation>&gt; Destinataire:</translation>
+ <location filename="../../src/gpg/result_analyse/DecryptResultAnalyse.cpp" line="66"/>
+ <source> {&gt;} Recipient: </source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="35"/>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="61"/>
<source>One or More Bad Signatures.</source>
- <translation>Une ou plusieurs mauvaises signatures.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="40"/>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="66"/>
<source>A </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="42"/>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="68"/>
<source>Good </source>
- <translation>Bien</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="45"/>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="71"/>
<source>Bad </source>
- <translation>Mal</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="48"/>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="74"/>
<source>Expired </source>
- <translation>Expiré</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="51"/>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="77"/>
<source>Missing Key&apos;s </source>
- <translation>Touches manquantes</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="54"/>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="80"/>
<source>Revoked Key&apos;s </source>
- <translation>Touche révoquée</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="57"/>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="83"/>
<source>Expired Key&apos;s </source>
- <translation>Clé expirée</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="60"/>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="86"/>
<source>Missing CRL&apos;s </source>
- <translation>CRL manquant</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="64"/>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="90"/>
<source>Signature Fully Valid.</source>
- <translation>Signature entièrement valide.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="66"/>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="92"/>
<source>Signature NOT Fully Valid.</source>
- <translation>Signature non complète valide.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="74"/>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="100"/>
<source>Key is NOT present with ID 0x</source>
- <translation>La clé n&apos;est pas présente avec ID 0x</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="81"/>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="107"/>
<source>A signature could NOT be verified due to a Missing Key
</source>
- <translation>Une signature n&apos;a pas pu être vérifiée en raison d&apos;une clé manquante</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="85"/>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="111"/>
<source>A signature is valid but the key used to verify the signature has been revoked
</source>
- <translation>Une signature est valide mais la clé utilisée pour vérifier la signature a été révoquée.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="93"/>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="119"/>
<source>A signature is valid but expired
</source>
- <translation>Une signature est valide mais expirée</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="100"/>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="126"/>
<source>A signature is valid but the key used to verify the signature has expired.
</source>
- <translation>Une signature est valide mais la clé utilisée pour vérifier la signature a expiré.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="107"/>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="133"/>
<source>There was some other error which prevented the signature verification.
</source>
- <translation>Il y avait une autre erreur qui empêchait la vérification de la signature.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="113"/>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="139"/>
<source>Error for key with fingerprint </source>
- <translation>Erreur pour la clé avec empreinte digitale</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="128"/>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="152"/>
<source>Signed By: </source>
- <translation>Signé par:</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -2909,22 +3153,22 @@
<message>
<location filename="../../src/ui/QuitDialog.cpp" line="29"/>
<source>Unsaved Files</source>
- <translation>Fichiers non enregistrés</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/QuitDialog.cpp" line="77"/>
<source>%1 files contain unsaved information.&lt;br/&gt;Save the changes before closing?</source>
- <translation>% 1 Les fichiers contiennent des informations non enregistrées. &lt;br/&gt; Enregistrez les modifications avant la fermeture?</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/QuitDialog.cpp" line="88"/>
<source>Check the files you want to save:</source>
- <translation>Vérifiez les fichiers que vous souhaitez enregistrer:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/QuitDialog.cpp" line="89"/>
<source>&lt;b&gt;Note:&lt;/b&gt; If you don&apos;t save these files, all changes are lost.&lt;br/&gt;</source>
- <translation>&lt;B&gt; REMARQUE: &lt;/ B&gt; Si vous ne enregistrez pas ces fichiers, toutes les modifications sont perdues. &lt;br/&gt;</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -2932,264 +3176,360 @@
<message>
<location filename="../../src/ui/SendMailDialog.cpp" line="35"/>
<source>Incomplete configuration</source>
- <translation>Configuration incomplète</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/SendMailDialog.cpp" line="36"/>
<source>The SMTP address is empty, please go to the setting interface to complete the configuration.</source>
- <translation>L&apos;adresse SMTP est vide, veuillez vous rendre à l&apos;interface de réglage pour compléter la configuration.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/SendMailDialog.cpp" line="86"/>
<source> Recipient cannot be empty
</source>
- <translation>Le destinataire ne peut pas être vide</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/SendMailDialog.cpp" line="91"/>
<source> One or more Recipient&apos;s Email Address is invalid
</source>
- <translation>L&apos;une ou plusieurs adresse électronique du destinataire est invalide</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/SendMailDialog.cpp" line="97"/>
<source> Sender cannot be empty
</source>
- <translation>L&apos;expéditeur ne peut pas être vide</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/SendMailDialog.cpp" line="99"/>
<source> Sender&apos;s Email Address is invalid
</source>
- <translation>L&apos;adresse email de l&apos;expéditeur n&apos;est pas valide</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/SendMailDialog.cpp" line="155"/>
<location filename="../../src/ui/SendMailDialog.cpp" line="160"/>
<location filename="../../src/ui/SendMailDialog.cpp" line="165"/>
<source>Fail</source>
- <translation>Échouer</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/SendMailDialog.cpp" line="155"/>
<source>Fail to Connect SMTP Server</source>
- <translation>Omettre de connecter SMTP Server</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/SendMailDialog.cpp" line="160"/>
<source>Fail to Login into SMTP Server</source>
- <translation>Omettre de vous connecter au serveur SMTP</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/SendMailDialog.cpp" line="165"/>
<source>Fail to Send Mail to SMTP Server</source>
- <translation>Omettre d&apos;envoyer un courrier au serveur SMTP</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/SendMailDialog.cpp" line="171"/>
<source>Success</source>
- <translation>Succès</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/SendMailDialog.cpp" line="171"/>
<source>Succeed in Sending Mail to SMTP Server</source>
- <translation>Réussir à envoyer un courrier au serveur SMTP</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SendMailTab</name>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="289"/>
+ <location filename="../../src/ui/settings/SettingsSendMail.cpp" line="33"/>
<source>Enable</source>
- <translation>Activer</translation>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/settings/SettingsSendMail.cpp" line="51"/>
+ <source>Check Connection</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="311"/>
+ <location filename="../../src/ui/settings/SettingsSendMail.cpp" line="53"/>
+ <source>General</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/settings/SettingsSendMail.cpp" line="54"/>
+ <source>Connection</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/settings/SettingsSendMail.cpp" line="55"/>
+ <source>Preference</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/settings/SettingsSendMail.cpp" line="61"/>
<source>SMTP Address</source>
- <translation>Adresse SMTP</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="313"/>
+ <location filename="../../src/ui/settings/SettingsSendMail.cpp" line="63"/>
<source>Username</source>
- <translation>Nom d&apos;utilisateur</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="315"/>
+ <location filename="../../src/ui/settings/SettingsSendMail.cpp" line="65"/>
<source>Password</source>
- <translation>Mot de passe</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="317"/>
+ <location filename="../../src/ui/settings/SettingsSendMail.cpp" line="67"/>
<source>Port</source>
- <translation>Port</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="319"/>
+ <location filename="../../src/ui/settings/SettingsSendMail.cpp" line="69"/>
<source>Connection Security</source>
- <translation>Sécurité de la connexion</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="322"/>
+ <location filename="../../src/ui/settings/SettingsSendMail.cpp" line="75"/>
<source>Default Sender</source>
- <translation>Expéditeur par défaut</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="404"/>
- <location filename="../../src/ui/SettingsDialog.cpp" line="408"/>
+ <location filename="../../src/ui/settings/SettingsSendMail.cpp" line="161"/>
+ <location filename="../../src/ui/settings/SettingsSendMail.cpp" line="165"/>
<source>Fail</source>
- <translation>Échouer</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="404"/>
+ <location filename="../../src/ui/settings/SettingsSendMail.cpp" line="161"/>
<source>Fail to Connect SMTP Server</source>
- <translation>Omettre de connecter SMTP Server</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="408"/>
+ <location filename="../../src/ui/settings/SettingsSendMail.cpp" line="165"/>
<source>Fail to Login</source>
- <translation>Échouer à se connecter</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="413"/>
+ <location filename="../../src/ui/settings/SettingsSendMail.cpp" line="170"/>
<source>Success</source>
- <translation>Succès</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="413"/>
+ <location filename="../../src/ui/settings/SettingsSendMail.cpp" line="170"/>
<source>Succeed in connecting and login</source>
- <translation>Réussir à connecter et à vous connecter</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SettingsDialog</name>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="40"/>
+ <location filename="../../src/ui/settings/SettingsDialog.cpp" line="39"/>
<source>General</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="41"/>
+ <location filename="../../src/ui/settings/SettingsDialog.cpp" line="40"/>
<source>Appearance</source>
- <translation>Apparence</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="42"/>
+ <location filename="../../src/ui/settings/SettingsDialog.cpp" line="41"/>
<source>Send Mail</source>
- <translation>Envoyer un mail</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="43"/>
+ <location filename="../../src/ui/settings/SettingsDialog.cpp" line="42"/>
<source>Key Server</source>
- <translation>Serveur de clés</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="45"/>
+ <location filename="../../src/ui/settings/SettingsDialog.cpp" line="44"/>
<source>Advanced</source>
- <translation>Avancée</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="58"/>
+ <location filename="../../src/ui/settings/SettingsDialog.cpp" line="59"/>
<source>Settings</source>
- <translation>Paramètres</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="103"/>
+ <location filename="../../src/ui/settings/SettingsDialog.cpp" line="105"/>
<source>System Default</source>
- <translation>Défaut du système</translation>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>SignResultAnalyse</name>
+ <message>
+ <location filename="../../src/gpg/result_analyse/SignResultAnalyse.cpp" line="29"/>
+ <source>[#] Sign Operation </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/SignResultAnalyse.cpp" line="32"/>
+ <source>[Success]</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/SignResultAnalyse.cpp" line="34"/>
+ <source>[Failed] </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/SignResultAnalyse.cpp" line="43"/>
+ <source>[&gt;] New Signature: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/SignResultAnalyse.cpp" line="47"/>
+ <source> Sign Mode: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/SignResultAnalyse.cpp" line="49"/>
+ <source>Normal</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/SignResultAnalyse.cpp" line="51"/>
+ <source>Clear</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/SignResultAnalyse.cpp" line="53"/>
+ <source>Detach</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/SignResultAnalyse.cpp" line="59"/>
+ <location filename="../../src/gpg/result_analyse/SignResultAnalyse.cpp" line="61"/>
+ <source> Signer: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/SignResultAnalyse.cpp" line="61"/>
+ <source>&lt;unknown&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/SignResultAnalyse.cpp" line="63"/>
+ <source> Public Key Algo: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/SignResultAnalyse.cpp" line="64"/>
+ <source> Hash Algo: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/SignResultAnalyse.cpp" line="65"/>
+ <source> Date &amp; Time: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/SignResultAnalyse.cpp" line="75"/>
+ <source>Invalid Signers: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/SignResultAnalyse.cpp" line="79"/>
+ <source>[&gt;] Signer: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/SignResultAnalyse.cpp" line="80"/>
+ <source> Fingerprint: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/SignResultAnalyse.cpp" line="81"/>
+ <source> Reason: </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>SignersPicker</name>
+ <message>
+ <location filename="../../src/ui/widgets/SignersPicker.cpp" line="28"/>
+ <source>Confirm</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SubkeyGenerateDialog</name>
<message>
- <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="46"/>
+ <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="47"/>
<source>Generate New Subkey</source>
- <translation>Générer une nouvelle sous-clé</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="61"/>
+ <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="62"/>
<source>Encryption</source>
- <translation>Chiffrement</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="64"/>
+ <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="65"/>
<source>Signing</source>
- <translation>Signature</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="67"/>
+ <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="68"/>
<source>Certification</source>
- <translation>Certification</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="70"/>
+ <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="71"/>
<source>Authentication</source>
- <translation>Authentification</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="114"/>
+ <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="115"/>
<source>Expiration Date:</source>
- <translation>Date d&apos;expiration:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="115"/>
+ <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="116"/>
<source>Never Expire</source>
- <translation>N&apos;expire jamais</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="116"/>
+ <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="117"/>
<source>KeySize (in Bit):</source>
- <translation>Keysize (dans le bit):</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="117"/>
+ <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="118"/>
<source>Key Type:</source>
- <translation>Type de clé:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="126"/>
+ <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="127"/>
<source>Basic Information</source>
- <translation>Informations de base</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="214"/>
+ <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="215"/>
<source> Expiration time no more than 2 years. </source>
- <translation>Heure d&apos;expiration Pas plus de 2 ans.</translation>
- </message>
- <message>
- <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="235"/>
- <source>Generating Subkey...</source>
- <translation>Génération de sous-clé ...</translation>
- </message>
- <message>
- <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="238"/>
- <source>Collecting random data for subkey generation.
- This may take a while.
- To speed up the process use your computer
- (e.g. browse the net, listen to music,...)</source>
- <translation>Collecte de données aléatoires pour la génération de sous-clé.
- Cela peut prendre un peu de temps.
- Pour accélérer le processus, utilisez votre ordinateur
- (E.G. Parcourir le Net, écoutez de la musique, ...)</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="309"/>
+ <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="244"/>
<source>Success</source>
- <translation>Succès</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="309"/>
+ <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="244"/>
<source>The new subkey has been generated.</source>
- <translation>La nouvelle sous-clé a été générée.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="311"/>
+ <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="247"/>
<source>Failure</source>
- <translation>Échec</translation>
- </message>
- <message>
- <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="311"/>
- <source>An error occurred during subkey generation.</source>
- <translation>Une erreur s&apos;est produite lors de la génération de sous-clé.</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -3197,13 +3537,13 @@
<message>
<location filename="../../src/ui/widgets/TextEdit.cpp" line="53"/>
<source>untitled</source>
- <translation>sans titre</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/TextEdit.cpp" line="120"/>
<location filename="../../src/ui/widgets/TextEdit.cpp" line="200"/>
<source>Warning</source>
- <translation>Avertissement</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/TextEdit.cpp" line="121"/>
@@ -3211,84 +3551,95 @@
<location filename="../../src/ui/widgets/TextEdit.cpp" line="482"/>
<source>Cannot read file %1:
%2.</source>
- <translation>Impossible de lire le fichier% 1:
-% 2.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/TextEdit.cpp" line="175"/>
<source>Open file</source>
- <translation>Fichier ouvert</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/TextEdit.cpp" line="251"/>
<source>File</source>
- <translation>Déposer</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/TextEdit.cpp" line="252"/>
<source>Cannot write file %1:
%2.</source>
- <translation>Impossible d&apos;écrire le fichier% 1:
-% 2.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/TextEdit.cpp" line="270"/>
<source>Save file</source>
- <translation>Enregistrer le fichier</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/TextEdit.cpp" line="333"/>
<source>Unsaved document</source>
- <translation>Document non enregistré</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/TextEdit.cpp" line="334"/>
<source>The document &quot;%1&quot; has been modified. Do you want to save your changes?&lt;br/&gt;</source>
- <translation>Le document &quot;% 1&quot; a été modifié.Voulez-vous enregistrer vos modifications? &lt;br/&gt;</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/TextEdit.cpp" line="337"/>
<source>&lt;b&gt;Note:&lt;/b&gt; If you don&apos;t save these files, all changes are lost.&lt;br/&gt;</source>
- <translation>&lt;B&gt; REMARQUE: &lt;/ B&gt; Si vous ne enregistrez pas ces fichiers, toutes les modifications sont perdues. &lt;br/&gt;</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/TextEdit.cpp" line="481"/>
<source>Application</source>
- <translation>Application</translation>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>UnknownSignersChecker</name>
+ <message>
+ <location filename="../../src/advance/UnknownSignersChecker.cpp" line="69"/>
+ <source>Warning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/advance/UnknownSignersChecker.cpp" line="70"/>
+ <source>Automatic public key exchange failed.</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
<name>UpdateTab</name>
<message>
- <location filename="../../src/ui/help/AboutDialog.cpp" line="127"/>
+ <location filename="../../src/ui/help/AboutDialog.cpp" line="129"/>
<source>It is recommended that you always check the version of GpgFrontend and upgrade to the latest version.</source>
- <translation>Il est recommandé de vérifier toujours la version de GPGFRontend et de la mise à niveau vers la dernière version.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/help/AboutDialog.cpp" line="129"/>
+ <location filename="../../src/ui/help/AboutDialog.cpp" line="131"/>
<source>New versions not only represent new features, but also often represent functional and security fixes.</source>
- <translation>De nouvelles versions représentent non seulement de nouvelles fonctionnalités, mais également des corrections fonctionnelles et de sécurité.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/help/AboutDialog.cpp" line="133"/>
+ <location filename="../../src/ui/help/AboutDialog.cpp" line="135"/>
<source>Current Version: </source>
- <translation>Version actuelle:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/help/AboutDialog.cpp" line="141"/>
+ <location filename="../../src/ui/help/AboutDialog.cpp" line="143"/>
<source>The current version is inconsistent with the latest version on github.</source>
- <translation>La version actuelle est incompatible avec la dernière version sur GitHub.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/help/AboutDialog.cpp" line="143"/>
+ <location filename="../../src/ui/help/AboutDialog.cpp" line="145"/>
<source>Please click &lt;a href=&quot;https://github.com/saturneric/GpgFrontend/releases&quot;&gt;here&lt;/a&gt; to download the latest version.</source>
- <translation>S&apos;il vous plaît cliquez sur &lt;a href=&quot;htttps://github.com/saturneric/gpgfronte/relases&quot;&gt; ici &lt;/a&gt; pour télécharger la dernière version.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/help/AboutDialog.cpp" line="187"/>
- <location filename="../../src/ui/help/AboutDialog.cpp" line="209"/>
+ <location filename="../../src/ui/help/AboutDialog.cpp" line="199"/>
+ <location filename="../../src/ui/help/AboutDialog.cpp" line="214"/>
<source>Latest Version From Github: </source>
- <translation>Dernière version de GitHub:</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -3296,32 +3647,32 @@
<message>
<location filename="../../src/ui/VerifyDetailsDialog.cpp" line="32"/>
<source>Signature Details</source>
- <translation>Détails de la signature</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/VerifyDetailsDialog.cpp" line="53"/>
<source>Status: </source>
- <translation>Statut:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/VerifyDetailsDialog.cpp" line="56"/>
<source>No valid input found</source>
- <translation>Aucune entrée valide trouvée</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/VerifyDetailsDialog.cpp" line="67"/>
<source>Error Validating signature</source>
- <translation>Erreur lors de la validation de la signature</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/VerifyDetailsDialog.cpp" line="70"/>
<source>File was signed on %1 &lt;br/&gt; It Contains:&lt;br/&gt;&lt;br/&gt;</source>
- <translation>Le fichier a été signé sur% 1 &lt;br/&gt; contient: &lt;br/&gt; &lt;br/&gt;</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/VerifyDetailsDialog.cpp" line="72"/>
<source>Signed on %1 &lt;br/&gt; It Contains:&lt;br /&gt;&lt;br/&gt;</source>
- <translation>Signé sur% 1 &lt;br/&gt; Il contient: &lt;br /&gt; &lt;br/&gt;</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -3329,22 +3680,22 @@
<message>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="36"/>
<source>Import from keyserver</source>
- <translation>Importer à partir de Keyserver</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="39"/>
<source>Key not present with id 0x</source>
- <translation>Clé non présente avec ID 0x</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="43"/>
<source>Status:</source>
- <translation>Statut:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="45"/>
<source>Key not present in keylist</source>
- <translation>Clé non présente dans Keylist</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="58"/>
@@ -3354,7 +3705,7 @@
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="115"/>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="129"/>
<source>Key Information is NOT Available</source>
- <translation>Les informations clés ne sont pas disponibles</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="60"/>
@@ -3364,137 +3715,134 @@
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="117"/>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="131"/>
<source>Fingerprint: </source>
- <translation>Empreinte digitale:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="67"/>
<source>Status: Cert Revoked</source>
- <translation>Statut: certificat révoqué</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="81"/>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="95"/>
<source>Status: Signature Expired</source>
- <translation>Statut: Signature EXPIRÉ</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="96"/>
<source>Status: Key Expired</source>
- <translation>Statut: clé expirée</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="110"/>
<source>Status: General Error</source>
- <translation>Statut: erreur générale</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="124"/>
<source>Status: Unknown Error</source>
- <translation>Statut: erreur inconnue</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="159"/>
<source>Signer Name:</source>
- <translation>Nom du signataire:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="160"/>
<source>Signer Email:</source>
- <translation>Signer Email:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="161"/>
<source>Key&apos;s Fingerprint:</source>
- <translation>Empreinte digitale de la clé:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="162"/>
<source>Valid:</source>
- <translation>Valide:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="163"/>
<source>Flags:</source>
- <translation>Drapeaux:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="171"/>
<source>Fully Valid</source>
- <translation>Entièrement valable</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="173"/>
<source>NOT Fully Valid</source>
- <translation>Pas complètement valide</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="180"/>
<source>Good </source>
- <translation>Bien</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="183"/>
<source>Bad </source>
- <translation>Mal</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="186"/>
<source>Expired </source>
- <translation>Expiré</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="189"/>
<source>Missing Key </source>
- <translation>Clé manquante</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="192"/>
<source>Revoked Key </source>
- <translation>Clé révoquée</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="195"/>
<source>Expired Key </source>
- <translation>Clé expirée</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="198"/>
<source>Missing CRL </source>
- <translation>CRL manquant</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
- <name>Wizard</name>
+ <name>VerifyResultAnalyse</name>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="46"/>
- <source>First Start Wizard</source>
- <translation>Assistant de premier départ</translation>
- </message>
- <message>
- <location filename="../../src/ui/Wizard.cpp" line="76"/>
- <source>Import Error</source>
- <translation>Erreur d&apos;importation</translation>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="31"/>
+ <source>[#] Verify Operation </source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="76"/>
- <source>Couldn&apos;t locate any keyring file in %1</source>
- <translation>Impossible de localiser un fichier de porte-clés en% 1</translation>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="34"/>
+ <source>[Success]</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="84"/>
- <location filename="../../src/ui/Wizard.cpp" line="95"/>
- <source>Import error</source>
- <translation>Erreur d&apos;importation</translation>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="36"/>
+ <source>[Failed] </source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="85"/>
- <source>Couldn&apos;t open private keyringfile: %1</source>
- <translation>Impossible d&apos;ouvrir le keyRingfile privé:% 1</translation>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="158"/>
+ <source>&lt;Unknown&gt;</source>
+ <translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>Wizard</name>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="96"/>
- <source>Couldn&apos;t open public keyringfile: %1</source>
- <translation>Impossible d&apos;ouvrir le keyRingfile publique:% 1</translation>
+ <location filename="../../src/ui/Wizard.cpp" line="40"/>
+ <source>First Start Wizard</source>
+ <translation type="unfinished"></translation>
</message>
</context>
</TS>
diff --git a/resource/ts/gpgfrontend_ru.ts b/resource/ts/gpgfrontend_ru.ts
index 65fb3765..a37303ef 100644
--- a/resource/ts/gpgfrontend_ru.ts
+++ b/resource/ts/gpgfrontend_ru.ts
@@ -6,195 +6,306 @@
<message>
<location filename="../../src/ui/help/AboutDialog.cpp" line="35"/>
<source>About </source>
- <translation>О</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/help/AboutDialog.cpp" line="42"/>
<source>General</source>
- <translation>Общий</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/help/AboutDialog.cpp" line="43"/>
<source>Translators</source>
- <translation>Переводчики</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/help/AboutDialog.cpp" line="44"/>
<source>Update</source>
- <translation>Обновлять</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
<name>AdvancedTab</name>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="679"/>
- <source>Show Steganography Options [Advanced]</source>
- <translation>Показать объекты стеганографии [Advanced]</translation>
+ <location filename="../../src/ui/settings/SettingsAdvanced.cpp" line="34"/>
+ <source>Show Steganography Options</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="681"/>
+ <location filename="../../src/ui/settings/SettingsAdvanced.cpp" line="36"/>
<source>Show Steganographic Options.</source>
- <translation>Показать стеганографические варианты.</translation>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/settings/SettingsAdvanced.cpp" line="40"/>
+ <source>Pubkey Exchange</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/settings/SettingsAdvanced.cpp" line="42"/>
+ <source>Auto Pubkey Exchange</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
<name>AppearanceTab</name>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="444"/>
+ <location filename="../../src/ui/settings/SettingsAppearance.cpp" line="34"/>
<source>Iconsize</source>
- <translation>Iconsize.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="446"/>
+ <location filename="../../src/ui/settings/SettingsAppearance.cpp" line="36"/>
<source>small</source>
- <translation>небольшой</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="447"/>
+ <location filename="../../src/ui/settings/SettingsAppearance.cpp" line="37"/>
<source>medium</source>
- <translation>Средняя</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="448"/>
+ <location filename="../../src/ui/settings/SettingsAppearance.cpp" line="38"/>
<source>large</source>
- <translation>большой</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="464"/>
+ <location filename="../../src/ui/settings/SettingsAppearance.cpp" line="54"/>
<source>Iconstyle</source>
- <translation>Iconstyle.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="466"/>
+ <location filename="../../src/ui/settings/SettingsAppearance.cpp" line="56"/>
<source>just text</source>
- <translation>просто текст</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="467"/>
+ <location filename="../../src/ui/settings/SettingsAppearance.cpp" line="57"/>
<source>just icons</source>
- <translation>Просто иконы</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="468"/>
+ <location filename="../../src/ui/settings/SettingsAppearance.cpp" line="58"/>
<source>text and icons</source>
- <translation>текст и значки</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="484"/>
+ <location filename="../../src/ui/settings/SettingsAppearance.cpp" line="74"/>
<source>Windowstate</source>
- <translation>Indowstate.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="487"/>
+ <location filename="../../src/ui/settings/SettingsAppearance.cpp" line="77"/>
<source>Save window size and position on exit.</source>
- <translation>Сохранить размер окна и положение на выходе.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="495"/>
+ <location filename="../../src/ui/settings/SettingsAppearance.cpp" line="85"/>
<source>Information Board</source>
- <translation>Доска объявлений</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="501"/>
+ <location filename="../../src/ui/settings/SettingsAppearance.cpp" line="91"/>
<source> Front Size</source>
- <translation>Передний размер</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ChoosePage</name>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="165"/>
+ <location filename="../../src/ui/Wizard.cpp" line="121"/>
<source>Choose your action...</source>
- <translation>Выберите свое действие ...</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="166"/>
+ <location filename="../../src/ui/Wizard.cpp" line="122"/>
<source>...by clicking on the appropriate link.</source>
- <translation>... нажав на соответствующую ссылку.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="168"/>
+ <location filename="../../src/ui/Wizard.cpp" line="124"/>
<source>If you have never used GPGFrontend before and also don&apos;t own a gpg key yet you may possibly want to read how to</source>
- <translation>Если вы никогда не использовали GPGFRontend раньше, а также не владеть ключом GPG, но вы, возможно, хотите прочитать, как</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="170"/>
+ <location filename="../../src/ui/Wizard.cpp" line="127"/>
<source>Generate Key</source>
- <translation>Генерировать ключ</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="176"/>
+ <location filename="../../src/ui/Wizard.cpp" line="134"/>
<source>If you want to learn how to encrypt, decrypt, sign and verify text, you can read </source>
- <translation>Если вы хотите узнать, как зашифровать, расшифровать, подписать и проверить текст, вы можете прочитать</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="178"/>
+ <location filename="../../src/ui/Wizard.cpp" line="136"/>
<source>Encrypt &amp; Decrypt Text</source>
- <translation>Шифра и расшифровывать текст</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="178"/>
- <location filename="../../src/ui/Wizard.cpp" line="190"/>
+ <location filename="../../src/ui/Wizard.cpp" line="136"/>
+ <location filename="../../src/ui/Wizard.cpp" line="149"/>
<source>or</source>
- <translation>или же</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="180"/>
+ <location filename="../../src/ui/Wizard.cpp" line="138"/>
<source>Sign &amp; Verify Text</source>
- <translation>Знак и проверить текст</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="188"/>
+ <location filename="../../src/ui/Wizard.cpp" line="146"/>
<source>If you want to operate file, you can read </source>
- <translation>Если вы хотите управлять файлом, вы можете прочитать</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="190"/>
+ <location filename="../../src/ui/Wizard.cpp" line="149"/>
<source>Encrypt &amp; Sign File</source>
- <translation>Шифра и файл знака</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="192"/>
+ <location filename="../../src/ui/Wizard.cpp" line="152"/>
<source>Sign &amp; Verify File</source>
- <translation>Знак и проверять файл</translation>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ComUtils</name>
+ <message>
+ <location filename="../../src/server/ComUtils.cpp" line="35"/>
+ <location filename="../../src/server/ComUtils.cpp" line="55"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/server/ComUtils.cpp" line="35"/>
+ <source>Nothing Reply. Please check the Internet connection.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/server/ComUtils.cpp" line="55"/>
+ <source>Unknown Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/server/ComUtils.cpp" line="75"/>
+ <location filename="../../src/server/ComUtils.cpp" line="90"/>
+ <source>Network Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/server/ComUtils.cpp" line="75"/>
+ <source>Outdated Reply</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/server/ComUtils.cpp" line="87"/>
+ <source>Unknown Reason</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/server/ComUtils.cpp" line="90"/>
+ <source>Unknown Reply Format</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ConclusionPage</name>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="407"/>
+ <location filename="../../src/ui/Wizard.cpp" line="224"/>
<source>Ready.</source>
- <translation>Готовый.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="408"/>
+ <location filename="../../src/ui/Wizard.cpp" line="225"/>
<source>Have fun with GPGFrontend!</source>
- <translation>Веселитесь с GPGFRontend!</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="410"/>
+ <location filename="../../src/ui/Wizard.cpp" line="227"/>
<source>You are ready to use GPGFrontend now.&lt;br&gt;&lt;br&gt;</source>
- <translation>Вы готовы использовать GPGFRontend сейчас. &lt;br&gt; &lt;br&gt; &lt;br&gt;</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="412"/>
+ <location filename="../../src/ui/Wizard.cpp" line="229"/>
<source>The Online Document</source>
- <translation>Онлайн документ</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="413"/>
+ <location filename="../../src/ui/Wizard.cpp" line="231"/>
<source> will get you started with GPGFrontend. It will open in the main window.&lt;br&gt;</source>
- <translation>Получу, вы начали с GPGFRontend.Он откроется в главном окне. &lt;br&gt;</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="420"/>
+ <location filename="../../src/ui/Wizard.cpp" line="238"/>
<source>Open offline help.</source>
- <translation>Откройте автономную помощь.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="423"/>
+ <location filename="../../src/ui/Wizard.cpp" line="241"/>
<source>Dont show the wizard again.</source>
- <translation>Не показывать волшебник снова.</translation>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DecryptResultAnalyse</name>
+ <message>
+ <location filename="../../src/gpg/result_analyse/DecryptResultAnalyse.cpp" line="30"/>
+ <source>[#] Decrypt Operation </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/DecryptResultAnalyse.cpp" line="33"/>
+ <source>[Success]</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/DecryptResultAnalyse.cpp" line="35"/>
+ <source>[Failed] </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/DecryptResultAnalyse.cpp" line="39"/>
+ <source>Unsupported Algo: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/DecryptResultAnalyse.cpp" line="46"/>
+ <source>File Name: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/DecryptResultAnalyse.cpp" line="52"/>
+ <source>Recipient(s): </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/DecryptResultAnalyse.cpp" line="82"/>
+ <source> Keu ID: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/DecryptResultAnalyse.cpp" line="83"/>
+ <source> Public Algo: </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>EncryptResultAnalyse</name>
+ <message>
+ <location filename="../../src/gpg/result_analyse/EncryptResultAnalyse.cpp" line="41"/>
+ <source>Invalid Recipients: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/EncryptResultAnalyse.cpp" line="44"/>
+ <source>Fingerprint: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/EncryptResultAnalyse.cpp" line="45"/>
+ <source>Reason: </source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -202,99 +313,98 @@
<message>
<location filename="../../src/ui/FileEncryptionDialog.cpp" line="32"/>
<source>Decrypt File</source>
- <translation>Дешифративный файл</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/FileEncryptionDialog.cpp" line="34"/>
<source>Encrypt File</source>
- <translation>Зашифруйте файл</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/FileEncryptionDialog.cpp" line="36"/>
<source>Sign File</source>
- <translation>Знак файла</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/FileEncryptionDialog.cpp" line="38"/>
<source>Verify File</source>
- <translation>Проверьте файл</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/FileEncryptionDialog.cpp" line="47"/>
<source>Input Parameters</source>
- <translation>Входные параметры</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/FileEncryptionDialog.cpp" line="53"/>
<source>Target File</source>
- <translation>Целевой файл</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/FileEncryptionDialog.cpp" line="59"/>
<source>Output File</source>
- <translation>Выходной файл</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/FileEncryptionDialog.cpp" line="75"/>
<source>Signature File(.sig) Path</source>
- <translation>Подпись файла (.сиг) путь</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/FileEncryptionDialog.cpp" line="134"/>
<location filename="../../src/ui/FileEncryptionDialog.cpp" line="177"/>
<source>Open File</source>
- <translation>Открыть файл</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/FileEncryptionDialog.cpp" line="165"/>
<source>Save File</source>
- <translation>Сохранить файл</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/FileEncryptionDialog.cpp" line="194"/>
<location filename="../../src/ui/FileEncryptionDialog.cpp" line="245"/>
<source>Couldn&apos;t open file</source>
- <translation>Не мог открыть файл</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/FileEncryptionDialog.cpp" line="213"/>
<location filename="../../src/ui/FileEncryptionDialog.cpp" line="224"/>
<location filename="../../src/ui/FileEncryptionDialog.cpp" line="235"/>
<source>Error</source>
- <translation>Ошибка</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/FileEncryptionDialog.cpp" line="214"/>
<source>Error Occurred During Encryption</source>
- <translation>Произошла ошибка во время шифрования</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/FileEncryptionDialog.cpp" line="225"/>
<source>Error Occurred During Decryption</source>
- <translation>Произошла ошибка во время дешифрования</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/FileEncryptionDialog.cpp" line="236"/>
<source>Error Occurred During Signature</source>
- <translation>Произошла ошибка во время подписи</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/FileEncryptionDialog.cpp" line="259"/>
<location filename="../../src/ui/FileEncryptionDialog.cpp" line="268"/>
<source>File</source>
- <translation>Файл</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/FileEncryptionDialog.cpp" line="260"/>
<source>File exists! Do you want to overwrite it?</source>
- <translation>Файл существует!Вы хотите перезаписать это?</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/FileEncryptionDialog.cpp" line="269"/>
<source>Cannot write file %1:
%2.</source>
- <translation>Невозможно написать файл% 1:
-% 2.</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -302,52 +412,52 @@
<message>
<location filename="../../src/ui/widgets/FilePage.cpp" line="161"/>
<source>Open</source>
- <translation>Открыть</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/FilePage.cpp" line="163"/>
<source>Delete</source>
- <translation>Удалить</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/FilePage.cpp" line="165"/>
<source>Encrypt and Sign</source>
- <translation>Шифровать и подписать</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/FilePage.cpp" line="167"/>
<source>Decrypt and Verify</source>
- <translation>Расшифровать и проверить</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/FilePage.cpp" line="169"/>
<source>Only Sign</source>
- <translation>Только знак</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/FilePage.cpp" line="171"/>
<source>Only Verify</source>
- <translation>Только проверить</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/FilePage.cpp" line="222"/>
<source>Warning</source>
- <translation>Предупреждение</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/FilePage.cpp" line="223"/>
<source>Are you sure you want to delete it?</source>
- <translation>Вы уверены, что хотите это удалить?</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/FilePage.cpp" line="233"/>
<source>Error</source>
- <translation>Ошибка</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/FilePage.cpp" line="234"/>
<source>Unable to delete the file or folder.</source>
- <translation>Невозможно удалить файл или папку.</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -355,202 +465,179 @@
<message>
<location filename="../../src/ui/FindWidget.cpp" line="38"/>
<source>Find:</source>
- <translation>Находить:</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
<name>GeneralTab</name>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="137"/>
- <source>Remember Password</source>
- <translation>Напомнить пароль</translation>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="40"/>
+ <source>GpgFrontend Server</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="140"/>
- <source>Remember password until closing gpg4usb</source>
- <translation>Запомните пароль до закрытия GPG4UUSB</translation>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="45"/>
+ <source>Server that provides short key and key exchange services</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="147"/>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="52"/>
<source>Save Checked Keys</source>
- <translation>Сохранить проверенные ключи</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="150"/>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="55"/>
<source>Save checked private keys on exit and restore them on next start.</source>
- <translation>Сохранить проверенные закрытые ключи на выходе и восстановить их на следующем запуске.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="159"/>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="64"/>
<source>Confirm drag&apos;n&apos;drop key import</source>
- <translation>Подтвердите импорт ключа Drag&apos;n&apos;drop</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="162"/>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="67"/>
<source>Import files dropped on the keylist without confirmation.</source>
- <translation>Файлы импорта упали на кейлист без подтверждения.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="169"/>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="74"/>
<source>Language</source>
- <translation>Язык</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="178"/>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="83"/>
<source>&lt;b&gt;NOTE: &lt;/b&gt; GpgFrontend will restart automatically if you change the language!</source>
- <translation>&lt;b&gt; Примечание: &lt;/ b&gt; gpgfrontend автоматически перезагрузится, если вы измените язык!</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="187"/>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="92"/>
<source>Own key</source>
- <translation>Собственный ключ</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="195"/>
- <source>&lt;none&gt;</source>
- <translation>&lt;none&gt;</translation>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="96"/>
+ <source>Get Service Token</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="209"/>
- <source>Key pair for synchronization and identity authentication</source>
- <translation>Пара ключей для синхронизации и аутентификации идентичности</translation>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="97"/>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="234"/>
+ <source>No Service Token Found</source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>GpgME::GpgContext</name>
<message>
- <location filename="../../src/gpg/GpgContext.cpp" line="528"/>
- <source>Wrong password</source>
- <translation>Неправильный пароль</translation>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="103"/>
+ <source>&lt;none&gt;</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/GpgContext.cpp" line="536"/>
- <source>Enter Password for</source>
- <translation>Введите пароль для</translation>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="120"/>
+ <source>Key pair for synchronization and identity authentication</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/GpgContext.cpp" line="540"/>
- <source>Enter Password</source>
- <translation>Введите пароль</translation>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="252"/>
+ <source>Invalid Operation</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/GpgContext.cpp" line="706"/>
- <source>Key Selection</source>
- <translation>Выбор ключа</translation>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="253"/>
+ <source>Own Key can not be None while getting service token.</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/GpgContext.cpp" line="706"/>
- <source>No Private Key Selected</source>
- <translation>Нет закрытого ключа</translation>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="265"/>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="336"/>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="353"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/GpgContext.cpp" line="746"/>
- <source>Error in signing:</source>
- <translation>Ошибка в подписании:</translation>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="266"/>
+ <source>Key Not Exists</source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>GpgPathsTab</name>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="711"/>
- <source>Relative path to keydb</source>
- <translation>Относительный путь к Keydb</translation>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="337"/>
+ <source>The communication content with the server does not meet the requirements</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="724"/>
- <source>Current keydb path: </source>
- <translation>Текущий путь ключей:</translation>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="350"/>
+ <source>Notice</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="729"/>
- <source>&lt;b&gt;NOTE: &lt;/b&gt; Gpg4usb will restart automatically if you change the keydb path!</source>
- <translation>&lt;b&gt; Примечание: &lt;/ b&gt; GPG4USB автоматически перезагрузится, если вы измените путь ключей!</translation>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="351"/>
+ <source>Succeed in getting service token</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="758"/>
- <source>Choose keydb directory</source>
- <translation>Выберите каталог keydb.</translation>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="353"/>
+ <source>There is a problem with the communication with the server</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
- <name>ImportFromGnupgPage</name>
- <message>
- <location filename="../../src/ui/Wizard.cpp" line="302"/>
- <source>Import keys...</source>
- <translation>Импорт клавиш ...</translation>
- </message>
- <message>
- <location filename="../../src/ui/Wizard.cpp" line="303"/>
- <source>...from existing GnuPG installation</source>
- <translation>... Из существующей установки GNUPG</translation>
- </message>
- <message>
- <location filename="../../src/ui/Wizard.cpp" line="305"/>
- <source>You can import keys from a locally installed GnuPG.&lt;br&gt;&lt;br&gt; The location is read from registry in Windows or assumed to be the .gnupg folder in the your home directory in Linux.&lt;br&gt;</source>
- <translation>Вы можете импортировать ключи от локально установленного GNUPG. &lt;br&gt; &lt;br&gt; Местоположение читается из реестра в Windows или предполагается, что папка .gnupg в вашем домашнем каталоге в Linux. &lt;br&gt; &lt;br&gt; &lt;br&gt; &lt;br&gt; &lt;br&gt; &lt;br&gt; &lt;br&gt; &lt;br&gt; &lt;br&gt; &lt;br&gt; &lt;br&gt; &lt;br&gt; &lt;br&gt; &lt;br&gt; &lt;br&gt;</translation>
- </message>
- <message>
- <location filename="../../src/ui/Wizard.cpp" line="309"/>
- <source>Import keys from GnuPG</source>
- <translation>Импорт клавиш от GNUPG</translation>
- </message>
+ <name>GpgME::GpgContext</name>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="323"/>
- <source>Import Error</source>
- <translation>Ошибка импорта</translation>
+ <location filename="../../src/gpg/gpg_context/GpgContext.cpp" line="184"/>
+ <source>Wrong password</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="323"/>
- <source>Couldn&apos;t locate GnuPG home directory</source>
- <translation>Не мог найти домашний каталог GNUPG</translation>
+ <location filename="../../src/gpg/gpg_context/GpgContext.cpp" line="192"/>
+ <source>Enter Password for</source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>ImportFromGpg4usbPage</name>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="225"/>
- <source>Import from...</source>
- <translation>Импорт из ...</translation>
+ <location filename="../../src/gpg/gpg_context/GpgContext.cpp" line="196"/>
+ <source>Enter Password</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="226"/>
- <source>...existing GPGFrontend</source>
- <translation>... Существующие GPGFRontend</translation>
+ <location filename="../../src/gpg/gpg_context/GpgContext.cpp" line="258"/>
+ <source>Processing</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="228"/>
- <source>You can import keys and/or settings from existing GPGFrontend. &lt;br&gt;&lt;br&gt;Just check what you want to import, click the import button and choose the directory of your other GPGFrontend in the appearing file dialog.</source>
- <translation>Вы можете импортировать ключи и / или настройки из существующих GPGFRontend.&lt;br&gt; &lt;br&gt; &lt;br&gt; Просто проверьте, что вы хотите импортировать, нажмите кнопку «Импорт» и выберите каталог других GPGFRontend в диалоговом окне появления файла.</translation>
+ <location filename="../../src/gpg/gpg_context/GpgContextBasicOpera.cpp" line="164"/>
+ <source>Key Selection</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="235"/>
- <source>Keys</source>
- <translation>Ключи</translation>
+ <location filename="../../src/gpg/gpg_context/GpgContextBasicOpera.cpp" line="164"/>
+ <source>No Private Key Selected</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="239"/>
- <source>Configuration</source>
- <translation>Конфигурация</translation>
+ <location filename="../../src/gpg/gpg_context/GpgContextBasicOpera.cpp" line="195"/>
+ <source>Error in signing:</source>
+ <translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>GpgPathsTab</name>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="241"/>
- <source>Import from GPGFrontend</source>
- <translation>Импорт от GPGFRontend</translation>
+ <location filename="../../src/ui/settings/SettingsDialog.cpp" line="139"/>
+ <source>Relative path to keydb</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="256"/>
- <source>Other GPGFrontend directory</source>
- <translation>Другие каталога GPGFRontend</translation>
+ <location filename="../../src/ui/settings/SettingsDialog.cpp" line="152"/>
+ <source>Current keydb path: </source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="275"/>
- <source>Configuration Imported</source>
- <translation>Конфигурация импортирована</translation>
+ <location filename="../../src/ui/settings/SettingsDialog.cpp" line="157"/>
+ <source>&lt;b&gt;NOTE: &lt;/b&gt; Gpg4usb will restart automatically if you change the keydb path!</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="276"/>
- <source>Imported Configuration from old GPGFrontend.&lt;br&gt;Will now restart to activate the configuration.</source>
- <translation>Импортированная конфигурация из старых GPGFRontend. &lt;br&gt; теперь перезагрузится, чтобы активировать конфигурацию.</translation>
+ <location filename="../../src/ui/settings/SettingsDialog.cpp" line="186"/>
+ <source>Choose keydb directory</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -558,78 +645,78 @@
<message>
<location filename="../../src/ui/widgets/InfoBoardWidget.cpp" line="40"/>
<source>Import missing key from Keyserver</source>
- <translation>Импортировать недостающий ключ от Keyserver</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/InfoBoardWidget.cpp" line="57"/>
- <source>Optional Actions Menu</source>
- <translation>Дополнительные действия меню действий</translation>
+ <source>Optional Actions</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
<name>InfoTab</name>
<message>
- <location filename="../../src/ui/help/AboutDialog.cpp" line="74"/>
+ <location filename="../../src/ui/help/AboutDialog.cpp" line="76"/>
<source>&lt;br&gt;&lt;center&gt;GPGFrontend is an easy-to-use, compact, cross-platform, &lt;br&gt;and installation-free gpg front-end tool.&lt;br&gt;It visualizes most of the common operations of gpg commands.&lt;br&gt;It&apos;s licensed under the GPL v3&lt;br&gt;&lt;br&gt;&lt;b&gt;Developer:&lt;/b&gt;&lt;br&gt;Saturneric&lt;br&gt;&lt;br&gt;If you have any questions or suggestions, raise an issue&lt;br/&gt;at &lt;a href=&quot;https://github.com/saturneric/GpgFrontend&quot;&gt;GitHub&lt;/a&gt; or send a mail to my mailing list at &lt;a href=&quot;mailto:[email protected]&quot;&gt;[email protected]&lt;/a&gt;.</source>
- <translation>&lt;br&gt; &lt;Center&gt; GPGFRontend - это простое в использовании, компактной, кроссплатформе, &lt;br&gt; и без установочного интерфейса GPG. &lt;br&gt; это визуализирует большую часть общих операций команд GPG. &lt;BR&gt; Он лицензирован под GPL V3 &lt;br&gt; &lt;br&gt; &lt;b&gt; &lt;br&gt; &lt;br&gt; &lt;br&gt; &lt;br&gt; &lt;br&gt; &lt;br&gt; &lt;br&gt; &lt;br&gt; &lt;br&gt; &lt;br&gt; &lt;br&gt; &lt;br&gt; &lt;br&gt; Если у вас есть какие-либо вопросы или предложения, повысить проблему &lt;br/&gt;href = &quot;https://github.com/saturneric/gpgfrontend&quot;&gt; github &lt;/a&gt; или отправьте письмо в мой список рассылки на &lt;a href=&quot;mailte: @bktus.com&quot;&gt; [email protected] &lt;/ a&gt;.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/help/AboutDialog.cpp" line="82"/>
+ <location filename="../../src/ui/help/AboutDialog.cpp" line="84"/>
<source>&lt;br&gt;&lt;br&gt; Built with Qt </source>
- <translation>&lt;br&gt; &lt;br&gt; построен с Qt</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/help/AboutDialog.cpp" line="83"/>
+ <location filename="../../src/ui/help/AboutDialog.cpp" line="85"/>
<source> and GPGME </source>
- <translation>и GPGME</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/help/AboutDialog.cpp" line="84"/>
+ <location filename="../../src/ui/help/AboutDialog.cpp" line="86"/>
<source>&lt;br&gt;Built at </source>
- <translation>&lt;br&gt; построен</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
<name>IntroPage</name>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="111"/>
+ <location filename="../../src/ui/Wizard.cpp" line="66"/>
<source>Getting Started...</source>
- <translation>Начиная...</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="112"/>
+ <location filename="../../src/ui/Wizard.cpp" line="67"/>
<source>... with GPGFrontend</source>
- <translation>... с gpgfrontend</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="114"/>
+ <location filename="../../src/ui/Wizard.cpp" line="69"/>
<source>Welcome to use GPGFrontend for decrypting and signing text or file!</source>
- <translation>Добро пожаловать использовать GPGFRontend для расшифровки и подписания текста или файла!</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="116"/>
+ <location filename="../../src/ui/Wizard.cpp" line="71"/>
<source>is a Powerful, Easy-to-Use, Compact, Cross-Platform, and Installation-Free OpenPGP Crypto Tool.</source>
- <translation>Является мощным, простым в использовании, компактной, кроссплатформенной и монтажной программой Crypto Crypto OpenPGP.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="117"/>
+ <location filename="../../src/ui/Wizard.cpp" line="72"/>
<source>For brief information have a look at the</source>
- <translation>Для краткой информации посмотрите на</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="118"/>
+ <location filename="../../src/ui/Wizard.cpp" line="74"/>
<source>Overview</source>
- <translation>Обзор</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="119"/>
+ <location filename="../../src/ui/Wizard.cpp" line="75"/>
<source>by clicking the link, the page will open in the web browser</source>
- <translation>Нажав на ссылку, страница откроется в веб-браузере</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="127"/>
+ <location filename="../../src/ui/Wizard.cpp" line="83"/>
<source>Choose a Language</source>
- <translation>Выберите язык</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -637,182 +724,161 @@
<message>
<location filename="../../src/ui/keypair_details/KeyDetailsDialog.cpp" line="31"/>
<source>KeyPair</source>
- <translation>Keypair.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyDetailsDialog.cpp" line="32"/>
<source>UIDs</source>
- <translation>UIDs</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyDetailsDialog.cpp" line="33"/>
<source>Subkeys</source>
- <translation>Подсказки</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyDetailsDialog.cpp" line="40"/>
<source>Key Details</source>
- <translation>Основные детали</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
<name>KeyGenDialog</name>
<message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="32"/>
+ <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="33"/>
<source>Generate Key</source>
- <translation>Генерировать ключ</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="68"/>
+ <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="69"/>
<source> Name must contain at least five characters.
</source>
- <translation>Имя должно содержать не менее пяти символов.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="70"/>
+ <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="71"/>
<source> Please give a email address.
</source>
- <translation>Пожалуйста, дайте адрес электронной почты.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="77"/>
+ <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="78"/>
<source> Expiration time no more than 2 years.
</source>
- <translation>Время истечения не более 2 лет.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="103"/>
- <source>Generating Key...</source>
- <translation>Генератор ключа ...</translation>
+ <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="112"/>
+ <source>Success</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="106"/>
- <source>Collecting random data for key generation.
- This may take a while.
- To speed up the process use your computer
- (e.g. browse the net, listen to music,...)</source>
- <translation>Сбор случайных данных для генерации ключей.
- Это может занять некоторое время.
- Чтобы ускорить процесс, используйте свой компьютер
- (например, просмотрите чистую, слушаю музыку, ...)</translation>
+ <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="112"/>
+ <source>The new key pair has been generated.</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="150"/>
+ <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="116"/>
+ <source>Failure</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="145"/>
<source>Key Usage</source>
- <translation>Ключевое использование</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="152"/>
+ <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="147"/>
<source>Encryption</source>
- <translation>Шифрование</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="155"/>
+ <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="150"/>
<source>Signing</source>
- <translation>Подписание</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="158"/>
+ <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="153"/>
<source>Certification</source>
- <translation>Сертификация</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="161"/>
+ <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="156"/>
<source>Authentication</source>
- <translation>Аутентификация</translation>
- </message>
- <message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="312"/>
- <source>Success</source>
- <translation>Успех</translation>
- </message>
- <message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="312"/>
- <source>The new key pair has been generated.</source>
- <translation>Новая ключевая пара была сгенерирована.</translation>
- </message>
- <message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="314"/>
- <source>Failure</source>
- <translation>Отказ</translation>
- </message>
- <message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="314"/>
- <source>An error occurred during key generation.</source>
- <translation>Произошла ошибка во время генерации ключей.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="350"/>
+ <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="338"/>
<source>Name:</source>
- <translation>Имя:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="351"/>
+ <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="339"/>
<source>Email Address:</source>
- <translation>Адрес электронной почты:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="352"/>
+ <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="340"/>
<source>Comment:</source>
- <translation>Комментарий:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="353"/>
+ <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="341"/>
<source>Expiration Date:</source>
- <translation>Дата окончания срока:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="354"/>
+ <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="342"/>
<source>Never Expire</source>
- <translation>Никогда не истекаешь</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="355"/>
+ <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="343"/>
<source>KeySize (in Bit):</source>
- <translation>Клинизировать (по-бит):</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="356"/>
+ <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="344"/>
<source>Key Type:</source>
- <translation>Тип ключа:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="357"/>
+ <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="345"/>
<source>Non Pass Phrase</source>
- <translation>Не проходящая фраза</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="370"/>
+ <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="358"/>
<source>Basic Information</source>
- <translation>Основная информация</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
<name>KeyGenPage</name>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="366"/>
+ <location filename="../../src/ui/Wizard.cpp" line="183"/>
<source>Create a keypair...</source>
- <translation>Создать клавиатуру ...</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="367"/>
+ <location filename="../../src/ui/Wizard.cpp" line="184"/>
<source>...for decrypting and signing messages</source>
- <translation>... Для расшифровки и подписания сообщений</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="368"/>
+ <location filename="../../src/ui/Wizard.cpp" line="185"/>
<source>You should create a new keypair.The pair consists of a public and a private key.&lt;br&gt;Other users can use the public key to encrypt messages for you and verify messages signed by you.You can use the private key to decrypt and sign messages.&lt;br&gt;For more information have a look at the offline tutorial (which then is shown in the main window):</source>
- <translation>Вы должны создать новую keypair. Пара состоит из публики и закрытого ключа. &lt;br&gt; Другие пользователи могут использовать открытый ключ для шифрования сообщений для вас и проверить сообщения, подписанные вами. Вы можете использовать закрытый ключ для расшифровки и подписатьСообщения. &lt;br&gt; Для получения дополнительной информации посмотрите на автономный учебник (который затем отображается в главном окне):</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="375"/>
+ <location filename="../../src/ui/Wizard.cpp" line="192"/>
<source>Offline tutorial</source>
- <translation>Оффлайн учебник</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="382"/>
+ <location filename="../../src/ui/Wizard.cpp" line="199"/>
<source>Create New Key</source>
- <translation>Создать новый ключ</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -821,277 +887,276 @@
<location filename="../../src/ui/KeyImportDetailDialog.cpp" line="34"/>
<location filename="../../src/ui/KeyImportDetailDialog.cpp" line="53"/>
<source>Key Update Details</source>
- <translation>Детали обновления ключа</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyImportDetailDialog.cpp" line="34"/>
<source>No keys found</source>
- <translation>Ключи не найдены</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyImportDetailDialog.cpp" line="36"/>
<location filename="../../src/ui/KeyImportDetailDialog.cpp" line="55"/>
<source>Key Import Details</source>
- <translation>Детали ввоза ключей</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyImportDetailDialog.cpp" line="36"/>
<source>No keys found to import</source>
- <translation>Клавиши не найдены для импорта</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyImportDetailDialog.cpp" line="64"/>
<source>General key info</source>
- <translation>Общая ключевая информация</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyImportDetailDialog.cpp" line="67"/>
<source>Considered:</source>
- <translation>Считается:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyImportDetailDialog.cpp" line="71"/>
<source>Public unchanged:</source>
- <translation>Общественность без изменений:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyImportDetailDialog.cpp" line="76"/>
<source>Imported:</source>
- <translation>Импортирован:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyImportDetailDialog.cpp" line="81"/>
<source>Not imported:</source>
- <translation>Не импортировано:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyImportDetailDialog.cpp" line="86"/>
<source>Private read:</source>
- <translation>Частный читал:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyImportDetailDialog.cpp" line="91"/>
<source>Private imported:</source>
- <translation>Частный импорт:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyImportDetailDialog.cpp" line="96"/>
<source>Private unchanged:</source>
- <translation>Частный без изменений:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyImportDetailDialog.cpp" line="111"/>
<source>Name</source>
- <translation>Имя</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyImportDetailDialog.cpp" line="111"/>
<source>Email</source>
- <translation>Электронное письмо</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyImportDetailDialog.cpp" line="111"/>
<source>Status</source>
- <translation>Статус</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyImportDetailDialog.cpp" line="111"/>
<source>Fingerprint</source>
- <translation>Отпечаток пальца</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyImportDetailDialog.cpp" line="135"/>
<source>private</source>
- <translation>частный</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyImportDetailDialog.cpp" line="138"/>
<source>public</source>
- <translation>публичный</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyImportDetailDialog.cpp" line="141"/>
<source>unchanged</source>
- <translation>без изменений</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyImportDetailDialog.cpp" line="144"/>
<source>new key</source>
- <translation>новый ключ</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyImportDetailDialog.cpp" line="147"/>
<source>new subkey</source>
- <translation>Новый подраздел</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyImportDetailDialog.cpp" line="151"/>
<source>new signature</source>
- <translation>Новая подпись</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyImportDetailDialog.cpp" line="155"/>
<source>new uid</source>
- <translation>Новый UID</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
<name>KeyList</name>
<message>
- <location filename="../../src/ui/widgets/KeyList.cpp" line="77"/>
+ <location filename="../../src/ui/widgets/KeyList.cpp" line="76"/>
<source>Select</source>
- <translation>Выбирать</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/widgets/KeyList.cpp" line="77"/>
+ <location filename="../../src/ui/widgets/KeyList.cpp" line="76"/>
<source>Type</source>
- <translation>Тип</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/widgets/KeyList.cpp" line="77"/>
+ <location filename="../../src/ui/widgets/KeyList.cpp" line="76"/>
<source>Name</source>
- <translation>Имя</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/widgets/KeyList.cpp" line="77"/>
+ <location filename="../../src/ui/widgets/KeyList.cpp" line="76"/>
<source>Email Address</source>
- <translation>Адрес электронной почты</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/widgets/KeyList.cpp" line="78"/>
+ <location filename="../../src/ui/widgets/KeyList.cpp" line="77"/>
<source>Usage</source>
- <translation>Применение</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/widgets/KeyList.cpp" line="78"/>
+ <location filename="../../src/ui/widgets/KeyList.cpp" line="77"/>
<source>Validity</source>
- <translation>Срок действия</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/widgets/KeyList.cpp" line="78"/>
+ <location filename="../../src/ui/widgets/KeyList.cpp" line="77"/>
<source>Finger Print</source>
- <translation>Печать пальцев</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/widgets/KeyList.cpp" line="315"/>
+ <location filename="../../src/ui/widgets/KeyList.cpp" line="302"/>
<source>Import Keys</source>
- <translation>Импорт клавиш</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/widgets/KeyList.cpp" line="317"/>
+ <location filename="../../src/ui/widgets/KeyList.cpp" line="305"/>
<source>You&apos;ve dropped something on the table.
GpgFrontend will now try to import key(s).</source>
- <translation>Вы что-то бросили на стол.
- GPGFRontend теперь попробует импортировать ключ (ы).</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/widgets/KeyList.cpp" line="320"/>
+ <location filename="../../src/ui/widgets/KeyList.cpp" line="308"/>
<source>Always import without bothering.</source>
- <translation>Всегда импортировать, не беспокоясь.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/widgets/KeyList.cpp" line="356"/>
+ <location filename="../../src/ui/widgets/KeyList.cpp" line="341"/>
<source>Couldn&apos;t Open File: </source>
- <translation>Не удалось открыть файл:</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
<name>KeyMgmt</name>
<message>
- <location filename="../../src/ui/KeyMgmt.cpp" line="81"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="82"/>
<source>Key Pair Management</source>
- <translation>Ключевое управление паре</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="88"/>
<source>&amp;Open</source>
- <translation>&amp;Открыть</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="89"/>
<source>Ctrl+O</source>
- <translation>Ctrl + O.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="90"/>
<source>Open Key File</source>
- <translation>Откройте файл ключа</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="93"/>
<source>&amp;Close</source>
- <translation>&amp;Закрывать</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="94"/>
<source>Ctrl+Q</source>
- <translation>Ctrl + Q.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="96"/>
<source>Close</source>
- <translation>Закрывать</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="99"/>
<source>New Keypair</source>
- <translation>Новая клавиатура</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="100"/>
<source>Ctrl+N</source>
- <translation>Ctrl + N.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="102"/>
<source>Generate KeyPair</source>
- <translation>Создать ключевую пару</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="105"/>
<source>New Subkey</source>
- <translation>Новый подраздел</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="106"/>
<source>Ctrl+Shift+N</source>
- <translation>Ctrl + Shift + N</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="108"/>
<source>Generate Subkey For Selected KeyPair</source>
- <translation>Создать подраздел для выбранной клавиатуры</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="111"/>
- <location filename="../../src/ui/KeyMgmt.cpp" line="152"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="151"/>
<source>&amp;File</source>
- <translation>&amp;Файл</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="113"/>
<source>Import New Key From File</source>
- <translation>Импортировать новый ключ из файла</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="116"/>
<source>&amp;Clipboard</source>
- <translation>И буфер обмена</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="118"/>
<source>Import New Key From Clipboard</source>
- <translation>Импортировать новый ключ из буфера обмена</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="121"/>
<source>&amp;Keyserver</source>
- <translation>&amp; Keyserver</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="123"/>
<source>Import New Key From Keyserver</source>
- <translation>Импортировать новый ключ от Keyserver</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="126"/>
@@ -1101,149 +1166,163 @@
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="128"/>
<source>Export Selected Key(s) To Clipboard</source>
- <translation>Экспорт выбранных клавиш в буфер обмена</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="131"/>
<source>Export To &amp;File</source>
- <translation>Экспорт в &amp; file</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="133"/>
<source>Export Selected Key(s) To File</source>
- <translation>Экспорт выбранных клавиш (ы) в файл</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="136"/>
<source>Delete Selected Key(s)</source>
- <translation>Удалить выбранные ключи (ы)</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="137"/>
<source>Delete the Selected keys</source>
- <translation>Удалить выбранные ключи</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="140"/>
<source>Delete Checked Key(s)</source>
- <translation>Удалить проверенные ключи (ы)</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="141"/>
<source>Delete the Checked keys</source>
- <translation>Удалить проверенные ключи</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="145"/>
<source>Show Key Details</source>
- <translation>Показать ключевые детали</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="146"/>
<source>Show Details for this Key</source>
- <translation>Показать детали для этого ключа</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyMgmt.cpp" line="156"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="155"/>
<source>&amp;Key</source>
- <translation>&amp;Ключ</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyMgmt.cpp" line="157"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="156"/>
<source>&amp;Generate Key</source>
- <translation>Генерировать ключ</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyMgmt.cpp" line="161"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="160"/>
<source>&amp;Import Key</source>
- <translation>И Импорт ключ</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyMgmt.cpp" line="173"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="171"/>
<source>Key</source>
- <translation>Ключ</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyMgmt.cpp" line="181"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="179"/>
<source>Generate</source>
- <translation>Генерация</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyMgmt.cpp" line="182"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="180"/>
<source>Generate A New Keypair or Subkey</source>
- <translation>Генерировать новую клавиатуру или подразделение</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyMgmt.cpp" line="191"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="189"/>
<source>Import key</source>
- <translation>Импорт ключ</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyMgmt.cpp" line="192"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="190"/>
<source>Import Key</source>
- <translation>Импорт ключ</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyMgmt.cpp" line="213"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="209"/>
<source>Open Key</source>
- <translation>Открыть ключ</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyMgmt.cpp" line="213"/>
- <location filename="../../src/ui/KeyMgmt.cpp" line="299"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="210"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="302"/>
<source>Key Files</source>
- <translation>Ключевые файлы</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyMgmt.cpp" line="213"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="210"/>
<source>Keyring files</source>
- <translation>Ключевые файлы</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyMgmt.cpp" line="218"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="216"/>
<source>Couldn&apos;t Open File: </source>
- <translation>Не удалось открыть файл:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyMgmt.cpp" line="268"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="262"/>
<source>Deleting Keys</source>
- <translation>Удаление клавиш</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyMgmt.cpp" line="269"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="263"/>
<source>Are you sure that you want to delete the following keys?</source>
- <translation>Вы уверены, что хотите удалить следующие клавиши?</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyMgmt.cpp" line="270"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="265"/>
<source>The action can not be undone.</source>
- <translation>Действие не может быть отменено.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyMgmt.cpp" line="299"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="281"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="296"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="344"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="281"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="296"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="344"/>
+ <source>Key Not Found.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="301"/>
<source>Export Key To File</source>
- <translation>Экспорт ключа в файл</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyMgmt.cpp" line="309"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="312"/>
<source>key(s) exported</source>
- <translation>Ключ (ы) экспортирован</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="338"/>
- <location filename="../../src/ui/KeyMgmt.cpp" line="345"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="349"/>
<source>Invalid Operation</source>
- <translation>Неверная операция</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="339"/>
<source>Please select one KeyPair before doing this operation.</source>
- <translation>Пожалуйста, выберите одну клавиатуру перед этой операцией.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyMgmt.cpp" line="346"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="350"/>
<source>If a key pair does not have a private key then it will not be able to generate sub-keys.</source>
- <translation>Если ключевая пара не имеет частного ключа, то он не сможет генерировать подшиные клавиши.</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -1251,34 +1330,34 @@
<message>
<location filename="../../src/ui/keypair_details/KeyNewUIDDialog.cpp" line="40"/>
<source>Name</source>
- <translation>Имя</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyNewUIDDialog.cpp" line="41"/>
<source>Email</source>
- <translation>Электронное письмо</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyNewUIDDialog.cpp" line="42"/>
<source>Comment</source>
- <translation>Комментарий</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyNewUIDDialog.cpp" line="55"/>
<source>Create New UID</source>
- <translation>Создать новый UID</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyNewUIDDialog.cpp" line="68"/>
<source> Name must contain at least five characters.
</source>
- <translation>Имя должно содержать не менее пяти символов.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyNewUIDDialog.cpp" line="70"/>
<source> Please give a email address.
</source>
- <translation>Пожалуйста, дайте адрес электронной почты.</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -1286,202 +1365,212 @@
<message>
<location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="34"/>
<source>Owner</source>
- <translation>Владелец</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="35"/>
<source>Master Key</source>
- <translation>Отмычка</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="36"/>
<source>Fingerprint</source>
- <translation>Отпечаток пальца</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="37"/>
<source>Additional UIDs</source>
- <translation>Дополнительные UID</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="58"/>
<source>Exists</source>
- <translation>Существуют</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="58"/>
<source>Not Exists</source>
- <translation>Не существует</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="83"/>
<source>Name:</source>
- <translation>Имя:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="84"/>
<source>Email Address:</source>
- <translation>Адрес электронной почты:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="85"/>
<source>Comment:</source>
- <translation>Комментарий:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="90"/>
<source>Key ID: </source>
- <translation>Ключевой идентификатор:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="91"/>
<source>Algorithm: </source>
- <translation>Алгоритм:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="92"/>
<source>Key Size:</source>
- <translation>Размер ключа:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="93"/>
<source>Nominal Usage: </source>
- <translation>Номинальное использование:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="94"/>
<source>Actual Usage: </source>
- <translation>Фактическое использование:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="95"/>
<source>Expires on: </source>
- <translation>Годен до:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="96"/>
<source>Last Update: </source>
- <translation>Последнее обновление:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="97"/>
<source>Secret Key Existence: </source>
- <translation>Секретное ключевое существование:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="121"/>
<source>Copy</source>
- <translation>Скопировать</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="123"/>
<source>copy fingerprint to clipboard</source>
- <translation>Скопируйте отпечаток пальца в буфер обмена</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="133"/>
<source>Operations</source>
- <translation>Операции</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="136"/>
<source>Export Private Key (Include Subkey)</source>
- <translation>Экспорт закрытый ключ (включить подразделение)</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="141"/>
<source>Modify Expiration Datetime (Master Key)</source>
- <translation>Изменить истечения срока действия данных (главный ключ)</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="146"/>
<source>Key Server Operation (Pubkey)</source>
- <translation>Операция ключевым сервером (PUBKEY)</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="149"/>
<source>Generate Revoke Certificate</source>
- <translation>Создать сертификат Revoke.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="175"/>
+ <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="174"/>
<source>Warning: The Master Key has expired.</source>
- <translation>ПРЕДУПРЕЖДЕНИЕ. Срок действия главного ключа истек.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="178"/>
+ <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="177"/>
<source>Warning: The Master Key has been revoked</source>
- <translation>Предупреждение: главный ключ был отменен</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="202"/>
+ <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="201"/>
<source>Exporting private Key</source>
- <translation>Экспорт закрытого ключа</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="203"/>
+ <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="202"/>
<source>You are about to export your</source>
- <translation>Вы собираетесь экспортировать свой</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="204"/>
+ <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="203"/>
<source>PRIVATE KEY</source>
- <translation>Закрытый ключ</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="205"/>
+ <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="204"/>
<source>This is NOT your Public Key, so DON&apos;T give it away.</source>
- <translation>Это не ваш открытый ключ, поэтому не отдавай.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="206"/>
+ <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="205"/>
<source>Do you REALLY want to export your PRIVATE KEY?</source>
- <translation>Вы действительно хотите экспортировать свой закрытый ключ?</translation>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="219"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="219"/>
+ <source>Key Not Found.</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="221"/>
+ <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="224"/>
<source>Export Key To File</source>
- <translation>Экспорт ключа в файл</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="222"/>
+ <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="225"/>
<source>Key Files</source>
- <translation>Ключевые файлы</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="225"/>
+ <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="228"/>
<source>Export Error</source>
- <translation>Экспорт ошибок</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="225"/>
+ <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="228"/>
<source>Couldn&apos;t open %1 for writing</source>
- <translation>Не мог открыть% 1 для письма</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="295"/>
+ <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="298"/>
<source>Never Expire</source>
- <translation>Никогда не истекаешь</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="315"/>
+ <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="318"/>
<source>Upload Key Pair to Key Server</source>
- <translation>Загрузить ключевую пару на ключевой сервер</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="317"/>
+ <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="320"/>
<source>Update Key Pair</source>
- <translation>Обновить ключевую пару</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="340"/>
+ <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="343"/>
<source>Generate revocation certificate</source>
- <translation>Генерировать сертификат отзыва</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="343"/>
+ <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="346"/>
<source>Revocation Certificates</source>
- <translation>Сертификаты отзыва</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -1489,87 +1578,87 @@
<message>
<location filename="../../src/ui/keypair_details/KeyPairSubkeyTab.cpp" line="37"/>
<source>Generate A New Subkey</source>
- <translation>Генерировать новый подразделение</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairSubkeyTab.cpp" line="54"/>
<source>Key ID: </source>
- <translation>Ключевой идентификатор:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairSubkeyTab.cpp" line="55"/>
<source>Algorithm: </source>
- <translation>Алгоритм:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairSubkeyTab.cpp" line="56"/>
<source>Key Size:</source>
- <translation>Размер ключа:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairSubkeyTab.cpp" line="57"/>
<source>Usage: </source>
- <translation>Применение:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairSubkeyTab.cpp" line="58"/>
<source>Expires On </source>
- <translation>Годен до</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairSubkeyTab.cpp" line="59"/>
<source>Last Update: </source>
- <translation>Последнее обновление:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairSubkeyTab.cpp" line="60"/>
<source>Existence: </source>
- <translation>Существование:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairSubkeyTab.cpp" line="61"/>
<source>Fingerprint: </source>
- <translation>Отпечаток пальца:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairSubkeyTab.cpp" line="121"/>
<source>Subkey ID</source>
- <translation>ID SUBKEY ID</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairSubkeyTab.cpp" line="121"/>
<source>Key Size</source>
- <translation>Размер ключа</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairSubkeyTab.cpp" line="121"/>
<source>Algo</source>
- <translation>Что-нибудь</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairSubkeyTab.cpp" line="121"/>
<source>Create Date</source>
- <translation>Создать дату</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairSubkeyTab.cpp" line="121"/>
<source>Expire Date</source>
- <translation>Дата истечения срока годности</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyPairSubkeyTab.cpp" line="161"/>
+ <location filename="../../src/ui/keypair_details/KeyPairSubkeyTab.cpp" line="160"/>
<source>Never Expire</source>
- <translation>Никогда не истекаешь</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyPairSubkeyTab.cpp" line="185"/>
+ <location filename="../../src/ui/keypair_details/KeyPairSubkeyTab.cpp" line="184"/>
<source>Never Expires</source>
- <translation>Никогда не заканчивается</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyPairSubkeyTab.cpp" line="231"/>
+ <location filename="../../src/ui/keypair_details/KeyPairSubkeyTab.cpp" line="230"/>
<source>Edit Expire Date</source>
- <translation>Редактировать дату истечения срока действия</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -1577,64 +1666,64 @@
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="39"/>
<source>New UID</source>
- <translation>Новый UID</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="40"/>
<source>UID Management</source>
- <translation>Управление UID</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="59"/>
<source>UIDs</source>
- <translation>UIDs</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="67"/>
<source>Signature of Selected UID</source>
- <translation>Подпись выбранного UID</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="103"/>
<source>Select</source>
- <translation>Выбирать</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="103"/>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="126"/>
<source>Name</source>
- <translation>Имя</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="103"/>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="126"/>
<source>Email</source>
- <translation>Электронное письмо</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="103"/>
<source>Comment</source>
- <translation>Комментарий</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="126"/>
<source>Key ID</source>
- <translation>Идентификатор ключа</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="126"/>
<source>Create Date</source>
- <translation>Создать дату</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="126"/>
<source>Expired Date</source>
- <translation>Истекший срок</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="219"/>
<source>Never Expires</source>
- <translation>Никогда не заканчивается</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="237"/>
@@ -1644,33 +1733,33 @@
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="480"/>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="487"/>
<source>Invalid Operation</source>
- <translation>Неверная операция</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="238"/>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="301"/>
<source>Please select one or more UIDs before doing this operation.</source>
- <translation>Пожалуйста, выберите один или несколько UID, прежде чем делать эту операцию.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="263"/>
<source>Sign Selected UID(s)</source>
- <translation>Знак выбран UID (ы)</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="265"/>
<source>Delete Selected UID(s)</source>
- <translation>Удалить выбранные UID (ы)</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="284"/>
<source>Successful Operation</source>
- <translation>Успешная операция</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="285"/>
<source>Successfully added a new UID.</source>
- <translation>Успешно добавил новый UID.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="288"/>
@@ -1679,7 +1768,7 @@
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="460"/>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="507"/>
<source>Operation Failed</source>
- <translation>Операция не удалась</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="289"/>
@@ -1688,17 +1777,17 @@
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="461"/>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="508"/>
<source>An error occurred during the operation.</source>
- <translation>Во время операции произошла ошибка.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="313"/>
<source>Deleting UIDs</source>
- <translation>Удаление UID</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="314"/>
<source>Are you sure that you want to delete the following uids?</source>
- <translation>Вы уверены, что хотите удалить следующие UID?</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="315"/>
@@ -1706,73 +1795,73 @@
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="454"/>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="501"/>
<source>The action can not be undone.</source>
- <translation>Действие не может быть отменено.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="355"/>
<source>Set Primary UID</source>
- <translation>Установите первичный UID</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="356"/>
<source>Are you sure that you want to set the Primary UID to?</source>
- <translation>Вы уверены, что хотите установить основной UID?</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="395"/>
<source>Set As Primary</source>
- <translation>Установить как первичный</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="397"/>
<source>Sign UID</source>
- <translation>Знак UID</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="399"/>
<source>Delete UID</source>
- <translation>Удалить UID</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="426"/>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="441"/>
<source>Please select one UID before doing this operation.</source>
- <translation>Пожалуйста, выберите один UID перед этой операцией.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="452"/>
<source>Deleting UID</source>
- <translation>Удаление UID</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="453"/>
<source>Are you sure that you want to delete the following uid?</source>
- <translation>Вы уверены, что хотите удалить следующий UID?</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="469"/>
<source>Delete(Revoke) Key Signature</source>
- <translation>Удалить (отозвать) подпись ключа</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="481"/>
<source>Please select one Key Signature before doing this operation.</source>
- <translation>Пожалуйста, выберите одну клавишу подпись перед выполнением этой операции.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="488"/>
<source>To delete the signature, you need to have its corresponding public key in the local database.</source>
- <translation>Чтобы удалить подпись, вам нужно иметь соответствующий открытый ключ в локальной базе данных.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="499"/>
<source>Deleting Key Signature</source>
- <translation>Удаление подписи ключей</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="500"/>
<source>Are you sure that you want to delete the following signature?</source>
- <translation>Вы уверены, что хотите удалить следующую подпись?</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -1780,140 +1869,140 @@
<message>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="40"/>
<source>&amp;Close</source>
- <translation>&amp;Закрывать</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="41"/>
<source>&amp;Import ALL</source>
- <translation>И импорт все</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="42"/>
<source>&amp;Search</source>
- <translation>&amp;Поиск</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="45"/>
<source>Search String:</source>
- <translation>Строка поиска:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="49"/>
<source>Key Server:</source>
- <translation>Ключевой сервер:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="97"/>
<source>Update Keys from Keyserver</source>
- <translation>Обновлять ключи от Keyserver</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="99"/>
<source>Import Keys from Keyserver</source>
- <translation>Импорт клавиш от Keyserver</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="158"/>
<source>UID</source>
- <translation>UID</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="158"/>
<source>Creation date</source>
- <translation>Дата создания</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="158"/>
<source>KeyID</source>
- <translation>Кейд</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="158"/>
<source>Tag</source>
- <translation>Тег</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="179"/>
<source>Text is empty.</source>
- <translation>Текст пуст.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="213"/>
<source>Not Key Found</source>
- <translation>Не найден ключ</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="216"/>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="386"/>
<source>Timeout</source>
- <translation>Время ожидания</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="219"/>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="389"/>
<source>Key Server Not Found</source>
- <translation>Ключевой сервер не найден</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="222"/>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="392"/>
<source>Connection Error</source>
- <translation>Ошибка соединения</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="230"/>
<source>Too many responses from keyserver!</source>
- <translation>Слишком много ответов от Keyserver!</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="237"/>
<source>No keys found, input may be kexId, retrying search with 0x.</source>
- <translation>Не найдено ключей, вход может быть кекидом, повторный поиск с 0x.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="242"/>
<source>No keys found containing the search string!</source>
- <translation>Клавиши не найдены, содержащие строку поиска!</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="246"/>
<source>Insufficiently specific search string!</source>
- <translation>Недостаточно определенная строка поиска!</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="274"/>
<source>revoked</source>
- <translation>отзыв</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="277"/>
<source>disabled</source>
- <translation>отключен</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="317"/>
<source>&lt;h4&gt;%1 keys found. Double click a key to import it.&lt;/h4&gt;</source>
- <translation>&lt;h4&gt;% 1 ключей найден.Дважды щелкните ключ, чтобы импортировать его. &lt;/ H4&gt;</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="383"/>
<source>Key Not Found</source>
- <translation>Ключ не найден</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="410"/>
<source>&lt;h4&gt;Key Updated&lt;/h4&gt;</source>
- <translation>&lt;h4&gt; ключ обновлен &lt;/ h4&gt;</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="412"/>
<source>&lt;h4&gt;Key Imported&lt;/h4&gt;</source>
- <translation>&lt;H4&gt; КЛЮЧ импортирован &lt;/ H4&gt;</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="473"/>
<source>Upload Keys from Keyserver</source>
- <translation>Клавиши загрузки от Keyserver</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -1921,22 +2010,22 @@
<message>
<location filename="../../src/ui/keypair_details/KeySetExpireDateDialog.cpp" line="36"/>
<source>Confirm</source>
- <translation>Подтверждать</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeySetExpireDateDialog.cpp" line="41"/>
<source>Never Expire</source>
- <translation>Никогда не истекаешь</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeySetExpireDateDialog.cpp" line="61"/>
<source>Operation Failed</source>
- <translation>Операция не удалась</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeySetExpireDateDialog.cpp" line="62"/>
<source>An error occurred during the operation.</source>
- <translation>Во время операции произошла ошибка.</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -1944,73 +2033,93 @@
<message>
<location filename="../../src/ui/keypair_details/KeyUIDSignDialog.cpp" line="72"/>
<source>Expire Date</source>
- <translation>Дата истечения срока годности</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyUIDSignDialog.cpp" line="81"/>
<source>Sign For Key&apos;s UID(s)</source>
- <translation>Знак для ключа UID (ы)</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyUIDSignDialog.cpp" line="100"/>
+ <location filename="../../src/ui/keypair_details/KeyUIDSignDialog.cpp" line="99"/>
<source>Unsuccessful Operation</source>
- <translation>Неудачная операция</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyUIDSignDialog.cpp" line="101"/>
+ <location filename="../../src/ui/keypair_details/KeyUIDSignDialog.cpp" line="100"/>
<source>Signature operation failed for UID </source>
- <translation>Операция подписи не удалась для UID</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyUIDSignDialog.cpp" line="108"/>
+ <location filename="../../src/ui/keypair_details/KeyUIDSignDialog.cpp" line="107"/>
<source>Operation Complete</source>
- <translation>Операция завершена</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyUIDSignDialog.cpp" line="109"/>
+ <location filename="../../src/ui/keypair_details/KeyUIDSignDialog.cpp" line="108"/>
<source>The signature operation of the UID is complete</source>
- <translation>Эксплуатация подписи UID завершена</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
<name>KeyUploadDialog</name>
<message>
- <location filename="../../src/ui/KeyUploadDialog.cpp" line="49"/>
+ <location filename="../../src/ui/KeyUploadDialog.cpp" line="47"/>
<source>Uploading Public Key</source>
- <translation>Загрузка открытого ключа</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyUploadDialog.cpp" line="112"/>
+ <location filename="../../src/ui/KeyUploadDialog.cpp" line="110"/>
<source>Key Not Found</source>
- <translation>Ключ не найден</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyUploadDialog.cpp" line="115"/>
+ <location filename="../../src/ui/KeyUploadDialog.cpp" line="113"/>
<source>Timeout</source>
- <translation>Время ожидания</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyUploadDialog.cpp" line="118"/>
+ <location filename="../../src/ui/KeyUploadDialog.cpp" line="116"/>
<source>Key Server Not Found</source>
- <translation>Ключевой сервер не найден</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyUploadDialog.cpp" line="121"/>
+ <location filename="../../src/ui/KeyUploadDialog.cpp" line="119"/>
<source>Connection Error</source>
- <translation>Ошибка соединения</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
<name>KeyserverTab</name>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="607"/>
- <source>Default Key Server for import:</source>
- <translation>Сервер по умолчанию для импорта:</translation>
+ <location filename="../../src/ui/settings/SettingsKeyServer.cpp" line="32"/>
+ <source>General</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/settings/SettingsKeyServer.cpp" line="53"/>
+ <source>No.</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="624"/>
+ <location filename="../../src/ui/settings/SettingsKeyServer.cpp" line="53"/>
+ <source>Address</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/settings/SettingsKeyServer.cpp" line="53"/>
+ <source>Available</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/settings/SettingsKeyServer.cpp" line="57"/>
+ <source>Default Key Server for Import:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/settings/SettingsKeyServer.cpp" line="67"/>
<source>Add</source>
- <translation>Добавлять</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -2018,742 +2127,839 @@
<message>
<location filename="../../src/MainWindow.cpp" line="35"/>
<source>Loading Gnupg</source>
- <translation>Загрузка GNUPG.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/MainWindow.cpp" line="62"/>
<source>ENV Loading Failed</source>
- <translation>Загрузка ENV не удалась</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/MainWindow.cpp" line="63"/>
<source>Gnupg is not installed correctly, please follow the ReadME instructions to install gnupg and then open GPGFrontend.</source>
- <translation>GNUPG не установлен правильно, пожалуйста, следуйте инструкциям ReadMe для установки GNUPG, а затем открыть GPGFRontend.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="38"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="117"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="286"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="36"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="40"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="44"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="114"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="127"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="131"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="135"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="196"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="212"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="216"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="220"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="294"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="326"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="331"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="335"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="383"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="396"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="400"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="404"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="501"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="513"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="517"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="521"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="583"/>
+ <location filename="../../src/ui/main_window/MainWindowServerSlotFunction.cpp" line="51"/>
+ <location filename="../../src/ui/main_window/MainWindowServerSlotFunction.cpp" line="112"/>
+ <location filename="../../src/ui/main_window/MainWindowServerSlotFunction.cpp" line="126"/>
+ <location filename="../../src/ui/main_window/MainWindowServerSlotFunction.cpp" line="218"/>
+ <location filename="../../src/ui/main_window/MainWindowServerSlotFunction.cpp" line="231"/>
<location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="525"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="702"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="885"/>
- <source>No Key Selected</source>
- <translation>Нет выбранного ключа</translation>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="541"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
</message>
<message>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="36"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="127"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="212"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="396"/>
+ <source>Select a file before doing it.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="40"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="131"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="216"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="400"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="517"/>
+ <source>No permission to read this file.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="44"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="135"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="220"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="404"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="521"/>
+ <source>No permission to create file.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="49"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="150"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="226"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="409"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="375"/>
+ <source>Warning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="50"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="151"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="227"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="410"/>
+ <source>The target file already exists, do you need to overwrite it?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="62"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="239"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="422"/>
<location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="45"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="124"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="532"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="709"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="126"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="298"/>
+ <source>No Key Selected</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="69"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="246"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="52"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="133"/>
<source>Invalid Operation</source>
- <translation>Неверная операция</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="46"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="533"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="710"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="70"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="247"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="53"/>
<source>The selected key contains a key that does not actually have a encrypt usage.&lt;br/&gt;</source>
- <translation>Выбранный ключ содержит ключ, который на самом деле не имеет использование шифрования. &lt;br/&gt;</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="47"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="126"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="300"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="534"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="711"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="899"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="71"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="248"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="436"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="54"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="135"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="312"/>
<source>&lt;br/&gt;For example the Following Key: &lt;br/&gt;</source>
- <translation>&lt;br/&gt; Например, следующий ключ: &lt;br/&gt;</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="65"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="554"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="91"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="72"/>
<source>Encrypting</source>
- <translation>Шифрование</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="94"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="368"/>
- <source>Function Disabled</source>
- <translation>Функция отключена</translation>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="114"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="196"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="294"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="383"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="501"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="583"/>
+ <source>An error occurred during operation.</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="95"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="369"/>
- <source>Please go to the settings interface to enable and configure this function.</source>
- <translation>Пожалуйста, перейдите на интерфейс настроек, чтобы включить и настроить эту функцию.</translation>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="268"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="151"/>
+ <source>Signing</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="125"/>
- <source>The selected key contains a key that does not actually have a signature usage.&lt;br/&gt;</source>
- <translation>Выбранный ключ содержит клавишу, на самом деле не имеет использование подписи. &lt;br/&gt;</translation>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="327"/>
+ <source>Please select the appropriate target file or signature file. Ensure that both are in this directory.</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="142"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="731"/>
- <source>Signing</source>
- <translation>Подписание</translation>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="331"/>
+ <source>No permission to read target file.</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="186"/>
- <source>Decrypting</source>
- <translation>Расшифровка</translation>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="335"/>
+ <source>No permission to read signature file.</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="246"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="816"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="353"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="259"/>
<source>Verifying</source>
- <translation>Проверка</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="298"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="897"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="434"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="310"/>
<source>Invalid KeyPair</source>
- <translation>Неверная keypair.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="299"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="898"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="435"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="311"/>
<source>The selected keypair cannot be used for signing and encryption at the same time.&lt;br/&gt;</source>
- <translation>Выбранная клавиатура не может быть использована для подписания и шифрования одновременно. &lt;br/&gt;</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="310"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="317"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="909"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="916"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="446"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="453"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="322"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="329"/>
<source>Incomplete Operation</source>
- <translation>Неполная операция</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="311"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="910"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="447"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="323"/>
<source>None of the selected key pairs can provide the encryption function.</source>
- <translation>Ни одна из выбранных парных пар не может предоставлять функцию шифрования.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="318"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="917"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="454"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="330"/>
<source>None of the selected key pairs can provide the signature function.</source>
- <translation>Ни одна из выбранных парных пар не может обеспечить функцию подписи.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="335"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="936"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="473"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="365"/>
<source>Encrypting and Signing</source>
- <translation>Шифрование и подписание</translation>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="513"/>
+ <source>Select a file(.gpg/.asc) before doing it.</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="401"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="1014"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="551"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="461"/>
<source>Decrypting and Verifying</source>
- <translation>Расшифровка и проверка</translation>
- </message>
- <message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="499"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="503"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="507"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="577"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="590"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="594"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="598"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="659"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="675"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="679"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="683"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="757"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="789"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="794"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="798"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="846"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="859"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="863"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="867"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="964"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="976"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="980"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="984"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="1046"/>
- <source>Error</source>
- <translation>Ошибка</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="499"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="590"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="675"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="859"/>
- <source>Select a file before doing it.</source>
- <translation>Выберите файл перед этим.</translation>
+ <location filename="../../src/ui/main_window/MainWindowServerSlotFunction.cpp" line="43"/>
+ <location filename="../../src/ui/main_window/MainWindowServerSlotFunction.cpp" line="155"/>
+ <source>Invalid Own Key</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="503"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="594"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="679"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="863"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="980"/>
- <source>No permission to read this file.</source>
- <translation>Нет разрешения на чтение этого файла.</translation>
+ <location filename="../../src/ui/main_window/MainWindowServerSlotFunction.cpp" line="43"/>
+ <location filename="../../src/ui/main_window/MainWindowServerSlotFunction.cpp" line="155"/>
+ <source>Own Key can not be use to do any operation.</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="507"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="598"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="683"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="867"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="984"/>
- <source>No permission to create file.</source>
- <translation>Нет разрешения на создание файла.</translation>
+ <location filename="../../src/ui/main_window/MainWindowServerSlotFunction.cpp" line="52"/>
+ <source>Please obtain a Service Token from the server in the settings.</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="512"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="613"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="689"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="872"/>
- <source>Warning</source>
- <translation>Предупреждение</translation>
+ <location filename="../../src/ui/main_window/MainWindowServerSlotFunction.cpp" line="91"/>
+ <source>Getting Cpt From Server</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="513"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="614"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="690"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="873"/>
- <source>The target file already exists, do you need to overwrite it?</source>
- <translation>Целевой файл уже существует, вам нужно перезаписать это?</translation>
+ <location filename="../../src/ui/main_window/MainWindowServerSlotFunction.cpp" line="113"/>
+ <location filename="../../src/ui/main_window/MainWindowServerSlotFunction.cpp" line="219"/>
+ <source>The communication content with the server does not meet the requirements</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="577"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="659"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="757"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="846"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="964"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="1046"/>
- <source>An error occurred during operation.</source>
- <translation>Во время работы произошла ошибка.</translation>
+ <location filename="../../src/ui/main_window/MainWindowServerSlotFunction.cpp" line="126"/>
+ <source>Invalid short ciphertext</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="790"/>
- <source>Please select the appropriate target file or signature file. Ensure that both are in this directory.</source>
- <translation>Пожалуйста, выберите подходящий целевой файл или файл подписи.Убедитесь, что оба находятся в этом каталоге.</translation>
+ <location filename="../../src/ui/main_window/MainWindowServerSlotFunction.cpp" line="144"/>
+ <source>Invalid Service Token</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="794"/>
- <source>No permission to read target file.</source>
- <translation>Нет разрешения на чтение целевого файла.</translation>
+ <location filename="../../src/ui/main_window/MainWindowServerSlotFunction.cpp" line="145"/>
+ <source>Please go to the setting interface to get a ServiceToken.</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="798"/>
- <source>No permission to read signature file.</source>
- <translation>Нет разрешения на чтение файла подписи.</translation>
+ <location filename="../../src/ui/main_window/MainWindowServerSlotFunction.cpp" line="203"/>
+ <source>Getting Scpt From Server</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="976"/>
- <source>Select a file(.gpg/.asc) before doing it.</source>
- <translation>Выберите файл (.gpg / .asc), прежде чем делать это.</translation>
+ <location filename="../../src/ui/main_window/MainWindowServerSlotFunction.cpp" line="228"/>
+ <source>Notice: Use Decrypt &amp; Verify operation to decrypt this short crypto text.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/main_window/MainWindowServerSlotFunction.cpp" line="231"/>
+ <source>There is a problem with the communication with the server</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="103"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="408"/>
+ <source>Function Disabled</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="104"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="409"/>
+ <source>Please go to the settings interface to enable and configure this function.</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="1082"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="134"/>
+ <source>The selected key contains a key that does not actually have a signature usage.&lt;br/&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="186"/>
+ <source>Notice</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="186"/>
+ <source>Short Crypto Text only supports Decrypt &amp; Verify.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="200"/>
+ <source>Decrypting</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="376"/>
+ <source>Automatic public key exchange failed.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="415"/>
+ <source>Service Token Empty</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="416"/>
+ <source>Please go to the settings interface to set Own Key and get Service Token.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="525"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="541"/>
+ <source>Key Not Found.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="572"/>
<source>Outdated Version</source>
- <translation>Устаревшая версия</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="1083"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="573"/>
<source>This version(%1) is out of date, please update the latest version in time. </source>
- <translation>Эта версия (% 1) устарела, пожалуйста, обновите последнюю версию вовремя.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="1085"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="1092"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="575"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="582"/>
<source>You can download the latest version(%1) on Github Releases Page.&lt;br/&gt;</source>
- <translation>Вы можете скачать последнюю версию (% 1) на странице выбросов GitHub. &lt;br/&gt;</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="1089"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="579"/>
<source>Unreleased Version</source>
- <translation>Неразрешенная версия</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="1090"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="580"/>
<source>This version(%1) has not been officially released and is not recommended for use in a production environment. &lt;br/&gt;</source>
- <translation>Эта версия (% 1) не была официально выпущена и не рекомендуется для использования в производственной среде.&lt;br/&gt;</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowSlotUI.cpp" line="58"/>
<source>There is one unencrypted file in attachment folder</source>
- <translation>Есть один незашифрованный файл в папке вложения</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowSlotUI.cpp" line="60"/>
<source>There are </source>
- <translation>Есть</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowSlotUI.cpp" line="60"/>
<source> unencrypted files in attachment folder</source>
- <translation>Непритвержденные файлы в папке вложения</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="30"/>
<source>&amp;New</source>
- <translation>&amp;Новый</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="36"/>
<source>Open a new file</source>
- <translation>Открыть новый файл</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="39"/>
<source>&amp;Open...</source>
- <translation>&amp;Открыть...</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="42"/>
<source>Open an existing file</source>
- <translation>Откройте существующий файл</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="45"/>
<source>&amp;Browser</source>
- <translation>И браузер</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="47"/>
<source>Open a file browser</source>
- <translation>Откройте файловый браузер</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="50"/>
<source>&amp;Save</source>
- <translation>&amp;Сохранить</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="53"/>
<source>Save the current File</source>
- <translation>Сохранить текущий файл</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="56"/>
<source>Save &amp;As</source>
- <translation>Сохранить как</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="59"/>
<source>Save the current File as...</source>
- <translation>Сохраните текущий файл как ...</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="62"/>
<source>&amp;Print</source>
- <translation>&amp;Распечатать</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="65"/>
<source>Print Document</source>
- <translation>Печать документа</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="68"/>
<source>&amp;Close</source>
- <translation>&amp;Закрывать</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="70"/>
<source>Close file</source>
- <translation>Закрыть файл</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="73"/>
<source>&amp;Quit</source>
- <translation>&amp;Покидать</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="76"/>
<source>Quit Program</source>
- <translation>Бросить программу</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="81"/>
<source>&amp;Undo</source>
- <translation>&amp;Отменить</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="83"/>
<source>Undo Last Edit Action</source>
- <translation>Отменить последнее редактировать действие</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="86"/>
<source>&amp;Redo</source>
- <translation>&amp; Redo.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="88"/>
<source>Redo Last Edit Action</source>
- <translation>Redo Последние редактировать действие</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="91"/>
<source>Zoom In</source>
- <translation>Увеличить</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="95"/>
<source>Zoom Out</source>
- <translation>Уменьшить</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="99"/>
<source>&amp;Paste</source>
- <translation>&amp;Вставить</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="102"/>
<source>Paste Text From Clipboard</source>
- <translation>Вставить текст из буфера обмена</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="105"/>
<source>Cu&amp;t</source>
- <translation>С &amp; т.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="108"/>
<source>Cut the current selection&apos;s contents to the clipboard</source>
- <translation>Разрежьте содержимое текущего выбора в буфер обмена</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="112"/>
<source>&amp;Copy</source>
- <translation>И скопируйте</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="115"/>
<source>Copy the current selection&apos;s contents to the clipboard</source>
- <translation>Скопируйте содержимое текущего выбора в буфер обмена</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="119"/>
<source>&amp;Quote</source>
- <translation>&amp; quot</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="121"/>
<source>Quote whole text</source>
- <translation>Цитировать весь текст</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="124"/>
<source>Select &amp;All</source>
- <translation>Выбрать все</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="127"/>
<source>Select the whole text</source>
- <translation>Выберите весь текст</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="130"/>
<source>&amp;Find</source>
- <translation>&amp;Находить</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="132"/>
<source>Find a word</source>
- <translation>Найти слово</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="135"/>
<source>Remove &amp;spacing</source>
- <translation>Удалить и расстояние</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="138"/>
<source>Remove double linebreaks, e.g. in pasted text from webmailer</source>
- <translation>Удалить двойные линии, например,В вставленном тексте от Webmailer</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="141"/>
<source>Se&amp;ttings</source>
- <translation>&amp; Tutting.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="142"/>
<source>Open settings dialog</source>
- <translation>Диалог открытых настроек</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="148"/>
<source>&amp;Encrypt</source>
- <translation>&amp; Шифрование</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="151"/>
<source>Encrypt Message</source>
- <translation>Шифрование сообщения</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="154"/>
<source>&amp;Encrypt &amp;Sign</source>
- <translation>&amp; Шифра и подписать</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="157"/>
<source>Encrypt and Sign Message</source>
- <translation>Зашифруйте и подписывать сообщение</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="160"/>
<source>&amp;Decrypt</source>
- <translation>&amp; Decrypt</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="163"/>
<source>Decrypt Message</source>
- <translation>Расшифровать сообщение</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="166"/>
<source>&amp;Decrypt &amp;Verify</source>
- <translation>&amp; Decrypt &amp; проверить</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="169"/>
<source>Decrypt and Verify Message</source>
- <translation>Расшифровать и проверить сообщение</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="175"/>
<source>&amp;Encrypt File</source>
- <translation>Зашифруйте файл</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="176"/>
<source>Encrypt File</source>
- <translation>Зашифруйте файл</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="179"/>
<source>&amp;Decrypt File</source>
- <translation>Дешифративный файл</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="180"/>
<source>Decrypt File</source>
- <translation>Дешифративный файл</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="183"/>
<source>&amp;Sign File</source>
- <translation>&amp; Знак файла</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="184"/>
<source>Sign File</source>
- <translation>Знак файла</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="187"/>
<source>&amp;Verify File</source>
- <translation>И проверить файл</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="188"/>
<source>Verify File</source>
- <translation>Проверьте файл</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="192"/>
<source>&amp;Sign</source>
- <translation>&amp;Знак</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="195"/>
<source>Sign Message</source>
- <translation>Знак сообщения</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="198"/>
<source>&amp;Verify</source>
- <translation>&amp;Проверять</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="201"/>
<source>Verify Message</source>
- <translation>Проверить сообщение</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="207"/>
<source>&amp;Editor</source>
- <translation>&amp;Редактор</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="209"/>
<source>Import New Key From Editor</source>
- <translation>Импортировать новый ключ от редактора</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="212"/>
<source>Manage &amp;Keys</source>
- <translation>Управление и клавиши</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="214"/>
<source>Open Keymanagement</source>
- <translation>Открыть ключманагемент</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="220"/>
<source>&amp;About</source>
- <translation>&amp;О</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="222"/>
<source>Show the application&apos;s About box</source>
- <translation>Показать приложение о коробке</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="228"/>
<source>&amp;Check for Updates</source>
- <translation>Проверьте наличие обновлений</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="230"/>
<source>Check for updates</source>
- <translation>Проверьте наличие обновлений</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="233"/>
<source>Open &amp;Wizard</source>
- <translation>Open &amp; Wizard</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="234"/>
<source>Open the wizard</source>
- <translation>Откройте волшебник</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="239"/>
<source>Append Selected Key(s) To Text</source>
- <translation>Добавьте выбранные ключи в текст</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="240"/>
<source>Append The Selected Keys To Text in Editor</source>
- <translation>Добавьте выбранные ключи в текст в редакторе</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="243"/>
<source>Copy Email</source>
- <translation>Скопируйте электронную почту</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="244"/>
<source>Copy selected Email to clipboard</source>
- <translation>Скопируйте выбранную электронную почту в буфер обмена</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="248"/>
<source>Show Key Details</source>
- <translation>Показать ключевые детали</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="249"/>
<source>Show Details for this Key</source>
- <translation>Показать детали для этого ключа</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="252"/>
<source>Refresh Key From Key Server</source>
- <translation>Обновить ключ от ключевого сервера</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="253"/>
<source>Refresh key from default key server</source>
- <translation>Обновить ключ с сервера ключей по умолчанию</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="256"/>
<source>Upload Public Key(s) To Server</source>
- <translation>Загрузить открытый ключ (ы) на сервер</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="257"/>
<source>Upload The Selected Public Keys To Server</source>
- <translation>Загрузить выбранные открытые клавиши на сервер</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="272"/>
<source>Remove PGP Header</source>
- <translation>Удалить заголовок PGP</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="275"/>
<source>Add PGP Header</source>
- <translation>Добавить PGP заголовок</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="280"/>
<source>&amp;File</source>
- <translation>&amp;Файл</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="293"/>
<source>&amp;Edit</source>
- <translation>&amp;Редактировать</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="311"/>
<source>&amp;File...</source>
- <translation>&amp;Файл...</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="317"/>
<source>&amp;Crypt</source>
- <translation>И склеил</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="328"/>
<source>&amp;Keys</source>
- <translation>И ключи</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="329"/>
<source>&amp;Import Key</source>
- <translation>И Импорт ключ</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="338"/>
<source>&amp;Steganography</source>
- <translation>Стеганография</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="347"/>
<source>&amp;View</source>
- <translation>&amp;Вид</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="349"/>
<source>&amp;Help</source>
- <translation>&amp;Помощь</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="358"/>
<source>File</source>
- <translation>Файл</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="366"/>
<source>Crypt</source>
- <translation>Крипта</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="376"/>
<source>Key</source>
- <translation>Ключ</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="381"/>
<source>Edit</source>
- <translation>Редактировать</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="388"/>
@@ -2763,145 +2969,183 @@
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="400"/>
<source>Import key from...</source>
- <translation>Импорт ключ от ...</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="401"/>
<source>Import key</source>
- <translation>Импорт ключ</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="409"/>
<source>Browser to view and operate file</source>
- <translation>Браузер для просмотра и управления файлом</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="410"/>
<source>Browser</source>
- <translation>Браузер</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="428"/>
<source>Ready</source>
- <translation>Готовый</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="435"/>
<source>Key ToolBox</source>
- <translation>Ключевой набор инструментов</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="443"/>
<source>Information Board</source>
- <translation>Доска объявлений</translation>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PubkeyGetter</name>
+ <message>
+ <location filename="../../src/server/api/PubkeyGetter.cpp" line="66"/>
+ <location filename="../../src/server/api/PubkeyGetter.cpp" line="90"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/server/api/PubkeyGetter.cpp" line="67"/>
+ <location filename="../../src/server/api/PubkeyGetter.cpp" line="91"/>
+ <source>The communication content with the server does not meet the requirements</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PubkeyUploader</name>
+ <message>
+ <location filename="../../src/server/api/PubkeyUploader.cpp" line="95"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/server/api/PubkeyUploader.cpp" line="96"/>
+ <source>The communication content with the server does not meet the requirements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/server/api/PubkeyUploader.cpp" line="103"/>
+ <source>Warning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/server/api/PubkeyUploader.cpp" line="104"/>
+ <source>Partial failure of automatic pubkey exchange</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
<name>QApplication</name>
<message>
- <location filename="../../src/gpg/result_analyse/DecryptResultAnalyse.cpp" line="42"/>
- <source>&gt;Recipient: </source>
- <translation>&gt; Получатель:</translation>
+ <location filename="../../src/gpg/result_analyse/DecryptResultAnalyse.cpp" line="66"/>
+ <source> {&gt;} Recipient: </source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="35"/>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="61"/>
<source>One or More Bad Signatures.</source>
- <translation>Одна или несколько плохих подписей.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="40"/>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="66"/>
<source>A </source>
- <translation>А.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="42"/>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="68"/>
<source>Good </source>
- <translation>Хорошо</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="45"/>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="71"/>
<source>Bad </source>
- <translation>Плохо</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="48"/>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="74"/>
<source>Expired </source>
- <translation>Истекший</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="51"/>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="77"/>
<source>Missing Key&apos;s </source>
- <translation>Отсутствует ключ</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="54"/>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="80"/>
<source>Revoked Key&apos;s </source>
- <translation>Отменил ключ</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="57"/>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="83"/>
<source>Expired Key&apos;s </source>
- <translation>Истекший ключ</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="60"/>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="86"/>
<source>Missing CRL&apos;s </source>
- <translation>Отсутствие CRL&apos;s.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="64"/>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="90"/>
<source>Signature Fully Valid.</source>
- <translation>Подпись полностью действительна.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="66"/>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="92"/>
<source>Signature NOT Fully Valid.</source>
- <translation>Подпись не полностью действительна.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="74"/>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="100"/>
<source>Key is NOT present with ID 0x</source>
- <translation>Ключ отсутствует с ID 0x</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="81"/>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="107"/>
<source>A signature could NOT be verified due to a Missing Key
</source>
- <translation>Подпись не может быть проверена из-за недостающего ключа</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="85"/>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="111"/>
<source>A signature is valid but the key used to verify the signature has been revoked
</source>
- <translation>Подпись действительна, но ключ, используемый для проверки подписи, был отменен</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="93"/>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="119"/>
<source>A signature is valid but expired
</source>
- <translation>Подпись действительна, но истек</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="100"/>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="126"/>
<source>A signature is valid but the key used to verify the signature has expired.
</source>
- <translation>Подпись действительна, но ключ, используемый для проверки подписи, истек.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="107"/>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="133"/>
<source>There was some other error which prevented the signature verification.
</source>
- <translation>Была какая-то другая ошибка, которая предотвратила проверку подписи.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="113"/>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="139"/>
<source>Error for key with fingerprint </source>
- <translation>Ошибка для ключа с отпечатками пальца</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="128"/>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="152"/>
<source>Signed By: </source>
- <translation>Подписано:</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -2909,22 +3153,22 @@
<message>
<location filename="../../src/ui/QuitDialog.cpp" line="29"/>
<source>Unsaved Files</source>
- <translation>Несохраненные файлы</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/QuitDialog.cpp" line="77"/>
<source>%1 files contain unsaved information.&lt;br/&gt;Save the changes before closing?</source>
- <translation>Файлы% 1 содержат несохраненную информацию. &lt;br/&gt; Сохранить изменения перед закрытием?</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/QuitDialog.cpp" line="88"/>
<source>Check the files you want to save:</source>
- <translation>Проверьте файлы, которые вы хотите сохранить:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/QuitDialog.cpp" line="89"/>
<source>&lt;b&gt;Note:&lt;/b&gt; If you don&apos;t save these files, all changes are lost.&lt;br/&gt;</source>
- <translation>&lt;b&gt; Примечание: &lt;/ b&gt; Если вы не сохраните эти файлы, все изменения потеряны. &lt;br/&gt;</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -2932,264 +3176,360 @@
<message>
<location filename="../../src/ui/SendMailDialog.cpp" line="35"/>
<source>Incomplete configuration</source>
- <translation>Неполная конфигурация</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/SendMailDialog.cpp" line="36"/>
<source>The SMTP address is empty, please go to the setting interface to complete the configuration.</source>
- <translation>Адрес SMTP пуст, перейдите на интерфейс настройки, чтобы завершить конфигурацию.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/SendMailDialog.cpp" line="86"/>
<source> Recipient cannot be empty
</source>
- <translation>Получатель не может быть пустым</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/SendMailDialog.cpp" line="91"/>
<source> One or more Recipient&apos;s Email Address is invalid
</source>
- <translation>Один или несколько адресов электронной почты получателя недействителен</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/SendMailDialog.cpp" line="97"/>
<source> Sender cannot be empty
</source>
- <translation>Отправитель не может быть пустым</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/SendMailDialog.cpp" line="99"/>
<source> Sender&apos;s Email Address is invalid
</source>
- <translation>Адрес электронной почты отправителя недействителен</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/SendMailDialog.cpp" line="155"/>
<location filename="../../src/ui/SendMailDialog.cpp" line="160"/>
<location filename="../../src/ui/SendMailDialog.cpp" line="165"/>
<source>Fail</source>
- <translation>Неудача</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/SendMailDialog.cpp" line="155"/>
<source>Fail to Connect SMTP Server</source>
- <translation>Не удается подключить SMTP-сервер</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/SendMailDialog.cpp" line="160"/>
<source>Fail to Login into SMTP Server</source>
- <translation>Не входить в систему на SMTP-сервер</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/SendMailDialog.cpp" line="165"/>
<source>Fail to Send Mail to SMTP Server</source>
- <translation>Не удалось отправить почту на SMTP-сервер</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/SendMailDialog.cpp" line="171"/>
<source>Success</source>
- <translation>Успех</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/SendMailDialog.cpp" line="171"/>
<source>Succeed in Sending Mail to SMTP Server</source>
- <translation>Успешно отправлять почту на SMTP-сервер</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SendMailTab</name>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="289"/>
+ <location filename="../../src/ui/settings/SettingsSendMail.cpp" line="33"/>
<source>Enable</source>
- <translation>Давать возможность</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="311"/>
+ <location filename="../../src/ui/settings/SettingsSendMail.cpp" line="51"/>
+ <source>Check Connection</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/settings/SettingsSendMail.cpp" line="53"/>
+ <source>General</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/settings/SettingsSendMail.cpp" line="54"/>
+ <source>Connection</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/settings/SettingsSendMail.cpp" line="55"/>
+ <source>Preference</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/settings/SettingsSendMail.cpp" line="61"/>
<source>SMTP Address</source>
- <translation>SMTP-адрес</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="313"/>
+ <location filename="../../src/ui/settings/SettingsSendMail.cpp" line="63"/>
<source>Username</source>
- <translation>Имя пользователя</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="315"/>
+ <location filename="../../src/ui/settings/SettingsSendMail.cpp" line="65"/>
<source>Password</source>
- <translation>Пароль</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="317"/>
+ <location filename="../../src/ui/settings/SettingsSendMail.cpp" line="67"/>
<source>Port</source>
- <translation>Порт</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="319"/>
+ <location filename="../../src/ui/settings/SettingsSendMail.cpp" line="69"/>
<source>Connection Security</source>
- <translation>Безопасность подключения</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="322"/>
+ <location filename="../../src/ui/settings/SettingsSendMail.cpp" line="75"/>
<source>Default Sender</source>
- <translation>Отправитель по умолчанию</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="404"/>
- <location filename="../../src/ui/SettingsDialog.cpp" line="408"/>
+ <location filename="../../src/ui/settings/SettingsSendMail.cpp" line="161"/>
+ <location filename="../../src/ui/settings/SettingsSendMail.cpp" line="165"/>
<source>Fail</source>
- <translation>Неудача</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="404"/>
+ <location filename="../../src/ui/settings/SettingsSendMail.cpp" line="161"/>
<source>Fail to Connect SMTP Server</source>
- <translation>Не удается подключить SMTP-сервер</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="408"/>
+ <location filename="../../src/ui/settings/SettingsSendMail.cpp" line="165"/>
<source>Fail to Login</source>
- <translation>Не входить в систему</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="413"/>
+ <location filename="../../src/ui/settings/SettingsSendMail.cpp" line="170"/>
<source>Success</source>
- <translation>Успех</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="413"/>
+ <location filename="../../src/ui/settings/SettingsSendMail.cpp" line="170"/>
<source>Succeed in connecting and login</source>
- <translation>Преуспеть в подключении и входе в систему</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SettingsDialog</name>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="40"/>
+ <location filename="../../src/ui/settings/SettingsDialog.cpp" line="39"/>
<source>General</source>
- <translation>Общий</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="41"/>
+ <location filename="../../src/ui/settings/SettingsDialog.cpp" line="40"/>
<source>Appearance</source>
- <translation>Появление</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="42"/>
+ <location filename="../../src/ui/settings/SettingsDialog.cpp" line="41"/>
<source>Send Mail</source>
- <translation>Отправить почту</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="43"/>
+ <location filename="../../src/ui/settings/SettingsDialog.cpp" line="42"/>
<source>Key Server</source>
- <translation>Ключевой сервер</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="45"/>
+ <location filename="../../src/ui/settings/SettingsDialog.cpp" line="44"/>
<source>Advanced</source>
- <translation>Передовой</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="58"/>
+ <location filename="../../src/ui/settings/SettingsDialog.cpp" line="59"/>
<source>Settings</source>
- <translation>Настройки</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="103"/>
+ <location filename="../../src/ui/settings/SettingsDialog.cpp" line="105"/>
<source>System Default</source>
- <translation>Системные установки по умолчанию</translation>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>SignResultAnalyse</name>
+ <message>
+ <location filename="../../src/gpg/result_analyse/SignResultAnalyse.cpp" line="29"/>
+ <source>[#] Sign Operation </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/SignResultAnalyse.cpp" line="32"/>
+ <source>[Success]</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/SignResultAnalyse.cpp" line="34"/>
+ <source>[Failed] </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/SignResultAnalyse.cpp" line="43"/>
+ <source>[&gt;] New Signature: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/SignResultAnalyse.cpp" line="47"/>
+ <source> Sign Mode: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/SignResultAnalyse.cpp" line="49"/>
+ <source>Normal</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/SignResultAnalyse.cpp" line="51"/>
+ <source>Clear</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/SignResultAnalyse.cpp" line="53"/>
+ <source>Detach</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/SignResultAnalyse.cpp" line="59"/>
+ <location filename="../../src/gpg/result_analyse/SignResultAnalyse.cpp" line="61"/>
+ <source> Signer: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/SignResultAnalyse.cpp" line="61"/>
+ <source>&lt;unknown&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/SignResultAnalyse.cpp" line="63"/>
+ <source> Public Key Algo: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/SignResultAnalyse.cpp" line="64"/>
+ <source> Hash Algo: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/SignResultAnalyse.cpp" line="65"/>
+ <source> Date &amp; Time: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/SignResultAnalyse.cpp" line="75"/>
+ <source>Invalid Signers: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/SignResultAnalyse.cpp" line="79"/>
+ <source>[&gt;] Signer: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/SignResultAnalyse.cpp" line="80"/>
+ <source> Fingerprint: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/SignResultAnalyse.cpp" line="81"/>
+ <source> Reason: </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>SignersPicker</name>
+ <message>
+ <location filename="../../src/ui/widgets/SignersPicker.cpp" line="28"/>
+ <source>Confirm</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SubkeyGenerateDialog</name>
<message>
- <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="46"/>
+ <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="47"/>
<source>Generate New Subkey</source>
- <translation>Генерировать новый подразделение</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="61"/>
+ <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="62"/>
<source>Encryption</source>
- <translation>Шифрование</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="64"/>
+ <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="65"/>
<source>Signing</source>
- <translation>Подписание</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="67"/>
+ <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="68"/>
<source>Certification</source>
- <translation>Сертификация</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="70"/>
+ <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="71"/>
<source>Authentication</source>
- <translation>Аутентификация</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="114"/>
+ <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="115"/>
<source>Expiration Date:</source>
- <translation>Дата окончания срока:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="115"/>
+ <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="116"/>
<source>Never Expire</source>
- <translation>Никогда не истекаешь</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="116"/>
+ <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="117"/>
<source>KeySize (in Bit):</source>
- <translation>Клинизировать (по-бит):</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="117"/>
+ <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="118"/>
<source>Key Type:</source>
- <translation>Тип ключа:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="126"/>
+ <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="127"/>
<source>Basic Information</source>
- <translation>Основная информация</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="214"/>
+ <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="215"/>
<source> Expiration time no more than 2 years. </source>
- <translation>Время истечения не более 2 лет.</translation>
- </message>
- <message>
- <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="235"/>
- <source>Generating Subkey...</source>
- <translation>Генерация подраздела ...</translation>
- </message>
- <message>
- <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="238"/>
- <source>Collecting random data for subkey generation.
- This may take a while.
- To speed up the process use your computer
- (e.g. browse the net, listen to music,...)</source>
- <translation>Сбор случайных данных для поколения подраздела.
- Это может занять некоторое время.
- Чтобы ускорить процесс, используйте свой компьютер
- (например, просмотрите чистую, слушаю музыку, ...)</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="309"/>
+ <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="244"/>
<source>Success</source>
- <translation>Успех</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="309"/>
+ <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="244"/>
<source>The new subkey has been generated.</source>
- <translation>Новый подразделение было сгенерировано.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="311"/>
+ <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="247"/>
<source>Failure</source>
- <translation>Отказ</translation>
- </message>
- <message>
- <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="311"/>
- <source>An error occurred during subkey generation.</source>
- <translation>Произошла ошибка во время поколения подраздела.</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -3197,13 +3537,13 @@
<message>
<location filename="../../src/ui/widgets/TextEdit.cpp" line="53"/>
<source>untitled</source>
- <translation>Безватый</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/TextEdit.cpp" line="120"/>
<location filename="../../src/ui/widgets/TextEdit.cpp" line="200"/>
<source>Warning</source>
- <translation>Предупреждение</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/TextEdit.cpp" line="121"/>
@@ -3211,84 +3551,95 @@
<location filename="../../src/ui/widgets/TextEdit.cpp" line="482"/>
<source>Cannot read file %1:
%2.</source>
- <translation>Не удается прочитать файл% 1:
-% 2.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/TextEdit.cpp" line="175"/>
<source>Open file</source>
- <translation>Открыть файл</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/TextEdit.cpp" line="251"/>
<source>File</source>
- <translation>Файл</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/TextEdit.cpp" line="252"/>
<source>Cannot write file %1:
%2.</source>
- <translation>Невозможно написать файл% 1:
-% 2.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/TextEdit.cpp" line="270"/>
<source>Save file</source>
- <translation>Сохранить файл</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/TextEdit.cpp" line="333"/>
<source>Unsaved document</source>
- <translation>Несохраненный документ</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/TextEdit.cpp" line="334"/>
<source>The document &quot;%1&quot; has been modified. Do you want to save your changes?&lt;br/&gt;</source>
- <translation>Документ «% 1» был изменен.Вы хотите сохранить ваши изменения? &lt;br/&gt;</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/TextEdit.cpp" line="337"/>
<source>&lt;b&gt;Note:&lt;/b&gt; If you don&apos;t save these files, all changes are lost.&lt;br/&gt;</source>
- <translation>&lt;b&gt; Примечание: &lt;/ b&gt; Если вы не сохраните эти файлы, все изменения потеряны. &lt;br/&gt;</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/TextEdit.cpp" line="481"/>
<source>Application</source>
- <translation>Заявление</translation>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>UnknownSignersChecker</name>
+ <message>
+ <location filename="../../src/advance/UnknownSignersChecker.cpp" line="69"/>
+ <source>Warning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/advance/UnknownSignersChecker.cpp" line="70"/>
+ <source>Automatic public key exchange failed.</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
<name>UpdateTab</name>
<message>
- <location filename="../../src/ui/help/AboutDialog.cpp" line="127"/>
+ <location filename="../../src/ui/help/AboutDialog.cpp" line="129"/>
<source>It is recommended that you always check the version of GpgFrontend and upgrade to the latest version.</source>
- <translation>Рекомендуется, чтобы вы всегда проверяли версию GPGFRontend и обновите до последней версии.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/help/AboutDialog.cpp" line="129"/>
+ <location filename="../../src/ui/help/AboutDialog.cpp" line="131"/>
<source>New versions not only represent new features, but also often represent functional and security fixes.</source>
- <translation>Новые версии не только представляют новые функции, но и часто представляют функциональные и безопасные исправления.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/help/AboutDialog.cpp" line="133"/>
+ <location filename="../../src/ui/help/AboutDialog.cpp" line="135"/>
<source>Current Version: </source>
- <translation>Текущая версия:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/help/AboutDialog.cpp" line="141"/>
+ <location filename="../../src/ui/help/AboutDialog.cpp" line="143"/>
<source>The current version is inconsistent with the latest version on github.</source>
- <translation>Текущая версия несовместима с последней версией на Github.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/help/AboutDialog.cpp" line="143"/>
+ <location filename="../../src/ui/help/AboutDialog.cpp" line="145"/>
<source>Please click &lt;a href=&quot;https://github.com/saturneric/GpgFrontend/releases&quot;&gt;here&lt;/a&gt; to download the latest version.</source>
- <translation>Пожалуйста, нажмите &lt;a href=&quot;http://github.com/saturneric/gpgfrontend/relestrestions&quot;&gt; Здесь &lt;/a&gt; для загрузки последней версии.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/help/AboutDialog.cpp" line="187"/>
- <location filename="../../src/ui/help/AboutDialog.cpp" line="209"/>
+ <location filename="../../src/ui/help/AboutDialog.cpp" line="199"/>
+ <location filename="../../src/ui/help/AboutDialog.cpp" line="214"/>
<source>Latest Version From Github: </source>
- <translation>Последняя версия из GitHub:</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -3296,32 +3647,32 @@
<message>
<location filename="../../src/ui/VerifyDetailsDialog.cpp" line="32"/>
<source>Signature Details</source>
- <translation>Подробности подписи</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/VerifyDetailsDialog.cpp" line="53"/>
<source>Status: </source>
- <translation>Статус:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/VerifyDetailsDialog.cpp" line="56"/>
<source>No valid input found</source>
- <translation>Допустимый вход не найден</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/VerifyDetailsDialog.cpp" line="67"/>
<source>Error Validating signature</source>
- <translation>Ошибка проверки подписи</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/VerifyDetailsDialog.cpp" line="70"/>
<source>File was signed on %1 &lt;br/&gt; It Contains:&lt;br/&gt;&lt;br/&gt;</source>
- <translation>Файл был подписан на% 1 &lt;br/&gt; он содержит: &lt;br/&gt; &lt;br/&gt;</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/VerifyDetailsDialog.cpp" line="72"/>
<source>Signed on %1 &lt;br/&gt; It Contains:&lt;br /&gt;&lt;br/&gt;</source>
- <translation>Подписано на% 1 &lt;br/&gt; Он содержит: &lt;br /&gt; &lt;br/&gt;</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -3329,22 +3680,22 @@
<message>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="36"/>
<source>Import from keyserver</source>
- <translation>Импорт от Keyserver</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="39"/>
<source>Key not present with id 0x</source>
- <translation>Ключ не присутствует с ID 0x</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="43"/>
<source>Status:</source>
- <translation>Статус:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="45"/>
<source>Key not present in keylist</source>
- <translation>Ключ не присутствует в кейлисте</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="58"/>
@@ -3354,7 +3705,7 @@
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="115"/>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="129"/>
<source>Key Information is NOT Available</source>
- <translation>Основная информация недоступна</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="60"/>
@@ -3364,137 +3715,134 @@
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="117"/>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="131"/>
<source>Fingerprint: </source>
- <translation>Отпечаток пальца:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="67"/>
<source>Status: Cert Revoked</source>
- <translation>Статус: Сертинг отозван</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="81"/>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="95"/>
<source>Status: Signature Expired</source>
- <translation>Статус: подпись истек</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="96"/>
<source>Status: Key Expired</source>
- <translation>Статус: ключ истек</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="110"/>
<source>Status: General Error</source>
- <translation>Статус: общая ошибка</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="124"/>
<source>Status: Unknown Error</source>
- <translation>Статус: неизвестная ошибка</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="159"/>
<source>Signer Name:</source>
- <translation>Название сигнала:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="160"/>
<source>Signer Email:</source>
- <translation>Email Signer Email:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="161"/>
<source>Key&apos;s Fingerprint:</source>
- <translation>Отпечаток ключа:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="162"/>
<source>Valid:</source>
- <translation>Действительный:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="163"/>
<source>Flags:</source>
- <translation>Флаги:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="171"/>
<source>Fully Valid</source>
- <translation>Полностью действителен</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="173"/>
<source>NOT Fully Valid</source>
- <translation>Не полностью действительным</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="180"/>
<source>Good </source>
- <translation>Хорошо</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="183"/>
<source>Bad </source>
- <translation>Плохо</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="186"/>
<source>Expired </source>
- <translation>Истекший</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="189"/>
<source>Missing Key </source>
- <translation>Пропавший ключ</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="192"/>
<source>Revoked Key </source>
- <translation>Отменил ключ</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="195"/>
<source>Expired Key </source>
- <translation>Ключ срок действия</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="198"/>
<source>Missing CRL </source>
- <translation>Пропавший CRL</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
- <name>Wizard</name>
+ <name>VerifyResultAnalyse</name>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="46"/>
- <source>First Start Wizard</source>
- <translation>Первый запуск волшебника</translation>
- </message>
- <message>
- <location filename="../../src/ui/Wizard.cpp" line="76"/>
- <source>Import Error</source>
- <translation>Ошибка импорта</translation>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="31"/>
+ <source>[#] Verify Operation </source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="76"/>
- <source>Couldn&apos;t locate any keyring file in %1</source>
- <translation>Не мог найти любой файл ключа в% 1</translation>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="34"/>
+ <source>[Success]</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="84"/>
- <location filename="../../src/ui/Wizard.cpp" line="95"/>
- <source>Import error</source>
- <translation>Ошибка импорта</translation>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="36"/>
+ <source>[Failed] </source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="85"/>
- <source>Couldn&apos;t open private keyringfile: %1</source>
- <translation>Не мог открыть частное cliedingfile:% 1</translation>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="158"/>
+ <source>&lt;Unknown&gt;</source>
+ <translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>Wizard</name>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="96"/>
- <source>Couldn&apos;t open public keyringfile: %1</source>
- <translation>Не удалось открыть открытый клавиатуре:% 1</translation>
+ <location filename="../../src/ui/Wizard.cpp" line="40"/>
+ <source>First Start Wizard</source>
+ <translation type="unfinished"></translation>
</message>
</context>
</TS>
diff --git a/resource/ts/gpgfrontend_zh_cn.ts b/resource/ts/gpgfrontend_zh_cn.ts
index 58efd923..61728942 100644
--- a/resource/ts/gpgfrontend_zh_cn.ts
+++ b/resource/ts/gpgfrontend_zh_cn.ts
@@ -6,195 +6,306 @@
<message>
<location filename="../../src/ui/help/AboutDialog.cpp" line="35"/>
<source>About </source>
- <translation>关于</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/help/AboutDialog.cpp" line="42"/>
<source>General</source>
- <translation>通用</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/help/AboutDialog.cpp" line="43"/>
<source>Translators</source>
- <translation>译者</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/help/AboutDialog.cpp" line="44"/>
<source>Update</source>
- <translation>更新</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
<name>AdvancedTab</name>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="679"/>
- <source>Show Steganography Options [Advanced]</source>
- <translation>显示隐写术选项[高级]</translation>
+ <location filename="../../src/ui/settings/SettingsAdvanced.cpp" line="34"/>
+ <source>Show Steganography Options</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="681"/>
+ <location filename="../../src/ui/settings/SettingsAdvanced.cpp" line="36"/>
<source>Show Steganographic Options.</source>
- <translation>显示隐写术选项。</translation>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/settings/SettingsAdvanced.cpp" line="40"/>
+ <source>Pubkey Exchange</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/settings/SettingsAdvanced.cpp" line="42"/>
+ <source>Auto Pubkey Exchange</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
<name>AppearanceTab</name>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="444"/>
+ <location filename="../../src/ui/settings/SettingsAppearance.cpp" line="34"/>
<source>Iconsize</source>
- <translation>图标化</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="446"/>
+ <location filename="../../src/ui/settings/SettingsAppearance.cpp" line="36"/>
<source>small</source>
- <translation>小的</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="447"/>
+ <location filename="../../src/ui/settings/SettingsAppearance.cpp" line="37"/>
<source>medium</source>
- <translation>中等的</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="448"/>
+ <location filename="../../src/ui/settings/SettingsAppearance.cpp" line="38"/>
<source>large</source>
- <translation>大</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="464"/>
+ <location filename="../../src/ui/settings/SettingsAppearance.cpp" line="54"/>
<source>Iconstyle</source>
- <translation>图标样式</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="466"/>
+ <location filename="../../src/ui/settings/SettingsAppearance.cpp" line="56"/>
<source>just text</source>
- <translation>只是文字</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="467"/>
+ <location filename="../../src/ui/settings/SettingsAppearance.cpp" line="57"/>
<source>just icons</source>
- <translation>只是图标</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="468"/>
+ <location filename="../../src/ui/settings/SettingsAppearance.cpp" line="58"/>
<source>text and icons</source>
- <translation>文字和图标</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="484"/>
+ <location filename="../../src/ui/settings/SettingsAppearance.cpp" line="74"/>
<source>Windowstate</source>
- <translation>窗口状态</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="487"/>
+ <location filename="../../src/ui/settings/SettingsAppearance.cpp" line="77"/>
<source>Save window size and position on exit.</source>
- <translation>保存窗口大小和位置。</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="495"/>
+ <location filename="../../src/ui/settings/SettingsAppearance.cpp" line="85"/>
<source>Information Board</source>
- <translation>信息板</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="501"/>
+ <location filename="../../src/ui/settings/SettingsAppearance.cpp" line="91"/>
<source> Front Size</source>
- <translation>字体大小</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ChoosePage</name>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="165"/>
+ <location filename="../../src/ui/Wizard.cpp" line="121"/>
<source>Choose your action...</source>
- <translation>选择你的行动......</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="166"/>
+ <location filename="../../src/ui/Wizard.cpp" line="122"/>
<source>...by clicking on the appropriate link.</source>
- <translation>...单击相应的链接。</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="168"/>
+ <location filename="../../src/ui/Wizard.cpp" line="124"/>
<source>If you have never used GPGFrontend before and also don&apos;t own a gpg key yet you may possibly want to read how to</source>
- <translation>如果您之前从未使用过GPG2Rend并且也没有拥有GPG密钥,但您可能希望阅读如何</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="170"/>
+ <location filename="../../src/ui/Wizard.cpp" line="127"/>
<source>Generate Key</source>
- <translation>生成密钥对</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="176"/>
+ <location filename="../../src/ui/Wizard.cpp" line="134"/>
<source>If you want to learn how to encrypt, decrypt, sign and verify text, you can read </source>
- <translation>如果您想了解如何加密,解密,签名和验证文本,可以阅读</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="178"/>
+ <location filename="../../src/ui/Wizard.cpp" line="136"/>
<source>Encrypt &amp; Decrypt Text</source>
- <translation>加密&amp;解密文本</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="178"/>
- <location filename="../../src/ui/Wizard.cpp" line="190"/>
+ <location filename="../../src/ui/Wizard.cpp" line="136"/>
+ <location filename="../../src/ui/Wizard.cpp" line="149"/>
<source>or</source>
- <translation>或者</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="180"/>
+ <location filename="../../src/ui/Wizard.cpp" line="138"/>
<source>Sign &amp; Verify Text</source>
- <translation>签名&amp;验证文本</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="188"/>
+ <location filename="../../src/ui/Wizard.cpp" line="146"/>
<source>If you want to operate file, you can read </source>
- <translation>如果要操作文件,可以阅读</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="190"/>
+ <location filename="../../src/ui/Wizard.cpp" line="149"/>
<source>Encrypt &amp; Sign File</source>
- <translation>加密&amp;签名文件</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="192"/>
+ <location filename="../../src/ui/Wizard.cpp" line="152"/>
<source>Sign &amp; Verify File</source>
- <translation>签名&amp;验证文件</translation>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ComUtils</name>
+ <message>
+ <location filename="../../src/server/ComUtils.cpp" line="35"/>
+ <location filename="../../src/server/ComUtils.cpp" line="55"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/server/ComUtils.cpp" line="35"/>
+ <source>Nothing Reply. Please check the Internet connection.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/server/ComUtils.cpp" line="55"/>
+ <source>Unknown Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/server/ComUtils.cpp" line="75"/>
+ <location filename="../../src/server/ComUtils.cpp" line="90"/>
+ <source>Network Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/server/ComUtils.cpp" line="75"/>
+ <source>Outdated Reply</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/server/ComUtils.cpp" line="87"/>
+ <source>Unknown Reason</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/server/ComUtils.cpp" line="90"/>
+ <source>Unknown Reply Format</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ConclusionPage</name>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="407"/>
+ <location filename="../../src/ui/Wizard.cpp" line="224"/>
<source>Ready.</source>
- <translation>准备好。</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="408"/>
+ <location filename="../../src/ui/Wizard.cpp" line="225"/>
<source>Have fun with GPGFrontend!</source>
- <translation>在GPGFrontend玩得开心!</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="410"/>
+ <location filename="../../src/ui/Wizard.cpp" line="227"/>
<source>You are ready to use GPGFrontend now.&lt;br&gt;&lt;br&gt;</source>
- <translation>你现在准备好使用GPGFrontend。&lt;br&gt; &lt;br&gt;</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="412"/>
+ <location filename="../../src/ui/Wizard.cpp" line="229"/>
<source>The Online Document</source>
- <translation>在线文档</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="413"/>
+ <location filename="../../src/ui/Wizard.cpp" line="231"/>
<source> will get you started with GPGFrontend. It will open in the main window.&lt;br&gt;</source>
- <translation>会带领你开始使用GPGFrontend。它将在主窗口中打开。&lt;br&gt;</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="420"/>
+ <location filename="../../src/ui/Wizard.cpp" line="238"/>
<source>Open offline help.</source>
- <translation>打开离线帮助。</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="423"/>
+ <location filename="../../src/ui/Wizard.cpp" line="241"/>
<source>Dont show the wizard again.</source>
- <translation>不要再次显示向导。</translation>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DecryptResultAnalyse</name>
+ <message>
+ <location filename="../../src/gpg/result_analyse/DecryptResultAnalyse.cpp" line="30"/>
+ <source>[#] Decrypt Operation </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/DecryptResultAnalyse.cpp" line="33"/>
+ <source>[Success]</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/DecryptResultAnalyse.cpp" line="35"/>
+ <source>[Failed] </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/DecryptResultAnalyse.cpp" line="39"/>
+ <source>Unsupported Algo: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/DecryptResultAnalyse.cpp" line="46"/>
+ <source>File Name: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/DecryptResultAnalyse.cpp" line="52"/>
+ <source>Recipient(s): </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/DecryptResultAnalyse.cpp" line="82"/>
+ <source> Keu ID: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/DecryptResultAnalyse.cpp" line="83"/>
+ <source> Public Algo: </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>EncryptResultAnalyse</name>
+ <message>
+ <location filename="../../src/gpg/result_analyse/EncryptResultAnalyse.cpp" line="41"/>
+ <source>Invalid Recipients: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/EncryptResultAnalyse.cpp" line="44"/>
+ <source>Fingerprint: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/EncryptResultAnalyse.cpp" line="45"/>
+ <source>Reason: </source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -202,99 +313,98 @@
<message>
<location filename="../../src/ui/FileEncryptionDialog.cpp" line="32"/>
<source>Decrypt File</source>
- <translation>解密文件</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/FileEncryptionDialog.cpp" line="34"/>
<source>Encrypt File</source>
- <translation>加密文件</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/FileEncryptionDialog.cpp" line="36"/>
<source>Sign File</source>
- <translation>签名文件</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/FileEncryptionDialog.cpp" line="38"/>
<source>Verify File</source>
- <translation>验证文件</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/FileEncryptionDialog.cpp" line="47"/>
<source>Input Parameters</source>
- <translation>输入参数</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/FileEncryptionDialog.cpp" line="53"/>
<source>Target File</source>
- <translation>目标文件</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/FileEncryptionDialog.cpp" line="59"/>
<source>Output File</source>
- <translation>输出文件</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/FileEncryptionDialog.cpp" line="75"/>
<source>Signature File(.sig) Path</source>
- <translation>签名文件(.sig)路径</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/FileEncryptionDialog.cpp" line="134"/>
<location filename="../../src/ui/FileEncryptionDialog.cpp" line="177"/>
<source>Open File</source>
- <translation>打开文件</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/FileEncryptionDialog.cpp" line="165"/>
<source>Save File</source>
- <translation>保存存档</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/FileEncryptionDialog.cpp" line="194"/>
<location filename="../../src/ui/FileEncryptionDialog.cpp" line="245"/>
<source>Couldn&apos;t open file</source>
- <translation>无法打开文件</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/FileEncryptionDialog.cpp" line="213"/>
<location filename="../../src/ui/FileEncryptionDialog.cpp" line="224"/>
<location filename="../../src/ui/FileEncryptionDialog.cpp" line="235"/>
<source>Error</source>
- <translation>错误</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/FileEncryptionDialog.cpp" line="214"/>
<source>Error Occurred During Encryption</source>
- <translation>加密期间发生错误</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/FileEncryptionDialog.cpp" line="225"/>
<source>Error Occurred During Decryption</source>
- <translation>解密期间发生错误</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/FileEncryptionDialog.cpp" line="236"/>
<source>Error Occurred During Signature</source>
- <translation>签名期间发生错误</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/FileEncryptionDialog.cpp" line="259"/>
<location filename="../../src/ui/FileEncryptionDialog.cpp" line="268"/>
<source>File</source>
- <translation>文件</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/FileEncryptionDialog.cpp" line="260"/>
<source>File exists! Do you want to overwrite it?</source>
- <translation>文件已存在!你想覆盖它吗?</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/FileEncryptionDialog.cpp" line="269"/>
<source>Cannot write file %1:
%2.</source>
- <translation>无法写入文件%1:
-%2。</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -302,52 +412,52 @@
<message>
<location filename="../../src/ui/widgets/FilePage.cpp" line="161"/>
<source>Open</source>
- <translation>打开</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/FilePage.cpp" line="163"/>
<source>Delete</source>
- <translation>删除</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/FilePage.cpp" line="165"/>
<source>Encrypt and Sign</source>
- <translation>加密和签名</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/FilePage.cpp" line="167"/>
<source>Decrypt and Verify</source>
- <translation>解密和验证</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/FilePage.cpp" line="169"/>
<source>Only Sign</source>
- <translation>只签名</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/FilePage.cpp" line="171"/>
<source>Only Verify</source>
- <translation>只验证</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/FilePage.cpp" line="222"/>
<source>Warning</source>
- <translation>警告</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/FilePage.cpp" line="223"/>
<source>Are you sure you want to delete it?</source>
- <translation>你确定你要删除它?</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/FilePage.cpp" line="233"/>
<source>Error</source>
- <translation>错误</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/FilePage.cpp" line="234"/>
<source>Unable to delete the file or folder.</source>
- <translation>无法删除文件或文件夹。</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -355,202 +465,179 @@
<message>
<location filename="../../src/ui/FindWidget.cpp" line="38"/>
<source>Find:</source>
- <translation>查找:</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
<name>GeneralTab</name>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="137"/>
- <source>Remember Password</source>
- <translation>记住密码</translation>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="40"/>
+ <source>GpgFrontend Server</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="140"/>
- <source>Remember password until closing gpg4usb</source>
- <translation>记住密码,直到关闭GPG4USB</translation>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="45"/>
+ <source>Server that provides short key and key exchange services</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="147"/>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="52"/>
<source>Save Checked Keys</source>
- <translation>保存选中密钥</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="150"/>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="55"/>
<source>Save checked private keys on exit and restore them on next start.</source>
- <translation>在退出时保存已选中的密钥对并在下次启动时恢复。</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="159"/>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="64"/>
<source>Confirm drag&apos;n&apos;drop key import</source>
- <translation>默认拖拽文件&apos;触发密钥导入</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="162"/>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="67"/>
<source>Import files dropped on the keylist without confirmation.</source>
- <translation>无需确认导入文件是否要在密钥列表中显示。</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="169"/>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="74"/>
<source>Language</source>
- <translation>语言</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="178"/>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="83"/>
<source>&lt;b&gt;NOTE: &lt;/b&gt; GpgFrontend will restart automatically if you change the language!</source>
- <translation>&lt;b&gt;注意:如果更改语言,则会自动重启!</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="187"/>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="92"/>
<source>Own key</source>
- <translation>我的密钥</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="195"/>
- <source>&lt;none&gt;</source>
- <translation>&lt;无&gt;</translation>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="96"/>
+ <source>Get Service Token</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="209"/>
- <source>Key pair for synchronization and identity authentication</source>
- <translation>用于同步和身份验证的密钥对</translation>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="97"/>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="234"/>
+ <source>No Service Token Found</source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>GpgME::GpgContext</name>
<message>
- <location filename="../../src/gpg/GpgContext.cpp" line="528"/>
- <source>Wrong password</source>
- <translation>密码错误</translation>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="103"/>
+ <source>&lt;none&gt;</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/GpgContext.cpp" line="536"/>
- <source>Enter Password for</source>
- <translation>输入密码</translation>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="120"/>
+ <source>Key pair for synchronization and identity authentication</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/GpgContext.cpp" line="540"/>
- <source>Enter Password</source>
- <translation>输入密码</translation>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="252"/>
+ <source>Invalid Operation</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/GpgContext.cpp" line="706"/>
- <source>Key Selection</source>
- <translation>密钥选择</translation>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="253"/>
+ <source>Own Key can not be None while getting service token.</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/GpgContext.cpp" line="706"/>
- <source>No Private Key Selected</source>
- <translation>没有选择私钥</translation>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="265"/>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="336"/>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="353"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/GpgContext.cpp" line="746"/>
- <source>Error in signing:</source>
- <translation>签名时出错:</translation>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="266"/>
+ <source>Key Not Exists</source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>GpgPathsTab</name>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="711"/>
- <source>Relative path to keydb</source>
- <translation>keydB的相对路径</translation>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="337"/>
+ <source>The communication content with the server does not meet the requirements</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="724"/>
- <source>Current keydb path: </source>
- <translation>当前密钥数据库路径:</translation>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="350"/>
+ <source>Notice</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="729"/>
- <source>&lt;b&gt;NOTE: &lt;/b&gt; Gpg4usb will restart automatically if you change the keydb path!</source>
- <translation>&lt;b&gt;注意:如果更改密钥数据库路径,则会自动重启!</translation>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="351"/>
+ <source>Succeed in getting service token</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="758"/>
- <source>Choose keydb directory</source>
- <translation>选择密钥数据库目录</translation>
+ <location filename="../../src/ui/settings/SettingsGeneral.cpp" line="353"/>
+ <source>There is a problem with the communication with the server</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
- <name>ImportFromGnupgPage</name>
- <message>
- <location filename="../../src/ui/Wizard.cpp" line="302"/>
- <source>Import keys...</source>
- <translation>导入密钥......</translation>
- </message>
- <message>
- <location filename="../../src/ui/Wizard.cpp" line="303"/>
- <source>...from existing GnuPG installation</source>
- <translation>...从现有的Gnupg安装</translation>
- </message>
- <message>
- <location filename="../../src/ui/Wizard.cpp" line="305"/>
- <source>You can import keys from a locally installed GnuPG.&lt;br&gt;&lt;br&gt; The location is read from registry in Windows or assumed to be the .gnupg folder in the your home directory in Linux.&lt;br&gt;</source>
- <translation>您可以从本地安装的gnupg导入密钥。&lt;br&gt; &lt;br&gt;从Windows中的Registry读取位置,也可以在Linux中的主目录中假定为.gnupg文件夹。&lt;br&gt; &lt;br&gt;</translation>
- </message>
+ <name>GpgME::GpgContext</name>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="309"/>
- <source>Import keys from GnuPG</source>
- <translation>从Gnupg导入密钥</translation>
+ <location filename="../../src/gpg/gpg_context/GpgContext.cpp" line="184"/>
+ <source>Wrong password</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="323"/>
- <source>Import Error</source>
- <translation>导入错误</translation>
+ <location filename="../../src/gpg/gpg_context/GpgContext.cpp" line="192"/>
+ <source>Enter Password for</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="323"/>
- <source>Couldn&apos;t locate GnuPG home directory</source>
- <translation>无法找到gnupg主目录</translation>
- </message>
-</context>
-<context>
- <name>ImportFromGpg4usbPage</name>
- <message>
- <location filename="../../src/ui/Wizard.cpp" line="225"/>
- <source>Import from...</source>
- <translation>导入于...</translation>
+ <location filename="../../src/gpg/gpg_context/GpgContext.cpp" line="196"/>
+ <source>Enter Password</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="226"/>
- <source>...existing GPGFrontend</source>
- <translation>......现有的GPGFrontend.</translation>
+ <location filename="../../src/gpg/gpg_context/GpgContext.cpp" line="258"/>
+ <source>Processing</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="228"/>
- <source>You can import keys and/or settings from existing GPGFrontend. &lt;br&gt;&lt;br&gt;Just check what you want to import, click the import button and choose the directory of your other GPGFrontend in the appearing file dialog.</source>
- <translation>您可以从现有GPGFrontend导入密钥和/或设置。&lt;br&gt; &lt;br&gt;查看要导入的内容,单击“导入”按钮,然后在“出现的文件”对话框中选择其他GPGFrontend的目录。</translation>
+ <location filename="../../src/gpg/gpg_context/GpgContextBasicOpera.cpp" line="164"/>
+ <source>Key Selection</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="235"/>
- <source>Keys</source>
- <translation>密钥</translation>
+ <location filename="../../src/gpg/gpg_context/GpgContextBasicOpera.cpp" line="164"/>
+ <source>No Private Key Selected</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="239"/>
- <source>Configuration</source>
- <translation>配置</translation>
+ <location filename="../../src/gpg/gpg_context/GpgContextBasicOpera.cpp" line="195"/>
+ <source>Error in signing:</source>
+ <translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>GpgPathsTab</name>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="241"/>
- <source>Import from GPGFrontend</source>
- <translation>从GPGFrontend导入</translation>
+ <location filename="../../src/ui/settings/SettingsDialog.cpp" line="139"/>
+ <source>Relative path to keydb</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="256"/>
- <source>Other GPGFrontend directory</source>
- <translation>其他GPGFrontend目录</translation>
+ <location filename="../../src/ui/settings/SettingsDialog.cpp" line="152"/>
+ <source>Current keydb path: </source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="275"/>
- <source>Configuration Imported</source>
- <translation>配置导入</translation>
+ <location filename="../../src/ui/settings/SettingsDialog.cpp" line="157"/>
+ <source>&lt;b&gt;NOTE: &lt;/b&gt; Gpg4usb will restart automatically if you change the keydb path!</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="276"/>
- <source>Imported Configuration from old GPGFrontend.&lt;br&gt;Will now restart to activate the configuration.</source>
- <translation>从旧GPGFrontend导入配置。&lt;br&gt;现在将重新启动以激活配置。</translation>
+ <location filename="../../src/ui/settings/SettingsDialog.cpp" line="186"/>
+ <source>Choose keydb directory</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -558,78 +645,78 @@
<message>
<location filename="../../src/ui/widgets/InfoBoardWidget.cpp" line="40"/>
<source>Import missing key from Keyserver</source>
- <translation>从密钥服务器导入丢失的密钥</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/InfoBoardWidget.cpp" line="57"/>
- <source>Optional Actions Menu</source>
- <translation>可选操作菜单</translation>
+ <source>Optional Actions</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
<name>InfoTab</name>
<message>
- <location filename="../../src/ui/help/AboutDialog.cpp" line="74"/>
+ <location filename="../../src/ui/help/AboutDialog.cpp" line="76"/>
<source>&lt;br&gt;&lt;center&gt;GPGFrontend is an easy-to-use, compact, cross-platform, &lt;br&gt;and installation-free gpg front-end tool.&lt;br&gt;It visualizes most of the common operations of gpg commands.&lt;br&gt;It&apos;s licensed under the GPL v3&lt;br&gt;&lt;br&gt;&lt;b&gt;Developer:&lt;/b&gt;&lt;br&gt;Saturneric&lt;br&gt;&lt;br&gt;If you have any questions or suggestions, raise an issue&lt;br/&gt;at &lt;a href=&quot;https://github.com/saturneric/GpgFrontend&quot;&gt;GitHub&lt;/a&gt; or send a mail to my mailing list at &lt;a href=&quot;mailto:[email protected]&quot;&gt;[email protected]&lt;/a&gt;.</source>
- <translation>&lt;br&gt;&lt;center&gt;GPGFrontend是一个易于使用,紧凑,跨平台,无需安装的GPG前端工具。&lt;br&gt;它可视化GPG命令的大多数常见操作。&lt;br&gt;它使用GPL V3许可证&lt;br&gt; &lt;br&gt; &lt;br&gt; &lt;br&gt; &lt;br&gt; &lt;br&gt; 作者:&lt;/b&gt;&lt;br&gt;Saturneric&lt;br&gt;&lt;br&gt;如果你有任何疑问, 请发起一个issue&lt;br/&gt;到 &lt;a href=&quot;https://github.com/saturneric/GpgFrontend&quot;&gt;GitHub&lt;/a&gt; 或者给我发邮件 &lt;a href=&quot;mailto:[email protected]&quot;&gt;[email protected]&lt;/a&gt;.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/help/AboutDialog.cpp" line="82"/>
+ <location filename="../../src/ui/help/AboutDialog.cpp" line="84"/>
<source>&lt;br&gt;&lt;br&gt; Built with Qt </source>
- <translation>&lt;br&gt; &lt;br&gt;构建该程序使用了Qt</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/help/AboutDialog.cpp" line="83"/>
+ <location filename="../../src/ui/help/AboutDialog.cpp" line="85"/>
<source> and GPGME </source>
- <translation>和gpgme</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/help/AboutDialog.cpp" line="84"/>
+ <location filename="../../src/ui/help/AboutDialog.cpp" line="86"/>
<source>&lt;br&gt;Built at </source>
- <translation>&lt;br&gt;构建于</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
<name>IntroPage</name>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="111"/>
+ <location filename="../../src/ui/Wizard.cpp" line="66"/>
<source>Getting Started...</source>
- <translation>入门...</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="112"/>
+ <location filename="../../src/ui/Wizard.cpp" line="67"/>
<source>... with GPGFrontend</source>
- <translation>...与GPGFrontend.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="114"/>
+ <location filename="../../src/ui/Wizard.cpp" line="69"/>
<source>Welcome to use GPGFrontend for decrypting and signing text or file!</source>
- <translation>欢迎使用GPGFrontend进行解密和签名文本或文件!</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="116"/>
+ <location filename="../../src/ui/Wizard.cpp" line="71"/>
<source>is a Powerful, Easy-to-Use, Compact, Cross-Platform, and Installation-Free OpenPGP Crypto Tool.</source>
- <translation>是一个功能强大,易于使用,小巧,跨平台和无需安装的OpenPGP加密工具。</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="117"/>
+ <location filename="../../src/ui/Wizard.cpp" line="72"/>
<source>For brief information have a look at the</source>
- <translation>了解简要信息请查看</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="118"/>
+ <location filename="../../src/ui/Wizard.cpp" line="74"/>
<source>Overview</source>
- <translation>概述</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="119"/>
+ <location filename="../../src/ui/Wizard.cpp" line="75"/>
<source>by clicking the link, the page will open in the web browser</source>
- <translation>通过单击链接,页面将在Web浏览器中打开</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="127"/>
+ <location filename="../../src/ui/Wizard.cpp" line="83"/>
<source>Choose a Language</source>
- <translation>选择一种语言</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -637,182 +724,161 @@
<message>
<location filename="../../src/ui/keypair_details/KeyDetailsDialog.cpp" line="31"/>
<source>KeyPair</source>
- <translation>密钥对</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyDetailsDialog.cpp" line="32"/>
<source>UIDs</source>
- <translation>UID</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyDetailsDialog.cpp" line="33"/>
<source>Subkeys</source>
- <translation>子密钥</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyDetailsDialog.cpp" line="40"/>
<source>Key Details</source>
- <translation>密钥详情</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
<name>KeyGenDialog</name>
<message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="32"/>
+ <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="33"/>
<source>Generate Key</source>
- <translation>生成密钥</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="68"/>
+ <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="69"/>
<source> Name must contain at least five characters.
</source>
- <translation>名称必须包含至少五个字符。</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="70"/>
+ <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="71"/>
<source> Please give a email address.
</source>
- <translation>请提供电子邮件地址。</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="77"/>
+ <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="78"/>
<source> Expiration time no more than 2 years.
</source>
- <translation>到期时间不超过2年。</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="103"/>
- <source>Generating Key...</source>
- <translation>生成密钥......</translation>
+ <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="112"/>
+ <source>Success</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="106"/>
- <source>Collecting random data for key generation.
- This may take a while.
- To speed up the process use your computer
- (e.g. browse the net, listen to music,...)</source>
- <translation>收集密钥生成的随机数据。
- 可能还要等一下。
- 加快过程使用您的计算机
- (例如,浏览网,听音乐,......)</translation>
+ <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="112"/>
+ <source>The new key pair has been generated.</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="150"/>
+ <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="116"/>
+ <source>Failure</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="145"/>
<source>Key Usage</source>
- <translation>密钥用法</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="152"/>
+ <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="147"/>
<source>Encryption</source>
- <translation>加密</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="155"/>
+ <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="150"/>
<source>Signing</source>
- <translation>签名</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="158"/>
+ <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="153"/>
<source>Certification</source>
- <translation>认证</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="161"/>
+ <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="156"/>
<source>Authentication</source>
- <translation>验证</translation>
- </message>
- <message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="312"/>
- <source>Success</source>
- <translation>成功</translation>
- </message>
- <message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="312"/>
- <source>The new key pair has been generated.</source>
- <translation>已生成新的密钥对。</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="314"/>
- <source>Failure</source>
- <translation>失败</translation>
- </message>
- <message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="314"/>
- <source>An error occurred during key generation.</source>
- <translation>密钥生成期间发生错误。</translation>
- </message>
- <message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="350"/>
+ <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="338"/>
<source>Name:</source>
- <translation>名称:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="351"/>
+ <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="339"/>
<source>Email Address:</source>
- <translation>电子邮件地址:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="352"/>
+ <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="340"/>
<source>Comment:</source>
- <translation>备注:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="353"/>
+ <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="341"/>
<source>Expiration Date:</source>
- <translation>过期日期:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="354"/>
+ <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="342"/>
<source>Never Expire</source>
- <translation>永不过期</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="355"/>
+ <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="343"/>
<source>KeySize (in Bit):</source>
- <translation>密钥长度(位):</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="356"/>
+ <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="344"/>
<source>Key Type:</source>
- <translation>密钥类型:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="357"/>
+ <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="345"/>
<source>Non Pass Phrase</source>
- <translation>无需密码保护</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="370"/>
+ <location filename="../../src/ui/keygen/KeygenDialog.cpp" line="358"/>
<source>Basic Information</source>
- <translation>基本信息</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
<name>KeyGenPage</name>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="366"/>
+ <location filename="../../src/ui/Wizard.cpp" line="183"/>
<source>Create a keypair...</source>
- <translation>新建一个密钥对......</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="367"/>
+ <location filename="../../src/ui/Wizard.cpp" line="184"/>
<source>...for decrypting and signing messages</source>
- <translation>...用于解密和签名消息</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="368"/>
+ <location filename="../../src/ui/Wizard.cpp" line="185"/>
<source>You should create a new keypair.The pair consists of a public and a private key.&lt;br&gt;Other users can use the public key to encrypt messages for you and verify messages signed by you.You can use the private key to decrypt and sign messages.&lt;br&gt;For more information have a look at the offline tutorial (which then is shown in the main window):</source>
- <translation>您应该创建一个新的keypair.该金对由公共和私钥组成。&lt;br&gt;其他用户可以使用公钥来加密为您的消息,并验证由您签名的消息。您可以使用私钥来解密和签名消息。&lt;br&gt; &lt;br&gt;更多信息看看脱机教程(然后在主窗口中显示):</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="375"/>
+ <location filename="../../src/ui/Wizard.cpp" line="192"/>
<source>Offline tutorial</source>
- <translation>离线教程</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="382"/>
+ <location filename="../../src/ui/Wizard.cpp" line="199"/>
<source>Create New Key</source>
- <translation>创建新密钥</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -821,429 +887,442 @@
<location filename="../../src/ui/KeyImportDetailDialog.cpp" line="34"/>
<location filename="../../src/ui/KeyImportDetailDialog.cpp" line="53"/>
<source>Key Update Details</source>
- <translation>密钥更新详细信息</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyImportDetailDialog.cpp" line="34"/>
<source>No keys found</source>
- <translation>没有找到密钥</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyImportDetailDialog.cpp" line="36"/>
<location filename="../../src/ui/KeyImportDetailDialog.cpp" line="55"/>
<source>Key Import Details</source>
- <translation>密钥导入详细信息</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyImportDetailDialog.cpp" line="36"/>
<source>No keys found to import</source>
- <translation>没有发现导入的密钥</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyImportDetailDialog.cpp" line="64"/>
<source>General key info</source>
- <translation>通用密钥信息</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyImportDetailDialog.cpp" line="67"/>
<source>Considered:</source>
- <translation>经过考虑的:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyImportDetailDialog.cpp" line="71"/>
<source>Public unchanged:</source>
- <translation>公开未改变的:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyImportDetailDialog.cpp" line="76"/>
<source>Imported:</source>
- <translation>导入:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyImportDetailDialog.cpp" line="81"/>
<source>Not imported:</source>
- <translation>未导入:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyImportDetailDialog.cpp" line="86"/>
<source>Private read:</source>
- <translation>私有读取:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyImportDetailDialog.cpp" line="91"/>
<source>Private imported:</source>
- <translation>私有导入:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyImportDetailDialog.cpp" line="96"/>
<source>Private unchanged:</source>
- <translation>私有未改变的:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyImportDetailDialog.cpp" line="111"/>
<source>Name</source>
- <translation>名称</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyImportDetailDialog.cpp" line="111"/>
<source>Email</source>
- <translation>电子邮件</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyImportDetailDialog.cpp" line="111"/>
<source>Status</source>
- <translation>状态</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyImportDetailDialog.cpp" line="111"/>
<source>Fingerprint</source>
- <translation>指纹</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyImportDetailDialog.cpp" line="135"/>
<source>private</source>
- <translation>私有的</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyImportDetailDialog.cpp" line="138"/>
<source>public</source>
- <translation>公有</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyImportDetailDialog.cpp" line="141"/>
<source>unchanged</source>
- <translation>不变的</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyImportDetailDialog.cpp" line="144"/>
<source>new key</source>
- <translation>新密钥</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyImportDetailDialog.cpp" line="147"/>
<source>new subkey</source>
- <translation>新子密钥</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyImportDetailDialog.cpp" line="151"/>
<source>new signature</source>
- <translation>新签名</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyImportDetailDialog.cpp" line="155"/>
<source>new uid</source>
- <translation>新UID</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
<name>KeyList</name>
<message>
- <location filename="../../src/ui/widgets/KeyList.cpp" line="77"/>
+ <location filename="../../src/ui/widgets/KeyList.cpp" line="76"/>
<source>Select</source>
- <translation>选择</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/widgets/KeyList.cpp" line="77"/>
+ <location filename="../../src/ui/widgets/KeyList.cpp" line="76"/>
<source>Type</source>
- <translation>类型</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/widgets/KeyList.cpp" line="77"/>
+ <location filename="../../src/ui/widgets/KeyList.cpp" line="76"/>
<source>Name</source>
- <translation>名称</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/widgets/KeyList.cpp" line="77"/>
+ <location filename="../../src/ui/widgets/KeyList.cpp" line="76"/>
<source>Email Address</source>
- <translation>电子邮件地址</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/widgets/KeyList.cpp" line="78"/>
+ <location filename="../../src/ui/widgets/KeyList.cpp" line="77"/>
<source>Usage</source>
- <translation>用法</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/widgets/KeyList.cpp" line="78"/>
+ <location filename="../../src/ui/widgets/KeyList.cpp" line="77"/>
<source>Validity</source>
- <translation>有效性</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/widgets/KeyList.cpp" line="78"/>
+ <location filename="../../src/ui/widgets/KeyList.cpp" line="77"/>
<source>Finger Print</source>
- <translation>指纹</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/widgets/KeyList.cpp" line="315"/>
+ <location filename="../../src/ui/widgets/KeyList.cpp" line="302"/>
<source>Import Keys</source>
- <translation>导入密钥</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/widgets/KeyList.cpp" line="317"/>
+ <location filename="../../src/ui/widgets/KeyList.cpp" line="305"/>
<source>You&apos;ve dropped something on the table.
GpgFrontend will now try to import key(s).</source>
- <translation>你拖拽了某些文件到表格上。
- GPGFrontend现在将尝试导入密钥。</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/widgets/KeyList.cpp" line="320"/>
+ <location filename="../../src/ui/widgets/KeyList.cpp" line="308"/>
<source>Always import without bothering.</source>
- <translation>始终导入而不再询问。</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/widgets/KeyList.cpp" line="356"/>
+ <location filename="../../src/ui/widgets/KeyList.cpp" line="341"/>
<source>Couldn&apos;t Open File: </source>
- <translation>无法打开文件:</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
<name>KeyMgmt</name>
<message>
- <location filename="../../src/ui/KeyMgmt.cpp" line="81"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="82"/>
<source>Key Pair Management</source>
- <translation>密钥对管理</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="88"/>
<source>&amp;Open</source>
- <translation>&amp;打开</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="89"/>
<source>Ctrl+O</source>
- <translation>Ctrl + O.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="90"/>
<source>Open Key File</source>
- <translation>打开密钥文件</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="93"/>
<source>&amp;Close</source>
- <translation>&amp;关闭</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="94"/>
<source>Ctrl+Q</source>
- <translation>Ctrl + Q.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="96"/>
<source>Close</source>
- <translation>关闭</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="99"/>
<source>New Keypair</source>
- <translation>新密钥对</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="100"/>
<source>Ctrl+N</source>
- <translation>Ctrl + N.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="102"/>
<source>Generate KeyPair</source>
- <translation>生成密钥对</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="105"/>
<source>New Subkey</source>
- <translation>新子密钥</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="106"/>
<source>Ctrl+Shift+N</source>
- <translation>ctrl + shift + n</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="108"/>
<source>Generate Subkey For Selected KeyPair</source>
- <translation>为选定的keypair生成subkey</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="111"/>
- <location filename="../../src/ui/KeyMgmt.cpp" line="152"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="151"/>
<source>&amp;File</source>
- <translation>&amp;文件</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="113"/>
<source>Import New Key From File</source>
- <translation>从文件导入新密钥</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="116"/>
<source>&amp;Clipboard</source>
- <translation>&amp;剪贴板</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="118"/>
<source>Import New Key From Clipboard</source>
- <translation>从剪贴板导入新密钥</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="121"/>
<source>&amp;Keyserver</source>
- <translation>&amp;密钥服务器</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="123"/>
<source>Import New Key From Keyserver</source>
- <translation>从密钥服务器导入新密钥</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="126"/>
<source>Export To &amp;Clipboard</source>
- <translation>导出到剪贴板</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="128"/>
<source>Export Selected Key(s) To Clipboard</source>
- <translation>将所选密钥导出到剪贴板</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="131"/>
<source>Export To &amp;File</source>
- <translation>导出到&amp;文件</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="133"/>
<source>Export Selected Key(s) To File</source>
- <translation>将所选密钥导出到文件</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="136"/>
<source>Delete Selected Key(s)</source>
- <translation>删除所选密钥</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="137"/>
<source>Delete the Selected keys</source>
- <translation>删除所选密钥</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="140"/>
<source>Delete Checked Key(s)</source>
- <translation>删除已选密钥</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="141"/>
<source>Delete the Checked keys</source>
- <translation>删除已选中的密钥</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="145"/>
<source>Show Key Details</source>
- <translation>显示密钥详情</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="146"/>
<source>Show Details for this Key</source>
- <translation>显示此密钥的详细信息</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyMgmt.cpp" line="156"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="155"/>
<source>&amp;Key</source>
- <translation>&amp;密钥</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyMgmt.cpp" line="157"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="156"/>
<source>&amp;Generate Key</source>
- <translation>生成密钥</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyMgmt.cpp" line="161"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="160"/>
<source>&amp;Import Key</source>
- <translation>&amp;导入密钥</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyMgmt.cpp" line="173"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="171"/>
<source>Key</source>
- <translation>密钥</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyMgmt.cpp" line="181"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="179"/>
<source>Generate</source>
- <translation>生成</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyMgmt.cpp" line="182"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="180"/>
<source>Generate A New Keypair or Subkey</source>
- <translation>生成一个新的keypair或subkey</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyMgmt.cpp" line="191"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="189"/>
<source>Import key</source>
- <translation>导入密钥</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyMgmt.cpp" line="192"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="190"/>
<source>Import Key</source>
- <translation>导入密钥</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyMgmt.cpp" line="213"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="209"/>
<source>Open Key</source>
- <translation>打开密钥</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyMgmt.cpp" line="213"/>
- <location filename="../../src/ui/KeyMgmt.cpp" line="299"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="210"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="302"/>
<source>Key Files</source>
- <translation>密钥文件</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyMgmt.cpp" line="213"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="210"/>
<source>Keyring files</source>
- <translation>密钥入文件</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyMgmt.cpp" line="218"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="216"/>
<source>Couldn&apos;t Open File: </source>
- <translation>无法打开文件:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyMgmt.cpp" line="268"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="262"/>
<source>Deleting Keys</source>
- <translation>删除密钥</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyMgmt.cpp" line="269"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="263"/>
<source>Are you sure that you want to delete the following keys?</source>
- <translation>您确定要删除以下密钥吗?</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyMgmt.cpp" line="270"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="265"/>
<source>The action can not be undone.</source>
- <translation>行动无法撤消。</translation>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="281"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="296"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="344"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="281"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="296"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="344"/>
+ <source>Key Not Found.</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyMgmt.cpp" line="299"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="301"/>
<source>Export Key To File</source>
- <translation>导出文件</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyMgmt.cpp" line="309"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="312"/>
<source>key(s) exported</source>
- <translation>密钥导出</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="338"/>
- <location filename="../../src/ui/KeyMgmt.cpp" line="345"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="349"/>
<source>Invalid Operation</source>
- <translation>操作无效</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyMgmt.cpp" line="339"/>
<source>Please select one KeyPair before doing this operation.</source>
- <translation>请在执行此操作之前选择一个keypair。</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyMgmt.cpp" line="346"/>
+ <location filename="../../src/ui/KeyMgmt.cpp" line="350"/>
<source>If a key pair does not have a private key then it will not be able to generate sub-keys.</source>
- <translation>如果密钥对没有私钥,则它将无法生成子密钥。</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -1251,34 +1330,34 @@
<message>
<location filename="../../src/ui/keypair_details/KeyNewUIDDialog.cpp" line="40"/>
<source>Name</source>
- <translation>名称</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyNewUIDDialog.cpp" line="41"/>
<source>Email</source>
- <translation>电子邮件</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyNewUIDDialog.cpp" line="42"/>
<source>Comment</source>
- <translation>备注</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyNewUIDDialog.cpp" line="55"/>
<source>Create New UID</source>
- <translation>创建新UID</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyNewUIDDialog.cpp" line="68"/>
<source> Name must contain at least five characters.
</source>
- <translation>名称必须包含至少五个字符。</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyNewUIDDialog.cpp" line="70"/>
<source> Please give a email address.
</source>
- <translation>请提供电子邮件地址。</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -1286,212 +1365,212 @@
<message>
<location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="34"/>
<source>Owner</source>
- <translation>所有者</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="35"/>
<source>Master Key</source>
- <translation>主密钥</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="36"/>
<source>Fingerprint</source>
- <translation>指纹</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="37"/>
<source>Additional UIDs</source>
- <translation>额外的UID</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="58"/>
<source>Exists</source>
- <translation>存在</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="58"/>
<source>Not Exists</source>
- <translation>不存在</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="83"/>
<source>Name:</source>
- <translation>名称:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="84"/>
<source>Email Address:</source>
- <translation>电子邮件地址:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="85"/>
<source>Comment:</source>
- <translation>备注:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="90"/>
<source>Key ID: </source>
- <translation>密钥ID:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="91"/>
<source>Algorithm: </source>
- <translation>算法:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="92"/>
<source>Key Size:</source>
- <translation>密钥长度:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="93"/>
<source>Nominal Usage: </source>
- <translation>名义用法:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="94"/>
<source>Actual Usage: </source>
- <translation>实际用法:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="95"/>
<source>Expires on: </source>
- <translation>到期:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="96"/>
<source>Last Update: </source>
- <translation>最后更新:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="97"/>
<source>Secret Key Existence: </source>
- <translation>主密钥存在:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="121"/>
<source>Copy</source>
- <translation>复制</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="123"/>
<source>copy fingerprint to clipboard</source>
- <translation>将指纹复制到剪贴板</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="133"/>
<source>Operations</source>
- <translation>操作</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="136"/>
<source>Export Private Key (Include Subkey)</source>
- <translation></translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="203"/>
- <source>You are about to export your</source>
- <translation>你现在正在导出</translation>
+ <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="141"/>
+ <source>Modify Expiration Datetime (Master Key)</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="204"/>
- <source>PRIVATE KEY</source>
- <translation>私钥</translation>
+ <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="146"/>
+ <source>Key Server Operation (Pubkey)</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="205"/>
- <source>This is NOT your Public Key, so DON&apos;T give it away.</source>
- <translation>这不是公钥,所以不要随意放置</translation>
+ <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="149"/>
+ <source>Generate Revoke Certificate</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="206"/>
- <source>Do you REALLY want to export your PRIVATE KEY?</source>
- <translation>你真的想要导出该私钥吗</translation>
+ <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="174"/>
+ <source>Warning: The Master Key has expired.</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Export Private Key (Include Subkeys)</source>
- <translation type="obsolete">导出私钥(包括子密钥)</translation>
+ <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="177"/>
+ <source>Warning: The Master Key has been revoked</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="141"/>
- <source>Modify Expiration Datetime (Master Key)</source>
- <translation>修改到期日期时间(主密钥)</translation>
+ <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="201"/>
+ <source>Exporting private Key</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="146"/>
- <source>Key Server Operation (Pubkey)</source>
- <translation>密钥服务器操作(Pubkey)</translation>
+ <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="202"/>
+ <source>You are about to export your</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="149"/>
- <source>Generate Revoke Certificate</source>
- <translation>生成撤销证书</translation>
+ <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="203"/>
+ <source>PRIVATE KEY</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="175"/>
- <source>Warning: The Master Key has expired.</source>
- <translation>警告:主密钥已过期。</translation>
+ <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="204"/>
+ <source>This is NOT your Public Key, so DON&apos;T give it away.</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="178"/>
- <source>Warning: The Master Key has been revoked</source>
- <translation>警告:主密钥已被撤销</translation>
+ <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="205"/>
+ <source>Do you REALLY want to export your PRIVATE KEY?</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="202"/>
- <source>Exporting private Key</source>
- <translation>导出私钥</translation>
+ <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="219"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>&lt;h3&gt;You are about to export your &lt;font color=&quot;red&quot;&gt;PRIVATE KEY&lt;/font&gt;!&lt;/h3&gt;
-This is NOT your Public Key, so DON&apos;T give it away.&lt;br /&gt;Do you REALLY want to export your PRIVATE KEY?</source>
- <translation type="vanished">&lt;h3&gt;您即将导出&lt;font color =“红色”&gt;私钥&lt;/ font&gt;!&lt;/ h3&gt;
-这不是你的公钥,所以随意放置它。&lt;br /&gt;你真的想导出私钥吗?</translation>
+ <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="219"/>
+ <source>Key Not Found.</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="221"/>
+ <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="224"/>
<source>Export Key To File</source>
- <translation>导出文件</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="222"/>
+ <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="225"/>
<source>Key Files</source>
- <translation>密钥文件</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="225"/>
+ <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="228"/>
<source>Export Error</source>
- <translation>导出错误</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="225"/>
+ <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="228"/>
<source>Couldn&apos;t open %1 for writing</source>
- <translation>无法打开%1来写作</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="295"/>
+ <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="298"/>
<source>Never Expire</source>
- <translation>永不过期</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="315"/>
+ <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="318"/>
<source>Upload Key Pair to Key Server</source>
- <translation>将密钥对上传到密钥服务器</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="317"/>
+ <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="320"/>
<source>Update Key Pair</source>
- <translation>更新密钥对</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="340"/>
+ <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="343"/>
<source>Generate revocation certificate</source>
- <translation>生成撤销证书</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="343"/>
+ <location filename="../../src/ui/keypair_details/KeyPairDetailTab.cpp" line="346"/>
<source>Revocation Certificates</source>
- <translation>撤销证书</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -1499,87 +1578,87 @@ This is NOT your Public Key, so DON&apos;T give it away.&lt;br /&gt;Do you REALL
<message>
<location filename="../../src/ui/keypair_details/KeyPairSubkeyTab.cpp" line="37"/>
<source>Generate A New Subkey</source>
- <translation>生成一个新的子密钥</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairSubkeyTab.cpp" line="54"/>
<source>Key ID: </source>
- <translation>密钥ID:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairSubkeyTab.cpp" line="55"/>
<source>Algorithm: </source>
- <translation>算法:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairSubkeyTab.cpp" line="56"/>
<source>Key Size:</source>
- <translation>密钥大小:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairSubkeyTab.cpp" line="57"/>
<source>Usage: </source>
- <translation>用法:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairSubkeyTab.cpp" line="58"/>
<source>Expires On </source>
- <translation>到期</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairSubkeyTab.cpp" line="59"/>
<source>Last Update: </source>
- <translation>最后更新:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairSubkeyTab.cpp" line="60"/>
<source>Existence: </source>
- <translation>存在:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairSubkeyTab.cpp" line="61"/>
<source>Fingerprint: </source>
- <translation>指纹:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairSubkeyTab.cpp" line="121"/>
<source>Subkey ID</source>
- <translation>次要ID</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairSubkeyTab.cpp" line="121"/>
<source>Key Size</source>
- <translation>密钥大小</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairSubkeyTab.cpp" line="121"/>
<source>Algo</source>
- <translation>某物</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairSubkeyTab.cpp" line="121"/>
<source>Create Date</source>
- <translation>创建日期</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairSubkeyTab.cpp" line="121"/>
<source>Expire Date</source>
- <translation>到期日期</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyPairSubkeyTab.cpp" line="161"/>
+ <location filename="../../src/ui/keypair_details/KeyPairSubkeyTab.cpp" line="160"/>
<source>Never Expire</source>
- <translation>永不过期</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyPairSubkeyTab.cpp" line="185"/>
+ <location filename="../../src/ui/keypair_details/KeyPairSubkeyTab.cpp" line="184"/>
<source>Never Expires</source>
- <translation>永远不会到期</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyPairSubkeyTab.cpp" line="231"/>
+ <location filename="../../src/ui/keypair_details/KeyPairSubkeyTab.cpp" line="230"/>
<source>Edit Expire Date</source>
- <translation>编辑到期日期</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -1587,64 +1666,64 @@ This is NOT your Public Key, so DON&apos;T give it away.&lt;br /&gt;Do you REALL
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="39"/>
<source>New UID</source>
- <translation>新UID</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="40"/>
<source>UID Management</source>
- <translation>UID管理</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="59"/>
<source>UIDs</source>
- <translation>UID</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="67"/>
<source>Signature of Selected UID</source>
- <translation>已选择UID包含的签名</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="103"/>
<source>Select</source>
- <translation>选择</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="103"/>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="126"/>
<source>Name</source>
- <translation>名称</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="103"/>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="126"/>
<source>Email</source>
- <translation>电子邮件</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="103"/>
<source>Comment</source>
- <translation>备注</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="126"/>
<source>Key ID</source>
- <translation>密钥ID.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="126"/>
<source>Create Date</source>
- <translation>创建日期</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="126"/>
<source>Expired Date</source>
- <translation>过期日期</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="219"/>
<source>Never Expires</source>
- <translation>永远不会到期</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="237"/>
@@ -1654,33 +1733,33 @@ This is NOT your Public Key, so DON&apos;T give it away.&lt;br /&gt;Do you REALL
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="480"/>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="487"/>
<source>Invalid Operation</source>
- <translation>操作无效</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="238"/>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="301"/>
<source>Please select one or more UIDs before doing this operation.</source>
- <translation>请在执行此操作之前选择一个或多个UID。</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="263"/>
<source>Sign Selected UID(s)</source>
- <translation>签名所选UID(s)</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="265"/>
<source>Delete Selected UID(s)</source>
- <translation>删除所选的UID(s)</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="284"/>
<source>Successful Operation</source>
- <translation>成功运作</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="285"/>
<source>Successfully added a new UID.</source>
- <translation>成功添加了一个新的UID。</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="288"/>
@@ -1689,7 +1768,7 @@ This is NOT your Public Key, so DON&apos;T give it away.&lt;br /&gt;Do you REALL
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="460"/>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="507"/>
<source>Operation Failed</source>
- <translation>操作失败</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="289"/>
@@ -1698,17 +1777,17 @@ This is NOT your Public Key, so DON&apos;T give it away.&lt;br /&gt;Do you REALL
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="461"/>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="508"/>
<source>An error occurred during the operation.</source>
- <translation>操作期间发生错误。</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="313"/>
<source>Deleting UIDs</source>
- <translation>删除UID</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="314"/>
<source>Are you sure that you want to delete the following uids?</source>
- <translation>您确定要删除以下UID吗?</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="315"/>
@@ -1716,73 +1795,73 @@ This is NOT your Public Key, so DON&apos;T give it away.&lt;br /&gt;Do you REALL
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="454"/>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="501"/>
<source>The action can not be undone.</source>
- <translation>行动无法撤消。</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="355"/>
<source>Set Primary UID</source>
- <translation>设置主UID</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="356"/>
<source>Are you sure that you want to set the Primary UID to?</source>
- <translation>您确定要将主UID设置为吗?</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="395"/>
<source>Set As Primary</source>
- <translation>设为主要</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="397"/>
<source>Sign UID</source>
- <translation>签名UID</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="399"/>
<source>Delete UID</source>
- <translation>删除UID.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="426"/>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="441"/>
<source>Please select one UID before doing this operation.</source>
- <translation>在执行此操作之前,请选择一个UID。</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="452"/>
<source>Deleting UID</source>
- <translation>删除UID</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="453"/>
<source>Are you sure that you want to delete the following uid?</source>
- <translation>您确定要删除以下UID吗?</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="469"/>
<source>Delete(Revoke) Key Signature</source>
- <translation>删除(撤消)密钥签名</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="481"/>
<source>Please select one Key Signature before doing this operation.</source>
- <translation>请在执行此操作之前选择一个密钥签名。</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="488"/>
<source>To delete the signature, you need to have its corresponding public key in the local database.</source>
- <translation>要删除签名,您需要在本地数据库中拥有其相应的公钥。</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="499"/>
<source>Deleting Key Signature</source>
- <translation>删除密钥签名</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyPairUIDTab.cpp" line="500"/>
<source>Are you sure that you want to delete the following signature?</source>
- <translation>您确定要删除以下签名吗?</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -1790,140 +1869,140 @@ This is NOT your Public Key, so DON&apos;T give it away.&lt;br /&gt;Do you REALL
<message>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="40"/>
<source>&amp;Close</source>
- <translation>&amp;关闭</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="41"/>
<source>&amp;Import ALL</source>
- <translation>&amp;导入全部</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="42"/>
<source>&amp;Search</source>
- <translation>&amp;搜索</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="45"/>
<source>Search String:</source>
- <translation>搜索字符串:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="49"/>
<source>Key Server:</source>
- <translation>密钥服务器:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="97"/>
<source>Update Keys from Keyserver</source>
- <translation>从密钥服务器更新密钥</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="99"/>
<source>Import Keys from Keyserver</source>
- <translation>从密钥服务器导入密钥</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="158"/>
<source>UID</source>
- <translation>uid</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="158"/>
<source>Creation date</source>
- <translation>创建日期</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="158"/>
<source>KeyID</source>
- <translation>keyid.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="158"/>
<source>Tag</source>
- <translation>标签</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="179"/>
<source>Text is empty.</source>
- <translation>文本为空</translation>
- </message>
- <message>
- <location filename="../../src/ui/KeyServerImportDialog.cpp" line="230"/>
- <source>Too many responses from keyserver!</source>
- <translation>太多来自密钥服务器的响应</translation>
- </message>
- <message>
- <location filename="../../src/ui/KeyServerImportDialog.cpp" line="237"/>
- <source>No keys found, input may be kexId, retrying search with 0x.</source>
- <translation>没有找到密钥,尝试使用密钥标识搜索。</translation>
- </message>
- <message>
- <location filename="../../src/ui/KeyServerImportDialog.cpp" line="242"/>
- <source>No keys found containing the search string!</source>
- <translation>没有发现包含搜索字符串的密钥!</translation>
- </message>
- <message>
- <location filename="../../src/ui/KeyServerImportDialog.cpp" line="246"/>
- <source>Insufficiently specific search string!</source>
- <translation>特定的搜索字符串不足!</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="213"/>
<source>Not Key Found</source>
- <translation>没有密钥</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="216"/>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="386"/>
<source>Timeout</source>
- <translation>超时</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="219"/>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="389"/>
<source>Key Server Not Found</source>
- <translation>找不到密钥服务器</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="222"/>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="392"/>
<source>Connection Error</source>
- <translation>连接错误</translation>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/KeyServerImportDialog.cpp" line="230"/>
+ <source>Too many responses from keyserver!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/KeyServerImportDialog.cpp" line="237"/>
+ <source>No keys found, input may be kexId, retrying search with 0x.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/KeyServerImportDialog.cpp" line="242"/>
+ <source>No keys found containing the search string!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/KeyServerImportDialog.cpp" line="246"/>
+ <source>Insufficiently specific search string!</source>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="274"/>
<source>revoked</source>
- <translation>撤销</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="277"/>
<source>disabled</source>
- <translation>禁用</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="317"/>
<source>&lt;h4&gt;%1 keys found. Double click a key to import it.&lt;/h4&gt;</source>
- <translation>找到&lt;h4&gt;%1密钥。双击将密钥导入它。&lt;/ h4&gt;</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="383"/>
<source>Key Not Found</source>
- <translation>找不到密钥</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="410"/>
<source>&lt;h4&gt;Key Updated&lt;/h4&gt;</source>
- <translation>&lt;h4&gt;密钥更新&lt;/ h4&gt;</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="412"/>
<source>&lt;h4&gt;Key Imported&lt;/h4&gt;</source>
- <translation>&lt;H4&gt;密钥导入&lt;/ h4&gt;</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/KeyServerImportDialog.cpp" line="473"/>
<source>Upload Keys from Keyserver</source>
- <translation>从密钥服务器上传密钥</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -1931,22 +2010,22 @@ This is NOT your Public Key, so DON&apos;T give it away.&lt;br /&gt;Do you REALL
<message>
<location filename="../../src/ui/keypair_details/KeySetExpireDateDialog.cpp" line="36"/>
<source>Confirm</source>
- <translation>确认</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeySetExpireDateDialog.cpp" line="41"/>
<source>Never Expire</source>
- <translation>永不过期</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeySetExpireDateDialog.cpp" line="61"/>
<source>Operation Failed</source>
- <translation>操作失败</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeySetExpireDateDialog.cpp" line="62"/>
<source>An error occurred during the operation.</source>
- <translation>操作期间发生错误。</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -1954,73 +2033,93 @@ This is NOT your Public Key, so DON&apos;T give it away.&lt;br /&gt;Do you REALL
<message>
<location filename="../../src/ui/keypair_details/KeyUIDSignDialog.cpp" line="72"/>
<source>Expire Date</source>
- <translation>到期日期</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/keypair_details/KeyUIDSignDialog.cpp" line="81"/>
<source>Sign For Key&apos;s UID(s)</source>
- <translation>为密钥的UID签名</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyUIDSignDialog.cpp" line="100"/>
+ <location filename="../../src/ui/keypair_details/KeyUIDSignDialog.cpp" line="99"/>
<source>Unsuccessful Operation</source>
- <translation>不成功的操作</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyUIDSignDialog.cpp" line="101"/>
+ <location filename="../../src/ui/keypair_details/KeyUIDSignDialog.cpp" line="100"/>
<source>Signature operation failed for UID </source>
- <translation>UID的签名操作失败</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyUIDSignDialog.cpp" line="108"/>
+ <location filename="../../src/ui/keypair_details/KeyUIDSignDialog.cpp" line="107"/>
<source>Operation Complete</source>
- <translation>操作完成</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keypair_details/KeyUIDSignDialog.cpp" line="109"/>
+ <location filename="../../src/ui/keypair_details/KeyUIDSignDialog.cpp" line="108"/>
<source>The signature operation of the UID is complete</source>
- <translation>UID的签名操作是完整的</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
<name>KeyUploadDialog</name>
<message>
- <location filename="../../src/ui/KeyUploadDialog.cpp" line="49"/>
+ <location filename="../../src/ui/KeyUploadDialog.cpp" line="47"/>
<source>Uploading Public Key</source>
- <translation>上传公钥</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyUploadDialog.cpp" line="112"/>
+ <location filename="../../src/ui/KeyUploadDialog.cpp" line="110"/>
<source>Key Not Found</source>
- <translation>找不到密钥</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyUploadDialog.cpp" line="115"/>
+ <location filename="../../src/ui/KeyUploadDialog.cpp" line="113"/>
<source>Timeout</source>
- <translation>超时</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyUploadDialog.cpp" line="118"/>
+ <location filename="../../src/ui/KeyUploadDialog.cpp" line="116"/>
<source>Key Server Not Found</source>
- <translation>找不到密钥服务器</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/KeyUploadDialog.cpp" line="121"/>
+ <location filename="../../src/ui/KeyUploadDialog.cpp" line="119"/>
<source>Connection Error</source>
- <translation>连接错误</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
<name>KeyserverTab</name>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="607"/>
- <source>Default Key Server for import:</source>
- <translation>导入的默认密钥服务器:</translation>
+ <location filename="../../src/ui/settings/SettingsKeyServer.cpp" line="32"/>
+ <source>General</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/settings/SettingsKeyServer.cpp" line="53"/>
+ <source>No.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/settings/SettingsKeyServer.cpp" line="53"/>
+ <source>Address</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/settings/SettingsKeyServer.cpp" line="53"/>
+ <source>Available</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="624"/>
+ <location filename="../../src/ui/settings/SettingsKeyServer.cpp" line="57"/>
+ <source>Default Key Server for Import:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/settings/SettingsKeyServer.cpp" line="67"/>
<source>Add</source>
- <translation>添加</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -2028,890 +2127,1025 @@ This is NOT your Public Key, so DON&apos;T give it away.&lt;br /&gt;Do you REALL
<message>
<location filename="../../src/MainWindow.cpp" line="35"/>
<source>Loading Gnupg</source>
- <translation>正在加载Gnupg</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/MainWindow.cpp" line="62"/>
<source>ENV Loading Failed</source>
- <translation>ENV Loading失败了</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/MainWindow.cpp" line="63"/>
<source>Gnupg is not installed correctly, please follow the ReadME instructions to install gnupg and then open GPGFrontend.</source>
- <translation>GNUPG未正确安装,请按照README说明安装GNUPG,然后打开GPGFrontend。</translation>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="36"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="40"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="44"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="114"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="127"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="131"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="135"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="196"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="212"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="216"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="220"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="294"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="326"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="331"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="335"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="383"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="396"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="400"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="404"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="501"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="513"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="517"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="521"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="583"/>
+ <location filename="../../src/ui/main_window/MainWindowServerSlotFunction.cpp" line="51"/>
+ <location filename="../../src/ui/main_window/MainWindowServerSlotFunction.cpp" line="112"/>
+ <location filename="../../src/ui/main_window/MainWindowServerSlotFunction.cpp" line="126"/>
+ <location filename="../../src/ui/main_window/MainWindowServerSlotFunction.cpp" line="218"/>
+ <location filename="../../src/ui/main_window/MainWindowServerSlotFunction.cpp" line="231"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="525"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="541"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="38"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="117"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="286"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="525"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="702"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="885"/>
- <source>No Key Selected</source>
- <translation>没有选择密钥</translation>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="36"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="127"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="212"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="396"/>
+ <source>Select a file before doing it.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="40"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="131"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="216"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="400"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="517"/>
+ <source>No permission to read this file.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="44"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="135"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="220"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="404"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="521"/>
+ <source>No permission to create file.</source>
+ <translation type="unfinished"></translation>
</message>
<message>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="49"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="150"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="226"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="409"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="375"/>
+ <source>Warning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="50"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="151"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="227"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="410"/>
+ <source>The target file already exists, do you need to overwrite it?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="62"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="239"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="422"/>
<location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="45"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="124"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="532"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="709"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="126"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="298"/>
+ <source>No Key Selected</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="69"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="246"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="52"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="133"/>
<source>Invalid Operation</source>
- <translation>操作无效</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="46"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="533"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="710"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="70"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="247"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="53"/>
<source>The selected key contains a key that does not actually have a encrypt usage.&lt;br/&gt;</source>
- <translation>所选密钥包含一个实际上没有加密使用的密钥。&lt;br/&gt;</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="47"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="126"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="300"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="534"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="711"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="899"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="71"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="248"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="436"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="54"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="135"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="312"/>
<source>&lt;br/&gt;For example the Following Key: &lt;br/&gt;</source>
- <translation>&lt;br/&gt;例如以下密钥:&lt;br/&gt;</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="65"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="554"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="91"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="72"/>
<source>Encrypting</source>
- <translation>加密</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="94"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="368"/>
- <source>Function Disabled</source>
- <translation>功能已禁用</translation>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="114"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="196"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="294"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="383"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="501"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="583"/>
+ <source>An error occurred during operation.</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="95"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="369"/>
- <source>Please go to the settings interface to enable and configure this function.</source>
- <translation>请转到“设置”界面以启用和配置此功能。</translation>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="268"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="151"/>
+ <source>Signing</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="125"/>
- <source>The selected key contains a key that does not actually have a signature usage.&lt;br/&gt;</source>
- <translation>所选密钥包含一个实际上没有签名使用的密钥。&lt;br/&gt;</translation>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="327"/>
+ <source>Please select the appropriate target file or signature file. Ensure that both are in this directory.</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="142"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="731"/>
- <source>Signing</source>
- <translation>签名</translation>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="331"/>
+ <source>No permission to read target file.</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="186"/>
- <source>Decrypting</source>
- <translation>解密</translation>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="335"/>
+ <source>No permission to read signature file.</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="246"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="816"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="353"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="259"/>
<source>Verifying</source>
- <translation>验证</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="298"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="897"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="434"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="310"/>
<source>Invalid KeyPair</source>
- <translation>无效的密钥对</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="299"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="898"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="435"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="311"/>
<source>The selected keypair cannot be used for signing and encryption at the same time.&lt;br/&gt;</source>
- <translation>选定的密钥对不能同时使用用于签名和加密。&lt;br/&gt;</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="310"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="317"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="909"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="916"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="446"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="453"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="322"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="329"/>
<source>Incomplete Operation</source>
- <translation>不完整的操作</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="311"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="910"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="447"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="323"/>
<source>None of the selected key pairs can provide the encryption function.</source>
- <translation>没有选定的密钥对可以提供加密功能。</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="318"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="917"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="454"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="330"/>
<source>None of the selected key pairs can provide the signature function.</source>
- <translation>没有选定的密钥对可以提供签名功能。</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="335"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="936"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="473"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="365"/>
<source>Encrypting and Signing</source>
- <translation>加密和签名</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="401"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="1014"/>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="513"/>
+ <source>Select a file(.gpg/.asc) before doing it.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/main_window/MainWindowFileSlotFunction.cpp" line="551"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="461"/>
<source>Decrypting and Verifying</source>
- <translation>解密和验证</translation>
- </message>
- <message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="499"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="503"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="507"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="577"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="590"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="594"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="598"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="659"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="675"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="679"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="683"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="757"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="789"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="794"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="798"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="846"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="859"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="863"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="867"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="964"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="976"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="980"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="984"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="1046"/>
- <source>Error</source>
- <translation>错误</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="499"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="590"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="675"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="859"/>
- <source>Select a file before doing it.</source>
- <translation>在执行此操作之前选择文件。</translation>
+ <location filename="../../src/ui/main_window/MainWindowServerSlotFunction.cpp" line="43"/>
+ <location filename="../../src/ui/main_window/MainWindowServerSlotFunction.cpp" line="155"/>
+ <source>Invalid Own Key</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="503"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="594"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="679"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="863"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="980"/>
- <source>No permission to read this file.</source>
- <translation>无权限读取此文件。</translation>
+ <location filename="../../src/ui/main_window/MainWindowServerSlotFunction.cpp" line="43"/>
+ <location filename="../../src/ui/main_window/MainWindowServerSlotFunction.cpp" line="155"/>
+ <source>Own Key can not be use to do any operation.</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="507"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="598"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="683"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="867"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="984"/>
- <source>No permission to create file.</source>
- <translation>无权限创建文件。</translation>
+ <location filename="../../src/ui/main_window/MainWindowServerSlotFunction.cpp" line="52"/>
+ <source>Please obtain a Service Token from the server in the settings.</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="512"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="613"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="689"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="872"/>
- <source>Warning</source>
- <translation>警告</translation>
+ <location filename="../../src/ui/main_window/MainWindowServerSlotFunction.cpp" line="91"/>
+ <source>Getting Cpt From Server</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="513"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="614"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="690"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="873"/>
- <source>The target file already exists, do you need to overwrite it?</source>
- <translation>目标文件已存在,您是否需要覆盖它?</translation>
+ <location filename="../../src/ui/main_window/MainWindowServerSlotFunction.cpp" line="113"/>
+ <location filename="../../src/ui/main_window/MainWindowServerSlotFunction.cpp" line="219"/>
+ <source>The communication content with the server does not meet the requirements</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="577"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="659"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="757"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="846"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="964"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="1046"/>
- <source>An error occurred during operation.</source>
- <translation>操作期间发生错误。</translation>
+ <location filename="../../src/ui/main_window/MainWindowServerSlotFunction.cpp" line="126"/>
+ <source>Invalid short ciphertext</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="790"/>
- <source>Please select the appropriate target file or signature file. Ensure that both are in this directory.</source>
- <translation>请选择相应的目标文件或签名文件。确保两者都在此目录中。</translation>
+ <location filename="../../src/ui/main_window/MainWindowServerSlotFunction.cpp" line="144"/>
+ <source>Invalid Service Token</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="794"/>
- <source>No permission to read target file.</source>
- <translation>无权限读取目标文件。</translation>
+ <location filename="../../src/ui/main_window/MainWindowServerSlotFunction.cpp" line="145"/>
+ <source>Please go to the setting interface to get a ServiceToken.</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="798"/>
- <source>No permission to read signature file.</source>
- <translation>无权限读取签名文件。</translation>
+ <location filename="../../src/ui/main_window/MainWindowServerSlotFunction.cpp" line="203"/>
+ <source>Getting Scpt From Server</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="976"/>
- <source>Select a file(.gpg/.asc) before doing it.</source>
- <translation>在做之前选择一个文件(.gpg / .casc)。</translation>
+ <location filename="../../src/ui/main_window/MainWindowServerSlotFunction.cpp" line="228"/>
+ <source>Notice: Use Decrypt &amp; Verify operation to decrypt this short crypto text.</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="1082"/>
+ <location filename="../../src/ui/main_window/MainWindowServerSlotFunction.cpp" line="231"/>
+ <source>There is a problem with the communication with the server</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="103"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="408"/>
+ <source>Function Disabled</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="104"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="409"/>
+ <source>Please go to the settings interface to enable and configure this function.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="134"/>
+ <source>The selected key contains a key that does not actually have a signature usage.&lt;br/&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="186"/>
+ <source>Notice</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="186"/>
+ <source>Short Crypto Text only supports Decrypt &amp; Verify.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="200"/>
+ <source>Decrypting</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="376"/>
+ <source>Automatic public key exchange failed.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="415"/>
+ <source>Service Token Empty</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="416"/>
+ <source>Please go to the settings interface to set Own Key and get Service Token.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="525"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="541"/>
+ <source>Key Not Found.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="572"/>
<source>Outdated Version</source>
- <translation>过时的版本</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="1083"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="573"/>
<source>This version(%1) is out of date, please update the latest version in time. </source>
- <translation>此版本(%1)已过期,请及时更新最新版本。</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="1085"/>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="1092"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="575"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="582"/>
<source>You can download the latest version(%1) on Github Releases Page.&lt;br/&gt;</source>
- <translation>您可以在Github发布页面上下载最新版本(%1)。&lt;br/&gt;</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="1089"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="579"/>
<source>Unreleased Version</source>
- <translation>未发布的版本</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="1090"/>
+ <location filename="../../src/ui/main_window/MainWindowSlotFunction.cpp" line="580"/>
<source>This version(%1) has not been officially released and is not recommended for use in a production environment. &lt;br/&gt;</source>
- <translation>此版本(%1)尚未正式发布,不建议在生产环境中使用。&lt;BR/&gt;</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowSlotUI.cpp" line="58"/>
<source>There is one unencrypted file in attachment folder</source>
- <translation>附件文件夹中有一个未加密的文件</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowSlotUI.cpp" line="60"/>
<source>There are </source>
- <translation>有</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowSlotUI.cpp" line="60"/>
<source> unencrypted files in attachment folder</source>
- <translation>附件文件夹中的未加密文件</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="30"/>
<source>&amp;New</source>
- <translation>&amp;新标签页</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="36"/>
<source>Open a new file</source>
- <translation>打开一个新文件</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="39"/>
<source>&amp;Open...</source>
- <translation>&amp;打开...</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="42"/>
<source>Open an existing file</source>
- <translation>打开现有文件</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="45"/>
<source>&amp;Browser</source>
- <translation>&amp;文件查看器</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="47"/>
<source>Open a file browser</source>
- <translation>打开文件浏览器</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="50"/>
<source>&amp;Save</source>
- <translation>&amp;保存</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="53"/>
<source>Save the current File</source>
- <translation>保存当前文件</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="56"/>
<source>Save &amp;As</source>
- <translation>另存为</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="59"/>
<source>Save the current File as...</source>
- <translation>将当前文件保存为...</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="62"/>
<source>&amp;Print</source>
- <translation>&amp;打印</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="65"/>
<source>Print Document</source>
- <translation>打印文件</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="68"/>
<source>&amp;Close</source>
- <translation>&amp;关闭标签页</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="70"/>
<source>Close file</source>
- <translation>关闭文件</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="73"/>
<source>&amp;Quit</source>
- <translation>&amp;关闭</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="76"/>
<source>Quit Program</source>
- <translation>退出程序</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="81"/>
<source>&amp;Undo</source>
- <translation>&amp;撤消</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="83"/>
<source>Undo Last Edit Action</source>
- <translation>撤消上次编辑操作</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="86"/>
<source>&amp;Redo</source>
- <translation>&amp;重做</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="88"/>
<source>Redo Last Edit Action</source>
- <translation>重做上次编辑动作</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="91"/>
<source>Zoom In</source>
- <translation>放大</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="95"/>
<source>Zoom Out</source>
- <translation>缩小</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="99"/>
<source>&amp;Paste</source>
- <translation>&amp;粘贴</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="102"/>
<source>Paste Text From Clipboard</source>
- <translation>从剪贴板导出文本</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="105"/>
<source>Cu&amp;t</source>
- <translation>&amp;剪切</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="108"/>
<source>Cut the current selection&apos;s contents to the clipboard</source>
- <translation>将当前选择的内容切割到剪贴板上</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="112"/>
<source>&amp;Copy</source>
- <translation>&amp;复制</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="115"/>
<source>Copy the current selection&apos;s contents to the clipboard</source>
- <translation>将当前选择的内容复制到剪贴板</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="119"/>
<source>&amp;Quote</source>
- <translation>&amp;引用</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="121"/>
<source>Quote whole text</source>
- <translation>引用整个文本</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="124"/>
<source>Select &amp;All</source>
- <translation>全选</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="127"/>
<source>Select the whole text</source>
- <translation>选择整个文本</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="130"/>
<source>&amp;Find</source>
- <translation>&amp;查找</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="132"/>
<source>Find a word</source>
- <translation>查找一个单词</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="135"/>
<source>Remove &amp;spacing</source>
- <translation>删除&amp;间距</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="138"/>
<source>Remove double linebreaks, e.g. in pasted text from webmailer</source>
- <translation>删除双重剪辑,例如在webmailer的导出文本中</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="141"/>
<source>Se&amp;ttings</source>
- <translation>&amp;设置</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="142"/>
<source>Open settings dialog</source>
- <translation>打开设置对话框</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="148"/>
<source>&amp;Encrypt</source>
- <translation>&amp;加密</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="151"/>
<source>Encrypt Message</source>
- <translation>加密消息</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="154"/>
<source>&amp;Encrypt &amp;Sign</source>
- <translation>&amp;加密&amp;签名</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="157"/>
<source>Encrypt and Sign Message</source>
- <translation>加密和签名消息</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="160"/>
<source>&amp;Decrypt</source>
- <translation>&amp;解密</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="163"/>
<source>Decrypt Message</source>
- <translation>解密消息</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="166"/>
<source>&amp;Decrypt &amp;Verify</source>
- <translation>&amp;解密和验证</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="169"/>
<source>Decrypt and Verify Message</source>
- <translation>解密和验证消息</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="175"/>
<source>&amp;Encrypt File</source>
- <translation>加密文件</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="176"/>
<source>Encrypt File</source>
- <translation>加密文件</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="179"/>
<source>&amp;Decrypt File</source>
- <translation>解密文件</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="180"/>
<source>Decrypt File</source>
- <translation>解密文件</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="183"/>
<source>&amp;Sign File</source>
- <translation>&amp;签名文件</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="184"/>
<source>Sign File</source>
- <translation>签名文件</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="187"/>
<source>&amp;Verify File</source>
- <translation>&amp;验证文件</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="188"/>
<source>Verify File</source>
- <translation>验证文件</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="192"/>
<source>&amp;Sign</source>
- <translation>&amp;签名</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="195"/>
<source>Sign Message</source>
- <translation>签名消息</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="198"/>
<source>&amp;Verify</source>
- <translation>&amp;验证</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="201"/>
<source>Verify Message</source>
- <translation>验证消息</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="207"/>
<source>&amp;Editor</source>
- <translation>&amp;编辑器</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="209"/>
<source>Import New Key From Editor</source>
- <translation>从编辑器导入新密钥</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="212"/>
<source>Manage &amp;Keys</source>
- <translation>管理和密钥</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="214"/>
<source>Open Keymanagement</source>
- <translation>打开密钥管理</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="220"/>
<source>&amp;About</source>
- <translation>&amp;关于</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="222"/>
<source>Show the application&apos;s About box</source>
- <translation>显示应用程序的框</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="228"/>
<source>&amp;Check for Updates</source>
- <translation>检查更新</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="230"/>
<source>Check for updates</source>
- <translation>检查更新</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="233"/>
<source>Open &amp;Wizard</source>
- <translation>打开和向导</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="234"/>
<source>Open the wizard</source>
- <translation>打开向导</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="239"/>
<source>Append Selected Key(s) To Text</source>
- <translation>将所选密钥附加到文本</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="240"/>
<source>Append The Selected Keys To Text in Editor</source>
- <translation>将所选密钥附加到编辑器中的文本</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="243"/>
<source>Copy Email</source>
- <translation>复制电子邮件</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="244"/>
<source>Copy selected Email to clipboard</source>
- <translation>复制所选电子邮件至剪贴板</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="248"/>
<source>Show Key Details</source>
- <translation>显示密钥详情</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="249"/>
<source>Show Details for this Key</source>
- <translation>显示此密钥的详细信息</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="252"/>
<source>Refresh Key From Key Server</source>
- <translation>从密钥服务器的刷新密钥对</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="253"/>
<source>Refresh key from default key server</source>
- <translation>刷新默认密钥服务器的密钥</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="256"/>
<source>Upload Public Key(s) To Server</source>
- <translation>将公钥上传到服务器</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="257"/>
<source>Upload The Selected Public Keys To Server</source>
- <translation>将所选公钥上传到服务器</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="272"/>
<source>Remove PGP Header</source>
- <translation>删除PGP标题</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="275"/>
<source>Add PGP Header</source>
- <translation>添加PGP标题</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="280"/>
<source>&amp;File</source>
- <translation>&amp;文件</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="293"/>
<source>&amp;Edit</source>
- <translation>&amp;编辑</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="311"/>
<source>&amp;File...</source>
- <translation>&amp;文件...</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="317"/>
<source>&amp;Crypt</source>
- <translation>&amp;加密</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="328"/>
<source>&amp;Keys</source>
- <translation>&amp;密钥</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="329"/>
<source>&amp;Import Key</source>
- <translation>&amp;导入密钥</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="338"/>
<source>&amp;Steganography</source>
- <translation>隐写术</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="347"/>
<source>&amp;View</source>
- <translation>&amp;视图</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="349"/>
<source>&amp;Help</source>
- <translation>&amp;帮助</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="358"/>
<source>File</source>
- <translation>文件</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="366"/>
<source>Crypt</source>
- <translation>加密</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="376"/>
<source>Key</source>
- <translation>密钥</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="381"/>
<source>Edit</source>
- <translation>编辑</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="388"/>
<source>Special Edit</source>
- <translation>特殊编辑操作</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="400"/>
<source>Import key from...</source>
- <translation>从...导入密钥</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="401"/>
<source>Import key</source>
- <translation>导入密钥</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="409"/>
<source>Browser to view and operate file</source>
- <translation>文件查看器用于浏览和操作文件</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="410"/>
<source>Browser</source>
- <translation>文件查看器</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="428"/>
<source>Ready</source>
- <translation>准备好</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="435"/>
<source>Key ToolBox</source>
- <translation>密钥工具箱</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/main_window/MainWindowUI.cpp" line="443"/>
<source>Information Board</source>
- <translation>信息板</translation>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PubkeyGetter</name>
+ <message>
+ <location filename="../../src/server/api/PubkeyGetter.cpp" line="66"/>
+ <location filename="../../src/server/api/PubkeyGetter.cpp" line="90"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/server/api/PubkeyGetter.cpp" line="67"/>
+ <location filename="../../src/server/api/PubkeyGetter.cpp" line="91"/>
+ <source>The communication content with the server does not meet the requirements</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PubkeyUploader</name>
+ <message>
+ <location filename="../../src/server/api/PubkeyUploader.cpp" line="95"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/server/api/PubkeyUploader.cpp" line="96"/>
+ <source>The communication content with the server does not meet the requirements</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/server/api/PubkeyUploader.cpp" line="103"/>
+ <source>Warning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/server/api/PubkeyUploader.cpp" line="104"/>
+ <source>Partial failure of automatic pubkey exchange</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
<name>QApplication</name>
<message>
- <location filename="../../src/gpg/result_analyse/DecryptResultAnalyse.cpp" line="42"/>
- <source>&gt;Recipient: </source>
- <translation>&gt;收件人:</translation>
+ <location filename="../../src/gpg/result_analyse/DecryptResultAnalyse.cpp" line="66"/>
+ <source> {&gt;} Recipient: </source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="35"/>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="61"/>
<source>One or More Bad Signatures.</source>
- <translation>一个或多个糟糕的签名。</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="40"/>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="66"/>
<source>A </source>
- <translation>一种</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="42"/>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="68"/>
<source>Good </source>
- <translation>好的</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="45"/>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="71"/>
<source>Bad </source>
- <translation>坏的</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="48"/>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="74"/>
<source>Expired </source>
- <translation>已到期</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="51"/>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="77"/>
<source>Missing Key&apos;s </source>
- <translation>缺少密钥</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="54"/>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="80"/>
<source>Revoked Key&apos;s </source>
- <translation>撤销密钥</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="57"/>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="83"/>
<source>Expired Key&apos;s </source>
- <translation>过期密钥</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="60"/>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="86"/>
<source>Missing CRL&apos;s </source>
- <translation>缺少CRL</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="64"/>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="90"/>
<source>Signature Fully Valid.</source>
- <translation>签名完全有效。</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="66"/>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="92"/>
<source>Signature NOT Fully Valid.</source>
- <translation>签名无效。</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="74"/>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="100"/>
<source>Key is NOT present with ID 0x</source>
- <translation>密钥不存在ID 0x</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="81"/>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="107"/>
<source>A signature could NOT be verified due to a Missing Key
</source>
- <translation>由于缺少密钥而无法验证签名</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="85"/>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="111"/>
<source>A signature is valid but the key used to verify the signature has been revoked
</source>
- <translation>签名是有效的,但用于验证签名的密钥已被撤销</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="93"/>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="119"/>
<source>A signature is valid but expired
</source>
- <translation>签名有效但已过期</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="100"/>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="126"/>
<source>A signature is valid but the key used to verify the signature has expired.
</source>
- <translation>签名有效,但用于验证签名的密钥已过期。</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="107"/>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="133"/>
<source>There was some other error which prevented the signature verification.
</source>
- <translation>还有一些其他错误阻止了签名验证。</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="113"/>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="139"/>
<source>Error for key with fingerprint </source>
- <translation>带指纹的密钥错误</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="128"/>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="152"/>
<source>Signed By: </source>
- <translation>被...签名:</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -2919,22 +3153,22 @@ This is NOT your Public Key, so DON&apos;T give it away.&lt;br /&gt;Do you REALL
<message>
<location filename="../../src/ui/QuitDialog.cpp" line="29"/>
<source>Unsaved Files</source>
- <translation>未保存的文件</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/QuitDialog.cpp" line="77"/>
<source>%1 files contain unsaved information.&lt;br/&gt;Save the changes before closing?</source>
- <translation>%1文件包含未保存的信息。&lt;br/&gt;在结束前保存更改?</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/QuitDialog.cpp" line="88"/>
<source>Check the files you want to save:</source>
- <translation>检查要保存的文件:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/QuitDialog.cpp" line="89"/>
<source>&lt;b&gt;Note:&lt;/b&gt; If you don&apos;t save these files, all changes are lost.&lt;br/&gt;</source>
- <translation>&lt;b&gt;注意:&lt;/ b&gt;如果您不保存这些文件,则所有更改都会丢失。&lt;br/&gt;</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -2942,264 +3176,360 @@ This is NOT your Public Key, so DON&apos;T give it away.&lt;br /&gt;Do you REALL
<message>
<location filename="../../src/ui/SendMailDialog.cpp" line="35"/>
<source>Incomplete configuration</source>
- <translation>配置不完整</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/SendMailDialog.cpp" line="36"/>
<source>The SMTP address is empty, please go to the setting interface to complete the configuration.</source>
- <translation>SMTP地址为空,请转到设置界面以完成配置。</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/SendMailDialog.cpp" line="86"/>
<source> Recipient cannot be empty
</source>
- <translation>收件人不能空</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/SendMailDialog.cpp" line="91"/>
<source> One or more Recipient&apos;s Email Address is invalid
</source>
- <translation>一个或多个收件人的电子邮件地址无效</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/SendMailDialog.cpp" line="97"/>
<source> Sender cannot be empty
</source>
- <translation>发件人不能为空</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/SendMailDialog.cpp" line="99"/>
<source> Sender&apos;s Email Address is invalid
</source>
- <translation>发件人的电子邮件地址无效</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/SendMailDialog.cpp" line="155"/>
<location filename="../../src/ui/SendMailDialog.cpp" line="160"/>
<location filename="../../src/ui/SendMailDialog.cpp" line="165"/>
<source>Fail</source>
- <translation>失败</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/SendMailDialog.cpp" line="155"/>
<source>Fail to Connect SMTP Server</source>
- <translation>无法连接SMTP服务器</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/SendMailDialog.cpp" line="160"/>
<source>Fail to Login into SMTP Server</source>
- <translation>无法登录SMTP服务器</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/SendMailDialog.cpp" line="165"/>
<source>Fail to Send Mail to SMTP Server</source>
- <translation>无法将邮件发送到SMTP服务器</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/SendMailDialog.cpp" line="171"/>
<source>Success</source>
- <translation>成功</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/SendMailDialog.cpp" line="171"/>
<source>Succeed in Sending Mail to SMTP Server</source>
- <translation>成功向SMTP服务器发送邮件</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SendMailTab</name>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="289"/>
+ <location filename="../../src/ui/settings/SettingsSendMail.cpp" line="33"/>
<source>Enable</source>
- <translation>使能够</translation>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/settings/SettingsSendMail.cpp" line="51"/>
+ <source>Check Connection</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/settings/SettingsSendMail.cpp" line="53"/>
+ <source>General</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="311"/>
+ <location filename="../../src/ui/settings/SettingsSendMail.cpp" line="54"/>
+ <source>Connection</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/settings/SettingsSendMail.cpp" line="55"/>
+ <source>Preference</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/ui/settings/SettingsSendMail.cpp" line="61"/>
<source>SMTP Address</source>
- <translation>SMTP地址</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="313"/>
+ <location filename="../../src/ui/settings/SettingsSendMail.cpp" line="63"/>
<source>Username</source>
- <translation>用户名</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="315"/>
+ <location filename="../../src/ui/settings/SettingsSendMail.cpp" line="65"/>
<source>Password</source>
- <translation>密码</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="317"/>
+ <location filename="../../src/ui/settings/SettingsSendMail.cpp" line="67"/>
<source>Port</source>
- <translation>港口</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="319"/>
+ <location filename="../../src/ui/settings/SettingsSendMail.cpp" line="69"/>
<source>Connection Security</source>
- <translation>连接安全</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="322"/>
+ <location filename="../../src/ui/settings/SettingsSendMail.cpp" line="75"/>
<source>Default Sender</source>
- <translation>默认发件人</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="404"/>
- <location filename="../../src/ui/SettingsDialog.cpp" line="408"/>
+ <location filename="../../src/ui/settings/SettingsSendMail.cpp" line="161"/>
+ <location filename="../../src/ui/settings/SettingsSendMail.cpp" line="165"/>
<source>Fail</source>
- <translation>失败</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="404"/>
+ <location filename="../../src/ui/settings/SettingsSendMail.cpp" line="161"/>
<source>Fail to Connect SMTP Server</source>
- <translation>无法连接SMTP服务器</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="408"/>
+ <location filename="../../src/ui/settings/SettingsSendMail.cpp" line="165"/>
<source>Fail to Login</source>
- <translation>未登录</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="413"/>
+ <location filename="../../src/ui/settings/SettingsSendMail.cpp" line="170"/>
<source>Success</source>
- <translation>成功</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="413"/>
+ <location filename="../../src/ui/settings/SettingsSendMail.cpp" line="170"/>
<source>Succeed in connecting and login</source>
- <translation>成功连接和登录</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SettingsDialog</name>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="40"/>
+ <location filename="../../src/ui/settings/SettingsDialog.cpp" line="39"/>
<source>General</source>
- <translation>通用</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="41"/>
+ <location filename="../../src/ui/settings/SettingsDialog.cpp" line="40"/>
<source>Appearance</source>
- <translation>外观</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="42"/>
+ <location filename="../../src/ui/settings/SettingsDialog.cpp" line="41"/>
<source>Send Mail</source>
- <translation>发送邮件</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="43"/>
+ <location filename="../../src/ui/settings/SettingsDialog.cpp" line="42"/>
<source>Key Server</source>
- <translation>密钥服务器</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="45"/>
+ <location filename="../../src/ui/settings/SettingsDialog.cpp" line="44"/>
<source>Advanced</source>
- <translation>高级</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="58"/>
+ <location filename="../../src/ui/settings/SettingsDialog.cpp" line="59"/>
<source>Settings</source>
- <translation>设置</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/SettingsDialog.cpp" line="103"/>
+ <location filename="../../src/ui/settings/SettingsDialog.cpp" line="105"/>
<source>System Default</source>
- <translation>系统默认值</translation>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>SignResultAnalyse</name>
+ <message>
+ <location filename="../../src/gpg/result_analyse/SignResultAnalyse.cpp" line="29"/>
+ <source>[#] Sign Operation </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/SignResultAnalyse.cpp" line="32"/>
+ <source>[Success]</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/SignResultAnalyse.cpp" line="34"/>
+ <source>[Failed] </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/SignResultAnalyse.cpp" line="43"/>
+ <source>[&gt;] New Signature: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/SignResultAnalyse.cpp" line="47"/>
+ <source> Sign Mode: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/SignResultAnalyse.cpp" line="49"/>
+ <source>Normal</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/SignResultAnalyse.cpp" line="51"/>
+ <source>Clear</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/SignResultAnalyse.cpp" line="53"/>
+ <source>Detach</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/SignResultAnalyse.cpp" line="59"/>
+ <location filename="../../src/gpg/result_analyse/SignResultAnalyse.cpp" line="61"/>
+ <source> Signer: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/SignResultAnalyse.cpp" line="61"/>
+ <source>&lt;unknown&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/SignResultAnalyse.cpp" line="63"/>
+ <source> Public Key Algo: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/SignResultAnalyse.cpp" line="64"/>
+ <source> Hash Algo: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/SignResultAnalyse.cpp" line="65"/>
+ <source> Date &amp; Time: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/SignResultAnalyse.cpp" line="75"/>
+ <source>Invalid Signers: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/SignResultAnalyse.cpp" line="79"/>
+ <source>[&gt;] Signer: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/SignResultAnalyse.cpp" line="80"/>
+ <source> Fingerprint: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/gpg/result_analyse/SignResultAnalyse.cpp" line="81"/>
+ <source> Reason: </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>SignersPicker</name>
+ <message>
+ <location filename="../../src/ui/widgets/SignersPicker.cpp" line="28"/>
+ <source>Confirm</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SubkeyGenerateDialog</name>
<message>
- <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="46"/>
+ <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="47"/>
<source>Generate New Subkey</source>
- <translation>生成新的子项</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="61"/>
+ <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="62"/>
<source>Encryption</source>
- <translation>加密</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="64"/>
+ <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="65"/>
<source>Signing</source>
- <translation>签名</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="67"/>
+ <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="68"/>
<source>Certification</source>
- <translation>认证</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="70"/>
+ <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="71"/>
<source>Authentication</source>
- <translation>验证</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="114"/>
+ <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="115"/>
<source>Expiration Date:</source>
- <translation>过期日期:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="115"/>
+ <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="116"/>
<source>Never Expire</source>
- <translation>永不过期</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="116"/>
+ <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="117"/>
<source>KeySize (in Bit):</source>
- <translation>keysize(位):</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="117"/>
+ <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="118"/>
<source>Key Type:</source>
- <translation>密钥类型:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="126"/>
+ <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="127"/>
<source>Basic Information</source>
- <translation>基本信息</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="214"/>
+ <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="215"/>
<source> Expiration time no more than 2 years. </source>
- <translation>到期时间不超过2年。</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="235"/>
- <source>Generating Subkey...</source>
- <translation>生成子密钥......</translation>
- </message>
- <message>
- <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="238"/>
- <source>Collecting random data for subkey generation.
- This may take a while.
- To speed up the process use your computer
- (e.g. browse the net, listen to music,...)</source>
- <translation>收集子项的随机数据。
- 可能还要等一下。
- 加快过程使用您的计算机
- (例如,浏览网,听音乐,......)</translation>
- </message>
- <message>
- <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="309"/>
+ <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="244"/>
<source>Success</source>
- <translation>成功</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="309"/>
+ <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="244"/>
<source>The new subkey has been generated.</source>
- <translation>已生成新的子项。</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="311"/>
+ <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="247"/>
<source>Failure</source>
- <translation>失败</translation>
- </message>
- <message>
- <location filename="../../src/ui/keygen/SubkeyGenerateDialog.cpp" line="311"/>
- <source>An error occurred during subkey generation.</source>
- <translation>子项生成期间发生错误。</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -3207,13 +3537,13 @@ This is NOT your Public Key, so DON&apos;T give it away.&lt;br /&gt;Do you REALL
<message>
<location filename="../../src/ui/widgets/TextEdit.cpp" line="53"/>
<source>untitled</source>
- <translation>无标题</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/TextEdit.cpp" line="120"/>
<location filename="../../src/ui/widgets/TextEdit.cpp" line="200"/>
<source>Warning</source>
- <translation>警告</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/TextEdit.cpp" line="121"/>
@@ -3221,84 +3551,95 @@ This is NOT your Public Key, so DON&apos;T give it away.&lt;br /&gt;Do you REALL
<location filename="../../src/ui/widgets/TextEdit.cpp" line="482"/>
<source>Cannot read file %1:
%2.</source>
- <translation>无法读取文件%1:
-%2。</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/TextEdit.cpp" line="175"/>
<source>Open file</source>
- <translation>打开文件</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/TextEdit.cpp" line="251"/>
<source>File</source>
- <translation>文件</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/TextEdit.cpp" line="252"/>
<source>Cannot write file %1:
%2.</source>
- <translation>无法写入文件%1:
-%2。</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/TextEdit.cpp" line="270"/>
<source>Save file</source>
- <translation>保存存档</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/TextEdit.cpp" line="333"/>
<source>Unsaved document</source>
- <translation>未保存的文件</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/TextEdit.cpp" line="334"/>
<source>The document &quot;%1&quot; has been modified. Do you want to save your changes?&lt;br/&gt;</source>
- <translation>文档“%1”已被修改。你想保存你的更改吗?&lt;br/&gt;</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/TextEdit.cpp" line="337"/>
<source>&lt;b&gt;Note:&lt;/b&gt; If you don&apos;t save these files, all changes are lost.&lt;br/&gt;</source>
- <translation>&lt;b&gt;注意:&lt;/ b&gt;如果您不保存这些文件,则所有更改都会丢失。&lt;br/&gt;</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/TextEdit.cpp" line="481"/>
<source>Application</source>
- <translation>应用</translation>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>UnknownSignersChecker</name>
+ <message>
+ <location filename="../../src/advance/UnknownSignersChecker.cpp" line="69"/>
+ <source>Warning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../src/advance/UnknownSignersChecker.cpp" line="70"/>
+ <source>Automatic public key exchange failed.</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
<name>UpdateTab</name>
<message>
- <location filename="../../src/ui/help/AboutDialog.cpp" line="127"/>
+ <location filename="../../src/ui/help/AboutDialog.cpp" line="129"/>
<source>It is recommended that you always check the version of GpgFrontend and upgrade to the latest version.</source>
- <translation>建议您始终检查GPGFrontend的版本并升级到最新版本。</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/help/AboutDialog.cpp" line="129"/>
+ <location filename="../../src/ui/help/AboutDialog.cpp" line="131"/>
<source>New versions not only represent new features, but also often represent functional and security fixes.</source>
- <translation>新版本不仅代表新功能,而且通常代表功能和安全修复。</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/help/AboutDialog.cpp" line="133"/>
+ <location filename="../../src/ui/help/AboutDialog.cpp" line="135"/>
<source>Current Version: </source>
- <translation>当前版本:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/help/AboutDialog.cpp" line="141"/>
+ <location filename="../../src/ui/help/AboutDialog.cpp" line="143"/>
<source>The current version is inconsistent with the latest version on github.</source>
- <translation>当前版本与GitHub上的最新版本不一致。</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/help/AboutDialog.cpp" line="143"/>
+ <location filename="../../src/ui/help/AboutDialog.cpp" line="145"/>
<source>Please click &lt;a href=&quot;https://github.com/saturneric/GpgFrontend/releases&quot;&gt;here&lt;/a&gt; to download the latest version.</source>
- <translation>请单击&lt;a href=&quot;https://github.com/saturneric/gpgfrontend/releases&quot;&gt;此处&lt;/a&gt;下载最新版本。</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/help/AboutDialog.cpp" line="187"/>
- <location filename="../../src/ui/help/AboutDialog.cpp" line="209"/>
+ <location filename="../../src/ui/help/AboutDialog.cpp" line="199"/>
+ <location filename="../../src/ui/help/AboutDialog.cpp" line="214"/>
<source>Latest Version From Github: </source>
- <translation>GitHub的最新版本:</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -3306,32 +3647,32 @@ This is NOT your Public Key, so DON&apos;T give it away.&lt;br /&gt;Do you REALL
<message>
<location filename="../../src/ui/VerifyDetailsDialog.cpp" line="32"/>
<source>Signature Details</source>
- <translation>签名细节</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/VerifyDetailsDialog.cpp" line="53"/>
<source>Status: </source>
- <translation>状态:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/VerifyDetailsDialog.cpp" line="56"/>
<source>No valid input found</source>
- <translation>没有找到有效的输入</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/VerifyDetailsDialog.cpp" line="67"/>
<source>Error Validating signature</source>
- <translation>验证签名时出错</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/VerifyDetailsDialog.cpp" line="70"/>
<source>File was signed on %1 &lt;br/&gt; It Contains:&lt;br/&gt;&lt;br/&gt;</source>
- <translation>文件已签名%1 &lt;br/&gt; &lt;br/&gt; &lt;br/&gt;</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/VerifyDetailsDialog.cpp" line="72"/>
<source>Signed on %1 &lt;br/&gt; It Contains:&lt;br /&gt;&lt;br/&gt;</source>
- <translation>签名%1 &lt;br/&gt;它包含:&lt;br /&gt; &lt;br/&gt;</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -3339,22 +3680,22 @@ This is NOT your Public Key, so DON&apos;T give it away.&lt;br /&gt;Do you REALL
<message>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="36"/>
<source>Import from keyserver</source>
- <translation>从密钥服务器导入</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="39"/>
<source>Key not present with id 0x</source>
- <translation>密钥不存在ID 0x</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="43"/>
<source>Status:</source>
- <translation>地位:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="45"/>
<source>Key not present in keylist</source>
- <translation>密钥不存在于keylist</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="58"/>
@@ -3364,7 +3705,7 @@ This is NOT your Public Key, so DON&apos;T give it away.&lt;br /&gt;Do you REALL
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="115"/>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="129"/>
<source>Key Information is NOT Available</source>
- <translation>密钥信息不可用</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="60"/>
@@ -3374,137 +3715,134 @@ This is NOT your Public Key, so DON&apos;T give it away.&lt;br /&gt;Do you REALL
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="117"/>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="131"/>
<source>Fingerprint: </source>
- <translation>指纹:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="67"/>
<source>Status: Cert Revoked</source>
- <translation>状态:证书撤销</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="81"/>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="95"/>
<source>Status: Signature Expired</source>
- <translation>状态:签名已过期</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="96"/>
<source>Status: Key Expired</source>
- <translation>状态:密钥已过期</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="110"/>
<source>Status: General Error</source>
- <translation>状态:一般错误</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="124"/>
<source>Status: Unknown Error</source>
- <translation>状态:未知错误</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="159"/>
<source>Signer Name:</source>
- <translation>签名者名称:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="160"/>
<source>Signer Email:</source>
- <translation>签名电子邮件:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="161"/>
<source>Key&apos;s Fingerprint:</source>
- <translation>密钥的指纹:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="162"/>
<source>Valid:</source>
- <translation>有效的:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="163"/>
<source>Flags:</source>
- <translation>标志:</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="171"/>
<source>Fully Valid</source>
- <translation>完全有效</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="173"/>
<source>NOT Fully Valid</source>
- <translation>没有完全有效</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="180"/>
<source>Good </source>
- <translation>好的</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="183"/>
<source>Bad </source>
- <translation>坏的</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="186"/>
<source>Expired </source>
- <translation>已到期</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="189"/>
<source>Missing Key </source>
- <translation>缺少密钥</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="192"/>
<source>Revoked Key </source>
- <translation>撤销密钥</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="195"/>
<source>Expired Key </source>
- <translation>过期的密钥</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/ui/widgets/VerifyKeyDetailBox.cpp" line="198"/>
<source>Missing CRL </source>
- <translation>缺少CRL.</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
- <name>Wizard</name>
- <message>
- <location filename="../../src/ui/Wizard.cpp" line="46"/>
- <source>First Start Wizard</source>
- <translation>首次开始向导</translation>
- </message>
+ <name>VerifyResultAnalyse</name>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="76"/>
- <source>Import Error</source>
- <translation>导入错误</translation>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="31"/>
+ <source>[#] Verify Operation </source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="76"/>
- <source>Couldn&apos;t locate any keyring file in %1</source>
- <translation>无法在%1中定位任何密钥控文件</translation>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="34"/>
+ <source>[Success]</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="84"/>
- <location filename="../../src/ui/Wizard.cpp" line="95"/>
- <source>Import error</source>
- <translation>导入错误</translation>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="36"/>
+ <source>[Failed] </source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="85"/>
- <source>Couldn&apos;t open private keyringfile: %1</source>
- <translation>无法打开私有keyringfile:%1</translation>
+ <location filename="../../src/gpg/result_analyse/VerifyResultAnalyse.cpp" line="158"/>
+ <source>&lt;Unknown&gt;</source>
+ <translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>Wizard</name>
<message>
- <location filename="../../src/ui/Wizard.cpp" line="96"/>
- <source>Couldn&apos;t open public keyringfile: %1</source>
- <translation>无法打开公钥密钥入文件:%1</translation>
+ <location filename="../../src/ui/Wizard.cpp" line="40"/>
+ <source>First Start Wizard</source>
+ <translation type="unfinished"></translation>
</message>
</context>
</TS>
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 3b225a09..200f5beb 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -1,8 +1,8 @@
-set(ALL_SOURCE_FILE)
-
add_subdirectory(gpg)
add_subdirectory(ui)
add_subdirectory(smtp)
+add_subdirectory(server)
+add_subdirectory(advance)
aux_source_directory(. BASE_SOURCE)
@@ -90,7 +90,7 @@ if(${CMAKE_BUILD_TYPE} STREQUAL "Release")
add_executable(${AppName} MACOSX_BUNDLE ${ICON_RESOURCE} ${BASE_SOURCE} ${RESOURCE_FILES} ${QT5_MOCS})
set_target_properties(${AppName} PROPERTIES
BUNDLE True
- MACOSX_BUNDLE_GUI_IDENTIFIER org.gnupg.gpgfrontend
+ MACOSX_BUNDLE_GUI_IDENTIFIER pub.gpgfrontend.gpgfrontend
MACOSX_BUNDLE_BUNDLE_NAME ${AppName}
MACOSX_BUNDLE_LONG_VERSION_STRING ${BUILD_VERSION}
MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION}
@@ -121,23 +121,26 @@ else()
add_executable(${AppName} ${BASE_SOURCE} ${RESOURCE_FILES} ${QT5_MOCS})
endif()
+set(GPGFRONTEND_LIBS smtp gpgfrontend-ui advance server gpg)
+set(QT_DEPENDENCY_LIBS Qt5::Network Qt5::PrintSupport Qt5::Widgets Qt5::Test Qt5::Core)
+
IF (MINGW)
message(STATUS "Link Application Static Library For MINGW")
target_link_libraries(${AppName}
- smtp gpgfrontend-ui gpg
- Qt5::Network Qt5::PrintSupport Qt5::Widgets Qt5::Test Qt5::Core
+ ${GPGFRONTEND_LIBS}
+ ${QT_DEPENDENCY_LIBS}
crypto ssl)
elseif(APPLE)
message(STATUS "Link Application Static Library For macOS")
target_link_libraries(${AppName}
- smtp gpgfrontend-ui gpg
- Qt5::Network Qt5::PrintSupport Qt5::Widgets Qt5::Test Qt5::Core
+ ${GPGFRONTEND_LIBS}
+ ${QT_DEPENDENCY_LIBS}
crypto ssl)
else()
message(STATUS "Link Application Static Library For UNIX")
target_link_libraries(${AppName}
- smtp gpgfrontend-ui gpg
- Qt5::Network Qt5::PrintSupport Qt5::Widgets Qt5::Test Qt5::Core
+ ${GPGFRONTEND_LIBS}
+ ${QT_DEPENDENCY_LIBS}
crypto ssl pthread)
endif()
diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp
index eb8b96b1..73f55672 100644
--- a/src/MainWindow.cpp
+++ b/src/MainWindow.cpp
@@ -51,7 +51,7 @@ MainWindow::MainWindow()
auto version_thread = new VersionCheckThread(replay);
- connect(version_thread, SIGNAL(finished(QPrivateSignal)), version_thread, SLOT(deleteLater()));
+ connect(version_thread, SIGNAL(finished()), version_thread, SLOT(deleteLater()));
connect(version_thread, SIGNAL(upgradeVersion(const QString &, const QString &)), this, SLOT(slotVersionUpgrade(const QString &, const QString &)));
version_thread->start();
diff --git a/src/advance/CMakeLists.txt b/src/advance/CMakeLists.txt
new file mode 100644
index 00000000..696fc8e5
--- /dev/null
+++ b/src/advance/CMakeLists.txt
@@ -0,0 +1,6 @@
+aux_source_directory(. ADVANCE_SOURCE)
+
+add_library(advance STATIC ${ADVANCE_SOURCE})
+
+target_link_libraries(advance
+ Qt5::Network Qt5::Widgets Qt5::Core) \ No newline at end of file
diff --git a/src/advance/UnknownSignersChecker.cpp b/src/advance/UnknownSignersChecker.cpp
new file mode 100644
index 00000000..1b087b5c
--- /dev/null
+++ b/src/advance/UnknownSignersChecker.cpp
@@ -0,0 +1,81 @@
+/**
+ * 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.
+ *
+ * Foobar 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 Foobar. If not, see <https://www.gnu.org/licenses/>.
+ *
+ * The initial version of the source code is inherited from gpg4usb-team.
+ * Their source code version also complies with GNU General Public License.
+ *
+ * The source code version of this software was modified and released
+ * by Saturneric<[email protected]> starting on May 12, 2021.
+ *
+ */
+
+#include "advance/UnknownSignersChecker.h"
+
+
+UnknownSignersChecker::UnknownSignersChecker(GpgME::GpgContext *ctx, gpgme_verify_result_t result) :
+ appPath(qApp->applicationDirPath()), settings(RESOURCE_DIR(appPath) + "/conf/gpgfrontend.ini"), mCtx(ctx),
+ mResult(result) {
+
+}
+
+void UnknownSignersChecker::start() {
+
+ auto sign = mResult->signatures;
+ bool canContinue = true;
+
+ while (sign && canContinue) {
+
+ switch (gpg_err_code(sign->status)) {
+ case GPG_ERR_BAD_SIGNATURE:
+ break;
+ case GPG_ERR_NO_ERROR:
+ if (!(sign->status & GPGME_SIGSUM_KEY_MISSING))
+ check_signer(sign);
+ break;
+ case GPG_ERR_NO_PUBKEY:
+
+ case GPG_ERR_CERT_REVOKED:
+ case GPG_ERR_SIG_EXPIRED:
+ case GPG_ERR_KEY_EXPIRED:
+ check_signer(sign);
+ break;
+ case GPG_ERR_GENERAL:
+ canContinue = false;
+ break;
+ default:
+ break;
+ }
+ sign = sign->next;
+ }
+
+ if(!unknownFprs.isEmpty()) {
+ PubkeyGetter pubkeyGetter(mCtx, unknownFprs);
+ pubkeyGetter.start();
+ if (!pubkeyGetter.result()) {
+
+ }
+ }
+}
+
+void UnknownSignersChecker::check_signer(gpgme_signature_t sign) {
+
+ auto key = mCtx->getKeyByFpr(sign->fpr);
+ if (!key.good) {
+ qDebug() << "Find Unknown FingerPrint " << sign->fpr;
+ unknownFprs.append(sign->fpr);
+ }
+
+}
diff --git a/src/gpg/CMakeLists.txt b/src/gpg/CMakeLists.txt
index 49e98b23..2bcacade 100644
--- a/src/gpg/CMakeLists.txt
+++ b/src/gpg/CMakeLists.txt
@@ -1,4 +1,5 @@
aux_source_directory(./result_analyse GPG_SOURCE)
+aux_source_directory(./gpg_context GPG_SOURCE)
aux_source_directory(. GPG_SOURCE)
add_library(gpg STATIC ${GPG_SOURCE})
diff --git a/src/gpg/GpgConstants.cpp b/src/gpg/GpgConstants.cpp
index 1ed06182..1d59dab5 100644
--- a/src/gpg/GpgConstants.cpp
+++ b/src/gpg/GpgConstants.cpp
@@ -30,4 +30,5 @@ const char *GpgConstants::PGP_SIGNED_BEGIN = "-----BEGIN PGP SIGNED MESSAGE-----
const char *GpgConstants::PGP_SIGNED_END = "-----END PGP SIGNATURE-----";
const char *GpgConstants::PGP_SIGNATURE_BEGIN = "-----BEGIN PGP SIGNATURE-----";
const char *GpgConstants::PGP_SIGNATURE_END = "-----END PGP SIGNATURE-----";
+const char *GpgConstants::GPG_FRONTEND_SHORT_CRYPTO_HEAD = "GpgF_Scpt://";
diff --git a/src/gpg/GpgContext.cpp b/src/gpg/GpgContext.cpp
deleted file mode 100644
index 0462433d..00000000
--- a/src/gpg/GpgContext.cpp
+++ /dev/null
@@ -1,1234 +0,0 @@
-/**
- * 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.
- *
- * Foobar 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 Foobar. If not, see <https://www.gnu.org/licenses/>.
- *
- * The initial version of the source code is inherited from gpg4usb-team.
- * Their source code version also complies with GNU General Public License.
- *
- * The source code version of this software was modified and released
- * by Saturneric<[email protected]> starting on May 12, 2021.
- *
- */
-
-#include "gpg/GpgContext.h"
-
-#include <functional>
-#include <unistd.h> /* contains read/write */
-
-#ifdef _WIN32
-
-#include <windows.h>
-
-#endif
-
-#define INT2VOIDP(i) (void*)(uintptr_t)(i)
-
-namespace GpgME {
-
-/** Constructor
- * Set up gpgme-context, set paths to app-run path
- */
- GpgContext::GpgContext() {
- /** get application path */
- QString appPath = qApp->applicationDirPath();
-
- /** The function `gpgme_check_version' must be called before any other
- * function in the library, because it initializes the thread support
- * subsystem in GPGME. (from the info page) */
- gpgme_check_version(nullptr);
-
- // the locale set here is used for the other setlocale calls which have nullptr
- // -> nullptr means use default, which is configured here
- setlocale(LC_ALL, settings.value("int/lang").toLocale().name().toUtf8().constData());
-
- /** set locale, because tests do also */
- gpgme_set_locale(nullptr, LC_CTYPE, setlocale(LC_CTYPE, nullptr));
- //qDebug() << "Locale set to" << LC_CTYPE << " - " << setlocale(LC_CTYPE, nullptr);
-#ifndef _WIN32
- gpgme_set_locale(nullptr, LC_MESSAGES, setlocale(LC_MESSAGES, nullptr));
-#endif
-
- err = gpgme_new(&mCtx);
- checkErr(err);
-
- gpgme_engine_info_t engineInfo;
- engineInfo = gpgme_ctx_get_engine_info(mCtx);
-
- // Check ENV before running
- bool check_pass = false, find_openpgp = false, find_gpgconf = false, find_assuan = false, find_cms = false;
- while (engineInfo != nullptr) {
- qDebug() << gpgme_get_protocol_name(engineInfo->protocol) << engineInfo->file_name << engineInfo->protocol
- << engineInfo->home_dir << engineInfo->version;
- if (engineInfo->protocol == GPGME_PROTOCOL_GPGCONF && strcmp(engineInfo->version, "1.0.0") != 0)
- find_gpgconf = true;
- if (engineInfo->protocol == GPGME_PROTOCOL_OpenPGP && strcmp(engineInfo->version, "1.0.0") != 0) {
- gpgExec = engineInfo->file_name;
- find_openpgp = true;
- }
- if (engineInfo->protocol == GPGME_PROTOCOL_CMS && strcmp(engineInfo->version, "1.0.0") != 0)
- find_cms = true;
- if (engineInfo->protocol == GPGME_PROTOCOL_ASSUAN)
- find_assuan = true;
-
- engineInfo = engineInfo->next;
- }
-
- if (find_gpgconf && find_openpgp && find_cms && find_assuan)
- check_pass = true;
-
- if (!check_pass) {
- good = false;
- return;
- } else good = true;
-
-
- /** Setting the output type must be done at the beginning */
- /** think this means ascii-armor --> ? */
- gpgme_set_armor(mCtx, 1);
- /** passphrase-callback */
- gpgme_set_passphrase_cb(mCtx, passphraseCb, this);
-
- /** check if app is called with -d from command line */
- if (qApp->arguments().contains("-d")) {
- qDebug() << "gpgme_data_t debug on";
- debug = true;
- } else {
- debug = false;
- }
-
- connect(this, SIGNAL(signalKeyDBChanged()),
- this, SLOT(slotRefreshKeyList()), Qt::DirectConnection);
- connect(this, SIGNAL(signalKeyUpdated(QString)),
- this, SLOT(slotUpdateKeyList(QString)), Qt::DirectConnection);
- slotRefreshKeyList();
- }
-
-/** Destructor
- * Release gpgme-context
- */
- GpgContext::~GpgContext() {
- if (mCtx) gpgme_release(mCtx);
- mCtx = nullptr;
- }
-
- bool GpgContext::isGood() const {
- return good;
- }
-
-/** Import Key from QByteArray
- *
- */
- GpgImportInformation GpgContext::importKey(QByteArray inBuffer) {
- auto *importInformation = new GpgImportInformation();
- err = gpgme_data_new_from_mem(&in, inBuffer.data(), inBuffer.size(), 1);
- checkErr(err);
- err = gpgme_op_import(mCtx, in);
- gpgme_import_result_t result;
-
- result = gpgme_op_import_result(mCtx);
- if (result->unchanged) {
- importInformation->unchanged = result->unchanged;
- }
- if (result->considered) {
- importInformation->considered = result->considered;
- }
- if (result->no_user_id) {
- importInformation->no_user_id = result->no_user_id;
- }
- if (result->imported) {
- importInformation->imported = result->imported;
- }
- if (result->imported_rsa) {
- importInformation->imported_rsa = result->imported_rsa;
- }
- if (result->unchanged) {
- importInformation->unchanged = result->unchanged;
- }
- if (result->new_user_ids) {
- importInformation->new_user_ids = result->new_user_ids;
- }
- if (result->new_sub_keys) {
- importInformation->new_sub_keys = result->new_sub_keys;
- }
- if (result->new_signatures) {
- importInformation->new_signatures = result->new_signatures;
- }
- if (result->new_revocations) {
- importInformation->new_revocations = result->new_revocations;
- }
- if (result->secret_read) {
- importInformation->secret_read = result->secret_read;
- }
- if (result->secret_imported) {
- importInformation->secret_imported = result->secret_imported;
- }
- if (result->secret_unchanged) {
- importInformation->secret_unchanged = result->secret_unchanged;
- }
- if (result->not_imported) {
- importInformation->not_imported = result->not_imported;
- }
- gpgme_import_status_t status = result->imports;
- while (status != nullptr) {
- GpgImportedKey key;
- key.importStatus = static_cast<int>(status->status);
- key.fpr = status->fpr;
- importInformation->importedKeys.emplace_back(key);
- status = status->next;
- }
- checkErr(err);
- emit signalKeyDBChanged();
- gpgme_data_release(in);
- return *importInformation;
- }
-
-/** Generate New Key with values params
- *
- */
- bool GpgContext::generateKey(GenKeyInfo *params) {
-
- auto userid_utf8 = params->getUserid().toUtf8();
- const char *userid = userid_utf8.constData();
- auto algo_utf8 = (params->getAlgo() + params->getKeySizeStr()).toUtf8();
- const char *algo = algo_utf8.constData();
- unsigned long expires = QDateTime::currentDateTime().secsTo(params->getExpired());
- unsigned int flags = 0;
-
- if (!params->isSubKey()) {
- flags |= GPGME_CREATE_CERT;
- }
-
- if (params->isAllowEncryption()) {
- flags |= GPGME_CREATE_ENCR;
- }
-
- if (params->isAllowSigning()) {
- flags |= GPGME_CREATE_SIGN;
- }
-
- if (params->isAllowAuthentication()) {
- flags |= GPGME_CREATE_AUTH;
- }
-
- if (params->isNonExpired()) {
- flags |= GPGME_CREATE_NOEXPIRE;
- }
-
- if (params->isNoPassPhrase()) {
- flags |= GPGME_CREATE_NOPASSWD;
- }
-
- err = gpgme_op_createkey(mCtx, userid, algo, 0, expires, nullptr, flags);
-
- if (err != GPG_ERR_NO_ERROR) {
- checkErr(err);
- return false;
- } else {
- emit signalKeyDBChanged();
- return true;
- }
- }
-
-/** Export Key to QByteArray
- *
- */
- bool GpgContext::exportKeys(QStringList *uidList, QByteArray *outBuffer) {
- size_t read_bytes;
- gpgme_data_t dataOut = nullptr;
- outBuffer->resize(0);
-
- if (uidList->count() == 0) {
- QMessageBox::critical(nullptr, "Export Keys Error", "No Keys Selected");
- return false;
- }
-
- for (int i = 0; i < uidList->count(); i++) {
- err = gpgme_data_new(&dataOut);
- checkErr(err);
-
- err = gpgme_op_export(mCtx, uidList->at(i).toUtf8().constData(), 0, dataOut);
- checkErr(err);
-
- read_bytes = gpgme_data_seek(dataOut, 0, SEEK_END);
-
- err = readToBuffer(dataOut, outBuffer);
- checkErr(err);
- gpgme_data_release(dataOut);
- }
- return true;
- }
-
- /**
- * List all availabe Keys (VERY much like kgpgme)
- */
- void GpgContext::fetch_keys() {
-
- gpgme_error_t gpgmeError;
-
- gpgme_key_t key;
-
- qDebug() << "Clear List and Map";
-
- mKeyList.clear();
- mKeyMap.clear();
-
- auto &keys = mKeyList;
- auto &keys_map = mKeyMap;
-
- qDebug() << "Set Keylist Mode";
-
- gpgmeError = gpgme_set_keylist_mode(mCtx,
- GPGME_KEYLIST_MODE_LOCAL
- | GPGME_KEYLIST_MODE_WITH_SECRET
- | GPGME_KEYLIST_MODE_SIGS
- | GPGME_KEYLIST_MODE_SIG_NOTATIONS
- | GPGME_KEYLIST_MODE_WITH_TOFU);
- if (gpg_err_code(gpgmeError) != GPG_ERR_NO_ERROR) {
- checkErr(gpgmeError);
- return;
- }
-
- qDebug() << "Operate KeyList Start";
-
- gpgmeError = gpgme_op_keylist_start(mCtx, nullptr, 0);
- if (gpg_err_code(gpgmeError) != GPG_ERR_NO_ERROR) {
- checkErr(gpgmeError);
- return;
- }
-
- qDebug() << "Start Loop";
-
- while ((gpgmeError = gpgme_op_keylist_next(mCtx, &key)) == GPG_ERR_NO_ERROR) {
- if (!key->subkeys)
- continue;
-
- qDebug() << "Append Key" << key->subkeys->keyid;
-
- keys.emplace_back(key);
- keys_map.insert(keys.back().id, &keys.back());
- gpgme_key_unref(key);
- }
-
-
- if (gpg_err_code(gpgmeError) != GPG_ERR_EOF) {
- checkErr(gpgmeError);
- return;
- }
-
- qDebug() << "Operate KeyList End";
-
- gpgmeError = gpgme_op_keylist_end(mCtx);
- if (gpg_err_code(gpgmeError) != GPG_ERR_NO_ERROR) {
- checkErr(gpgmeError);
- return;
- }
-
- gpgmeError = gpgme_op_keylist_end(mCtx);
- if (gpg_err_code(gpgmeError) != GPG_ERR_NO_ERROR) {
- checkErr(gpgmeError);
- return;
- }
-
- mKeyList = keys;
- }
-
-/** Delete keys
- */
-
- void GpgContext::deleteKeys(QStringList *uidList) {
-
- gpgme_error_t error;
- gpgme_key_t key;
-
- for (const auto &tmp : *uidList) {
-
- error = gpgme_op_keylist_start(mCtx, tmp.toUtf8().constData(), 0);
- if (error != GPG_ERR_NO_ERROR) {
- checkErr(error);
- continue;
- }
-
- error = gpgme_op_keylist_next(mCtx, &key);
- if (error != GPG_ERR_NO_ERROR) {
- checkErr(error);
- continue;
- }
-
- error = gpgme_op_keylist_end(mCtx);
- if (error != GPG_ERR_NO_ERROR) {
- checkErr(error);
- continue;
- }
-
- error = gpgme_op_delete(mCtx, key, 1);
- if (error != GPG_ERR_NO_ERROR) {
- checkErr(error);
- continue;
- }
-
- }
- emit signalKeyDBChanged();
- }
-
-/** Encrypt inBuffer for reciepients-uids, write
- * result to outBuffer
- */
- gpg_error_t GpgContext::encrypt(QVector<GpgKey> &keys, const QByteArray &inBuffer, QByteArray *outBuffer,
- gpgme_encrypt_result_t *result) {
-
- gpgme_data_t dataIn = nullptr, dataOut = nullptr;
- outBuffer->resize(0);
-
- //gpgme_encrypt_result_t e_result;
- gpgme_key_t recipients[keys.count() + 1];
-
- int index = 0;
- for (const auto &key : keys) {
- recipients[index++] = key.key_refer;
- }
-
- //Last entry dataIn array has to be nullptr
- recipients[keys.count()] = nullptr;
-
- //If the last parameter isnt 0, a private copy of data is made
- if (mCtx) {
- err = gpgme_data_new_from_mem(&dataIn, inBuffer.data(), inBuffer.size(), 1);
- checkErr(err);
- if (!err) {
- err = gpgme_data_new(&dataOut);
- checkErr(err);
- if (!err) {
- err = gpgme_op_encrypt(mCtx, recipients, GPGME_ENCRYPT_ALWAYS_TRUST, dataIn, dataOut);
- checkErr(err);
- if (!err) {
- err = readToBuffer(dataOut, outBuffer);
- checkErr(err);
- }
- }
- }
- }
- if (dataIn) {
- gpgme_data_release(dataIn);
- }
- if (dataOut) {
- gpgme_data_release(dataOut);
- }
-
- if (result != nullptr) {
- *result = gpgme_op_encrypt_result(mCtx);
- }
- return err;
- }
-
-/** Decrypt QByteAarray, return QByteArray
- * mainly from http://basket.kde.org/ (kgpgme.cpp)
- */
- gpgme_error_t
- GpgContext::decrypt(const QByteArray &inBuffer, QByteArray *outBuffer, gpgme_decrypt_result_t *result) {
- gpgme_data_t dataIn = nullptr, dataOut = nullptr;
- gpgme_decrypt_result_t m_result = nullptr;
-
- outBuffer->resize(0);
- if (mCtx != nullptr) {
- err = gpgme_data_new_from_mem(&dataIn, inBuffer.data(), inBuffer.size(), 1);
- if (gpgme_err_code(err) == GPG_ERR_NO_ERROR) {
- err = gpgme_data_new(&dataOut);
- if (gpgme_err_code(err) == GPG_ERR_NO_ERROR) {
- err = gpgme_op_decrypt(mCtx, dataIn, dataOut);
- m_result = gpgme_op_decrypt_result(mCtx);
- if (gpgme_err_code(err) == GPG_ERR_NO_ERROR) {
- err = readToBuffer(dataOut, outBuffer);
- }
- }
- }
- }
-
- if (!settings.value("general/rememberPassword").toBool()) {
- clearPasswordCache();
- }
-
- if (dataIn) {
- gpgme_data_release(dataIn);
- }
- if (dataOut) {
- gpgme_data_release(dataOut);
- }
-
- if (result != nullptr) {
- *result = m_result;
- }
- return err;
- }
-
-/** Read gpgme-Data to QByteArray
- * mainly from http://basket.kde.org/ (kgpgme.cpp)
- */
-#define BUF_SIZE (32 * 1024)
-
- gpgme_error_t GpgContext::readToBuffer(gpgme_data_t dataIn, QByteArray *outBuffer) {
- off_t ret;
- gpgme_error_t gpgErrNoError = GPG_ERR_NO_ERROR;
-
- ret = gpgme_data_seek(dataIn, 0, SEEK_SET);
- if (ret) {
- gpgErrNoError = gpgme_err_code_from_errno(errno);
- checkErr(gpgErrNoError, "failed dataseek dataIn readToBuffer");
- } else {
- char buf[BUF_SIZE + 2];
-
- while ((ret = gpgme_data_read(dataIn, buf, BUF_SIZE)) > 0) {
- const size_t size = outBuffer->size();
- outBuffer->resize(static_cast<int>(size + ret));
- memcpy(outBuffer->data() + size, buf, ret);
- }
- if (ret < 0) {
- gpgErrNoError = gpgme_err_code_from_errno(errno);
- checkErr(gpgErrNoError, "failed data_read dataIn readToBuffer");
- }
- }
- return gpgErrNoError;
- }
-
-/** The Passphrase window, if not provided by env-Var GPG_AGENT_INFO
- * originally copied from http://basket.kde.org/ (kgpgme.cpp), but modified
- */
- gpgme_error_t GpgContext::passphraseCb(void *hook, const char *uid_hint,
- const char *passphrase_info,
- int last_was_bad, int fd) {
- auto *gpg = static_cast<GpgContext *>(hook);
- return gpg->passphrase(uid_hint, passphrase_info, last_was_bad, fd);
- }
-
- gpgme_error_t GpgContext::passphrase(const char *uid_hint,
- const char * /*passphrase_info*/,
- int last_was_bad, int fd) {
- gpgme_error_t returnValue = GPG_ERR_CANCELED;
- QString passwordDialogMessage;
- QString gpgHint = QString::fromUtf8(uid_hint);
- bool result;
-
-#ifdef _WIN32
- DWORD written;
- auto hd = INT2VOIDP(fd);
-#endif
-
- if (last_was_bad) {
- passwordDialogMessage += "<i>" + tr("Wrong password") + ".</i><br><br>\n\n";
- clearPasswordCache();
- }
-
- /** if uid provided */
- if (!gpgHint.isEmpty()) {
- // remove UID, leave only username & email
- gpgHint.remove(0, gpgHint.indexOf(" "));
- passwordDialogMessage += "<b>" + tr("Enter Password for") + "</b><br>" + gpgHint + "<br>";
- }
-
- if (mPasswordCache.isEmpty()) {
- QString password = QInputDialog::getText(QApplication::activeWindow(), tr("Enter Password"),
- passwordDialogMessage, QLineEdit::Password,
- "", &result);
-
- if (result) mPasswordCache = password.toUtf8();
- } else {
- result = true;
- }
-
- if (result) {
-
-#ifndef _WIN32
- if (write(fd, mPasswordCache.data(), mPasswordCache.length()) == -1) {
- qDebug() << "something is terribly broken";
- }
-#else
- WriteFile(hd, mPasswordCache.data(), mPasswordCache.length(), &written, 0);
-#endif
-
- returnValue = GPG_ERR_NO_ERROR;
- }
-
-#ifndef _WIN32
- if (write(fd, "\n", 1) == -1) {
- qDebug() << "something is terribly broken";
- }
-#else
- WriteFile(hd, "\n", 1, &written, 0);
-
- /* program will hang on cancel if hd not closed */
- if (!result) {
- CloseHandle(hd);
- }
-#endif
-
- return returnValue;
- }
-
-/** also from kgpgme.cpp, seems to clear password from mem */
- void GpgContext::clearPasswordCache() {
- if (mPasswordCache.size() > 0) {
- mPasswordCache.fill('\0');
- mPasswordCache.truncate(0);
- }
- }
-
-// error-handling
- void GpgContext::checkErr(gpgme_error_t gpgmeError, const QString &comment) {
- //if (gpgmeError != GPG_ERR_NO_ERROR && gpgmeError != GPG_ERR_CANCELED) {
- if (gpgmeError != GPG_ERR_NO_ERROR) {
- qDebug() << "[Error " << gpg_err_code(gpgmeError)
- << "] Source: " << gpgme_strsource(gpgmeError) << " Description: " << gpgErrString(gpgmeError);
- }
- }
-
- void GpgContext::checkErr(gpgme_error_t gpgmeError) {
- //if (gpgmeError != GPG_ERR_NO_ERROR && gpgmeError != GPG_ERR_CANCELED) {
- if (gpg_err_code(gpgmeError) != GPG_ERR_NO_ERROR) {
- qDebug() << "[Error " << gpg_err_code(gpgmeError)
- << "] Source: " << gpgme_strsource(gpgmeError) << " Description: " << gpgErrString(gpgmeError);
- }
- }
-
- QString GpgContext::gpgErrString(gpgme_error_t err) {
- return QString::fromUtf8(gpgme_strerror(err));
- }
-
- bool GpgContext::exportSecretKey(const GpgKey &key, QByteArray *outBuffer) {
- qDebug() << "Export Secret Key" << key.id;
- gpgme_key_t target_key[2] = {
- key.key_refer,
- nullptr
- };
-
- gpgme_data_t dataOut;
- gpgme_data_new(&dataOut);
- // export private key to outBuffer
- gpgme_error_t error = gpgme_op_export_keys(mCtx, target_key, GPGME_EXPORT_MODE_SECRET, dataOut);
-
- if (gpgme_err_code(error) != GPG_ERR_NO_ERROR) {
- checkErr(error);
- gpgme_data_release(dataOut);
- return false;
- }
-
- readToBuffer(dataOut, outBuffer);
- gpgme_data_release(dataOut);
- return true;
- }
-
-/** return type should be gpgme_error_t*/
- QProcess * GpgContext::executeGpgCommand(const QStringList &arguments, QByteArray *stdOut, QByteArray *stdErr,
- const std::function<void(QProcess *)> &interactFunc) {
- QStringList args;
- args << arguments;
-
- auto *gpgProcess = new QProcess(this);
- qDebug() << "gpgExec" << gpgExec << args;
-
- gpgProcess->setReadChannel(QProcess::StandardOutput);
- connect(gpgProcess, SIGNAL(finished(int,QProcess::ExitStatus)),
- gpgProcess, SLOT(deleteLater()));
- connect(gpgProcess, &QProcess::readyReadStandardOutput, this, [gpgProcess, interactFunc]() {
- qDebug() << "Function Called" << &gpgProcess;
- // interactFunc(gpgProcess);
- });
-
- gpgProcess->start(gpgExec, args);
-
- if (gpgProcess->waitForStarted()){
- qDebug() << "Gpg Process Started Success";
- } else {
- qDebug() << "Gpg Process Started Failed";
- }
-
- return gpgProcess;
- }
-
-/***
- * if sigbuffer not set, the inbuffer should contain signed text
- *
- * TODO: return type should contain:
- * -> list of sigs
- * -> valid
- * -> errors
- */
- gpgme_error_t GpgContext::verify(QByteArray *inBuffer, QByteArray *sigBuffer, gpgme_verify_result_t *result) {
-
- gpgme_data_t dataIn;
- gpgme_error_t gpgmeError;
- gpgme_signature_t sign;
- gpgme_verify_result_t m_result;
-
- gpgmeError = gpgme_data_new_from_mem(&dataIn, inBuffer->data(), inBuffer->size(), 1);
- checkErr(gpgmeError);
-
- if (sigBuffer != nullptr) {
- gpgme_data_t sigdata;
- gpgmeError = gpgme_data_new_from_mem(&sigdata, sigBuffer->data(), sigBuffer->size(), 1);
- checkErr(gpgmeError);
- gpgmeError = gpgme_op_verify(mCtx, sigdata, dataIn, nullptr);
- } else {
- gpgmeError = gpgme_op_verify(mCtx, dataIn, nullptr, dataIn);
- }
-
- checkErr(gpgmeError);
-
- m_result = gpgme_op_verify_result(mCtx);
-
- if (result != nullptr) {
- *result = m_result;
- }
-
- return gpgmeError;
- }
-
- gpg_error_t
- GpgContext::sign(const QVector<GpgKey> &keys, const QByteArray &inBuffer, QByteArray *outBuffer, bool detached,
- gpgme_sign_result_t *result) {
-
- gpgme_error_t gpgmeError;
- gpgme_data_t dataIn, dataOut;
- gpgme_sign_result_t m_result;
- gpgme_sig_mode_t mode;
-
- if (keys.isEmpty()) {
- QMessageBox::critical(nullptr, tr("Key Selection"), tr("No Private Key Selected"));
- return false;
- }
-
- // at start or end?
-
- setSigners(keys);
-
- gpgmeError = gpgme_data_new_from_mem(&dataIn, inBuffer.data(), inBuffer.size(), 1);
- checkErr(gpgmeError);
- gpgmeError = gpgme_data_new(&dataOut);
- checkErr(gpgmeError);
-
- /*
- `GPGME_SIG_MODE_NORMAL'
- A normal signature is made, the output includes the plaintext
- and the signature.
-
- `GPGME_SIG_MODE_DETACH'
- A detached signature is made.
-
- `GPGME_SIG_MODE_CLEAR'
- A clear text signature is made. The ASCII armor and text
- mode settings of the context are ignored.
- */
-
- if (detached) {
- mode = GPGME_SIG_MODE_DETACH;
- } else {
- mode = GPGME_SIG_MODE_CLEAR;
- }
-
- gpgmeError = gpgme_op_sign(mCtx, dataIn, dataOut, mode);
- checkErr(gpgmeError);
-
- if (gpgmeError == GPG_ERR_CANCELED) {
- return false;
- }
-
- if (gpgmeError != GPG_ERR_NO_ERROR) {
- QMessageBox::critical(nullptr, tr("Error in signing:"), QString::fromUtf8(gpgme_strerror(gpgmeError)));
- return false;
- }
-
- m_result = gpgme_op_sign_result(mCtx);
-
- if (result != nullptr) {
- *result = m_result;
- }
-
- gpgmeError = readToBuffer(dataOut, outBuffer);
- checkErr(gpgmeError);
-
- gpgme_data_release(dataIn);
- gpgme_data_release(dataOut);
-
- if (!settings.value("general/rememberPassword").toBool()) {
- clearPasswordCache();
- }
-
- return gpgmeError;
- }
-
- /*
- * if there is no '\n' before the PGP-Begin-Block, but for example a whitespace,
- * GPGME doesn't recognise the Message as encrypted. This function adds '\n'
- * before the PGP-Begin-Block, if missing.
- */
- void GpgContext::preventNoDataErr(QByteArray *in) {
- int block_start = in->indexOf(GpgConstants::PGP_CRYPT_BEGIN);
- if (block_start > 0 && in->at(block_start - 1) != '\n') {
- in->insert(block_start, '\n');
- }
- block_start = in->indexOf(GpgConstants::PGP_SIGNED_BEGIN);
- if (block_start > 0 && in->at(block_start - 1) != '\n') {
- in->insert(block_start, '\n');
- }
- }
-
- /*
- * isSigned returns:
- * - 0, if text isn't signed at all
- * - 1, if text is partially signed
- * - 2, if text is completly signed
- */
- int GpgContext::textIsSigned(const QByteArray &text) {
- if (text.trimmed().startsWith(GpgConstants::PGP_SIGNED_BEGIN) &&
- text.trimmed().endsWith(GpgConstants::PGP_SIGNED_END)) {
- return 2;
- }
- if (text.contains(GpgConstants::PGP_SIGNED_BEGIN) && text.contains(GpgConstants::PGP_SIGNED_END)) {
- return 1;
- }
- return 0;
- }
-
- QString GpgContext::beautifyFingerprint(QString fingerprint) {
- uint len = fingerprint.length();
- if ((len > 0) && (len % 4 == 0))
- for (uint n = 0; 4 * (n + 1) < len; ++n)
- fingerprint.insert(static_cast<int>(5u * n + 4u), ' ');
- return fingerprint;
- }
-
- void GpgContext::slotRefreshKeyList() {
- qDebug() << "Refreshing Keys";
- this->fetch_keys();
- emit signalKeyInfoChanged();
- }
-
-/**
- * note: is_private_key status is not returned
- */
- GpgKey GpgContext::getKeyByFpr(const QString &fpr) {
- for (const auto &key : mKeyList) {
- if (key.fpr == fpr) {
- return key;
- } else {
- for (auto &subkey : key.subKeys) {
- if (subkey.fpr == fpr) {
- return key;
- }
- }
- }
- }
- return GpgKey(nullptr);
- }
-
- /**
- * note: is_private_key status is not returned
- */
- const GpgKey &GpgContext::getKeyById(const QString &id) {
-
- for (const auto &key : mKeyList) {
- if (key.id == id) {
- return key;
- } else {
- auto subkeys = key.subKeys;
- for (const auto &subkey : subkeys) {
- if (subkey.id == id) {
- return key;
- }
- }
- }
- }
-
- throw std::runtime_error("key not found");
- }
-
- QString GpgContext::getGpgmeVersion() {
- return QString(gpgme_check_version(nullptr));
- }
-
- bool GpgContext::signKey(const GpgKey &target, const QString &uid, const QDateTime *expires) {
-
- unsigned int flags = 0;
-
- unsigned int expires_time_t = 0;
- if (expires == nullptr) {
- flags |= GPGME_KEYSIGN_NOEXPIRE;
- } else {
- expires_time_t = QDateTime::currentDateTime().secsTo(*expires);
- }
-
- auto gpgmeError =
- gpgme_op_keysign(mCtx, target.key_refer, uid.toUtf8().constData(), expires_time_t, flags);
-
- if (gpgmeError == GPG_ERR_NO_ERROR) {
- emit signalKeyUpdated(target.id);
- return true;
- } else {
- checkErr(gpgmeError);
- return false;
- }
- }
-
- const GpgKeyList &GpgContext::getKeys() const {
- return mKeyList;
- }
-
- void GpgContext::getSigners(QVector<GpgKey> &signer) {
- auto count = gpgme_signers_count(mCtx);
- signer.clear();
- for (auto i = 0; i < count; i++) {
- auto key = gpgme_signers_enum(mCtx, i);
- auto it = mKeyMap.find(key->subkeys->keyid);
- if (it == mKeyMap.end()) {
- qDebug() << "Inconsistent state";
- signer.push_back(GpgKey(key));
- } else {
- signer.push_back(*it.value());
- }
- }
- }
-
- void GpgContext::setSigners(const QVector<GpgKey> &keys) {
- gpgme_signers_clear(mCtx);
- for (const auto &key : keys) {
- if (checkIfKeyCanSign(key)) {
- auto gpgmeError = gpgme_signers_add(mCtx, key.key_refer);
- checkErr(gpgmeError);
- }
- }
- if (keys.length() != gpgme_signers_count(mCtx)) {
- qDebug() << "No All Keys Added";
- }
- }
-
- void GpgContext::slotUpdateKeyList(const QString &key_id) {
- auto it = mKeyMap.find(key_id);
- if (it != mKeyMap.end()) {
- gpgme_key_t new_key_refer;
- auto gpgmeErr = gpgme_get_key(mCtx, key_id.toUtf8().constData(), &new_key_refer, 0);
-
- if (gpgme_err_code(gpgmeErr) == GPG_ERR_EOF) {
- gpgmeErr = gpgme_get_key(mCtx, key_id.toUtf8().constData(), &new_key_refer, 1);
-
- if (gpgme_err_code(gpgmeErr) == GPG_ERR_EOF) {
- throw std::runtime_error("key_id not found in key database");
- }
-
- }
-
- if (new_key_refer != nullptr) {
- it.value()->swapKeyRefer(new_key_refer);
- emit signalKeyInfoChanged();
- }
-
- }
- }
-
- bool GpgContext::addUID(const GpgKey &key, const GpgUID &uid) {
- QString userid = QString("%1 (%3) <%2>").arg(uid.name, uid.email, uid.comment);
- auto gpgmeError = gpgme_op_adduid(mCtx, key.key_refer, userid.toUtf8().constData(), 0);
- if (gpgmeError == GPG_ERR_NO_ERROR) {
- emit signalKeyUpdated(key.id);
- return true;
- } else {
- checkErr(gpgmeError);
- return false;
- }
-
- }
-
- bool GpgContext::revUID(const GpgKey &key, const GpgUID &uid) {
- auto gpgmeError = gpgme_op_revuid(mCtx, key.key_refer, uid.uid.toUtf8().constData(), 0);
- if (gpgmeError == GPG_ERR_NO_ERROR) {
- emit signalKeyUpdated(key.id);
- return true;
- } else {
- checkErr(gpgmeError);
- return false;
- }
- }
-
- bool GpgContext::setPrimaryUID(const GpgKey &key, const GpgUID &uid) {
- auto gpgmeError = gpgme_op_set_uid_flag(mCtx, key.key_refer,
- uid.uid.toUtf8().constData(), "primary", nullptr);
- if (gpgmeError == GPG_ERR_NO_ERROR) {
- emit signalKeyUpdated(key.id);
- return true;
- } else {
- checkErr(gpgmeError);
- return false;
- }
- }
-
- bool GpgContext::revSign(const GpgKey &key, const GpgKeySignature &signature) {
-
- auto signing_key = getKeyById(signature.keyid);
-
- auto gpgmeError = gpgme_op_revsig(mCtx, key.key_refer,
- signing_key.key_refer,
- signature.uid.toUtf8().constData(), 0);
- if (gpg_err_code(gpgmeError) == GPG_ERR_NO_ERROR) {
- emit signalKeyUpdated(key.id);
- return true;
- } else {
- checkErr(gpgmeError);
- return false;
- }
- }
-
- bool GpgContext::generateSubkey(const GpgKey &key, GenKeyInfo *params) {
-
- if (!params->isSubKey()) {
- return false;
- }
-
- auto algo_utf8 = (params->getAlgo() + params->getKeySizeStr()).toUtf8();
- const char *algo = algo_utf8.constData();
- unsigned long expires = QDateTime::currentDateTime().secsTo(params->getExpired());
- unsigned int flags = 0;
-
- if (!params->isSubKey()) {
- flags |= GPGME_CREATE_CERT;
- }
-
- if (params->isAllowEncryption()) {
- flags |= GPGME_CREATE_ENCR;
- }
-
- if (params->isAllowSigning()) {
- flags |= GPGME_CREATE_SIGN;
- }
-
- if (params->isAllowAuthentication()) {
- flags |= GPGME_CREATE_AUTH;
- }
-
- if (params->isNonExpired()) {
- flags |= GPGME_CREATE_NOEXPIRE;
- }
-
- flags |= GPGME_CREATE_NOPASSWD;
-
-
- auto gpgmeError = gpgme_op_createsubkey(mCtx, key.key_refer,
- algo, 0, expires, flags);
- if (gpgmeError == GPG_ERR_NO_ERROR) {
- emit signalKeyUpdated(key.id);
- return true;
- } else {
- checkErr(gpgmeError);
- return false;
- }
- }
-
- bool GpgContext::setExpire(const GpgKey &key, const GpgSubKey *subkey, QDateTime *expires) {
- unsigned long expires_time = 0;
- if (expires != nullptr) {
- qDebug() << "Expire Datetime" << expires->toString();
- expires_time = QDateTime::currentDateTime().secsTo(*expires);
- }
-
- const char *subfprs = nullptr;
-
- if (subkey != nullptr) {
- subfprs = subkey->fpr.toUtf8().constData();
- }
-
- auto gpgmeError = gpgme_op_setexpire(mCtx, key.key_refer,
- expires_time, subfprs, 0);
- if (gpgmeError == GPG_ERR_NO_ERROR) {
- emit signalKeyUpdated(key.id);
- return true;
- } else {
- checkErr(gpgmeError);
- return false;
- }
- }
-
- bool GpgContext::checkIfKeyCanSign(const GpgKey &key) {
- if (std::any_of(key.subKeys.begin(), key.subKeys.end(), [](const GpgSubKey &subkey) -> bool {
- return subkey.secret && subkey.can_sign && !subkey.disabled && !subkey.revoked && !subkey.expired;
- }))
- return true;
- return false;
- }
-
- bool GpgContext::checkIfKeyCanCert(const GpgKey &key) {
- return key.has_master_key && !key.expired && !key.revoked && !key.disabled;
- }
-
- bool GpgContext::checkIfKeyCanAuth(const GpgKey &key) {
- if (std::any_of(key.subKeys.begin(), key.subKeys.end(), [](const GpgSubKey &subkey) -> bool {
- return subkey.secret && subkey.can_authenticate && !subkey.disabled && !subkey.revoked && !subkey.expired;
- }))
- return true;
- return false;
- }
-
- bool GpgContext::checkIfKeyCanEncr(const GpgKey &key) {
- if (std::any_of(key.subKeys.begin(), key.subKeys.end(), [](const GpgSubKey &subkey) -> bool {
- return subkey.can_encrypt && !subkey.disabled && !subkey.revoked && !subkey.expired;
- }))
- return true;
- return false;
- }
-
- gpgme_error_t GpgContext::encryptSign(QVector<GpgKey> &keys, const QByteArray &inBuffer, QByteArray *outBuffer,
- gpgme_encrypt_result_t *encr_result, gpgme_sign_result_t *sign_result) {
- gpgme_data_t dataIn = nullptr, dataOut = nullptr;
- outBuffer->resize(0);
-
- setSigners(keys);
-
- //gpgme_encrypt_result_t e_result;
- gpgme_key_t recipients[keys.count() + 1];
-
- /* set key for user */
- int index = 0;
- for (const auto &key : keys) {
- recipients[index++] = key.key_refer;
- }
- //Last entry dataIn array has to be nullptr
- recipients[keys.count()] = nullptr;
-
- //If the last parameter isnt 0, a private copy of data is made
- if (mCtx != nullptr) {
- err = gpgme_data_new_from_mem(&dataIn, inBuffer.data(), inBuffer.size(), 1);
- if (gpg_err_code(err) == GPG_ERR_NO_ERROR) {
- err = gpgme_data_new(&dataOut);
- if (gpg_err_code(err) == GPG_ERR_NO_ERROR) {
- err = gpgme_op_encrypt_sign(mCtx, recipients, GPGME_ENCRYPT_ALWAYS_TRUST, dataIn, dataOut);
- if (encr_result != nullptr)
- *encr_result = gpgme_op_encrypt_result(mCtx);
- if (sign_result != nullptr)
- *sign_result = gpgme_op_sign_result(mCtx);
- if (gpg_err_code(err) == GPG_ERR_NO_ERROR) {
- err = readToBuffer(dataOut, outBuffer);
- }
- }
- }
- }
-
- if (gpgme_err_code(err) != GPG_ERR_NO_ERROR)
- checkErr(err);
-
- if (dataIn) {
- gpgme_data_release(dataIn);
- }
- if (dataOut) {
- gpgme_data_release(dataOut);
- }
-
- return err;
- }
-
- gpgme_error_t
- GpgContext::decryptVerify(const QByteArray &inBuffer, QByteArray *outBuffer, gpgme_decrypt_result_t *decrypt_result,
- gpgme_verify_result_t *verify_result) {
- gpgme_data_t dataIn = nullptr, dataOut = nullptr;
-
- outBuffer->resize(0);
- if (mCtx != nullptr) {
- err = gpgme_data_new_from_mem(&dataIn, inBuffer.data(), inBuffer.size(), 1);
- if (gpgme_err_code(err) == GPG_ERR_NO_ERROR) {
- err = gpgme_data_new(&dataOut);
- if (gpgme_err_code(err) == GPG_ERR_NO_ERROR) {
- err = gpgme_op_decrypt_verify(mCtx, dataIn, dataOut);
- if (decrypt_result != nullptr)
- *decrypt_result = gpgme_op_decrypt_result(mCtx);
- if (verify_result != nullptr)
- *verify_result = gpgme_op_verify_result(mCtx);
- if (gpgme_err_code(err) == GPG_ERR_NO_ERROR) {
- err = readToBuffer(dataOut, outBuffer);
- }
- }
- }
- }
-
- if (!settings.value("general/rememberPassword").toBool()) {
- clearPasswordCache();
- }
-
- if (dataIn) {
- gpgme_data_release(dataIn);
- }
- if (dataOut) {
- gpgme_data_release(dataOut);
- }
-
- return err;
- }
-
- bool GpgContext::exportKeys(const QVector<GpgKey> &keys, QByteArray &outBuffer) {
- size_t read_bytes;
- gpgme_data_t dataOut = nullptr;
- outBuffer.resize(0);
-
- if (keys.count() == 0) {
- QMessageBox::critical(nullptr, "Export Keys Error", "No Keys Selected");
- return false;
- }
-
- for (const auto &key : keys) {
- err = gpgme_data_new(&dataOut);
- checkErr(err);
-
- err = gpgme_op_export(mCtx, key.id.toUtf8().constData(), 0, dataOut);
- checkErr(err);
-
- read_bytes = gpgme_data_seek(dataOut, 0, SEEK_END);
-
- err = readToBuffer(dataOut, &outBuffer);
- checkErr(err);
- gpgme_data_release(dataOut);
- }
- return true;
- }
-
- QProcess * GpgContext::generateRevokeCert(const GpgKey &key, const QString &outputFileName) {
- QByteArray out, stdErr;
- auto process = executeGpgCommand({
- "--command-fd",
- "0",
- "--status-fd", "1",
- "-o",
- outputFileName,
- "--gen-revoke",
- key.fpr
- }, &out, &stdErr,
- [](QProcess *proc) {
- qDebug() << "Function Called" << proc;
- while (proc->canReadLine()) {
- const QString line = QString::fromUtf8(proc->readLine()).trimmed();
- // Command-fd is a stable interface, while this is all kind of hacky we
- // are on a deadline :-/
- if (line == QLatin1String("[GNUPG:] GET_BOOL gen_revoke.okay")) {
- proc->write("y\n");
- } else if (line == QLatin1String("[GNUPG:] GET_LINE ask_revocation_reason.code")) {
- proc->write("0\n");
- } else if (line == QLatin1String("[GNUPG:] GET_LINE ask_revocation_reason.text")) {
- proc->write("\n");
- } else if (line == QLatin1String("[GNUPG:] GET_BOOL openfile.overwrite.okay")) {
- // We asked before
- proc->write("y\n");
- } else if (line == QLatin1String("[GNUPG:] GET_BOOL ask_revocation_reason.okay")) {
- proc->write("y\n");
- }
- }
- });
-
- qDebug() << "GenerateRevokeCert Process" << process;
-
- return process;
- }
-}
diff --git a/src/gpg/GpgFileOpera.cpp b/src/gpg/GpgFileOpera.cpp
index 9395bd17..af50c79a 100644
--- a/src/gpg/GpgFileOpera.cpp
+++ b/src/gpg/GpgFileOpera.cpp
@@ -114,7 +114,7 @@ gpgme_error_t GpgFileOpera::signFile(GpgME::GpgContext *ctx, QVector<GpgKey> &ke
auto outBuffer = QByteArray();
infile.close();
- auto error = ctx->sign(keys, inBuffer, &outBuffer, true, result);
+ auto error = ctx->sign(keys, inBuffer, &outBuffer, GPGME_SIG_MODE_DETACH, result);
if (gpg_err_code(error) != GPG_ERR_NO_ERROR) return error;
@@ -185,7 +185,10 @@ gpg_error_t GpgFileOpera::encryptSignFile(GpgME::GpgContext *ctx, QVector<GpgKey
auto outBuffer = QByteArray();
infile.close();
- auto error = ctx->encryptSign(keys, inBuffer, &outBuffer, encr_res, sign_res);
+ QVector<GpgKey> signerKeys;
+
+ // TODO dealing with signer keys
+ auto error = ctx->encryptSign(keys, signerKeys, inBuffer, &outBuffer, encr_res, sign_res);
if (gpg_err_code(error) != GPG_ERR_NO_ERROR)
return error;
diff --git a/src/gpg/GpgInfo.cpp b/src/gpg/GpgInfo.cpp
new file mode 100644
index 00000000..00a15ef9
--- /dev/null
+++ b/src/gpg/GpgInfo.cpp
@@ -0,0 +1,25 @@
+/**
+ * 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.
+ *
+ * Foobar 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 Foobar. If not, see <https://www.gnu.org/licenses/>.
+ *
+ * The initial version of the source code is inherited from gpg4usb-team.
+ * Their source code version also complies with GNU General Public License.
+ *
+ * The source code version of this software was modified and released
+ * by Saturneric<[email protected]> starting on May 12, 2021.
+ *
+ */
+
+#include "gpg/GpgInfo.h"
diff --git a/src/gpg/GpgUID.cpp b/src/gpg/GpgUID.cpp
index f8f7e8fa..0dc6abfd 100644
--- a/src/gpg/GpgUID.cpp
+++ b/src/gpg/GpgUID.cpp
@@ -1,6 +1,26 @@
-//
-// Created by eric on 2021/5/22.
-//
+/**
+ * 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.
+ *
+ * Foobar 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 Foobar. If not, see <https://www.gnu.org/licenses/>.
+ *
+ * The initial version of the source code is inherited from gpg4usb-team.
+ * Their source code version also complies with GNU General Public License.
+ *
+ * The source code version of this software was modified and released
+ * by Saturneric<[email protected]> starting on May 12, 2021.
+ *
+ */
#include "gpg/GpgUID.h"
diff --git a/src/gpg/gpg_context/GpgContext.cpp b/src/gpg/gpg_context/GpgContext.cpp
new file mode 100644
index 00000000..14b54b32
--- /dev/null
+++ b/src/gpg/gpg_context/GpgContext.cpp
@@ -0,0 +1,410 @@
+/**
+ * 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.
+ *
+ * Foobar 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 Foobar. If not, see <https://www.gnu.org/licenses/>.
+ *
+ * The initial version of the source code is inherited from gpg4usb-team.
+ * Their source code version also complies with GNU General Public License.
+ *
+ * The source code version of this software was modified and released
+ * by Saturneric<[email protected]> starting on May 12, 2021.
+ *
+ */
+
+#include "gpg/GpgContext.h"
+#include "ui/WaitingDialog.h"
+
+#include <functional>
+#include <unistd.h> /* contains read/write */
+
+#ifdef _WIN32
+
+#include <windows.h>
+
+#endif
+
+#define INT2VOIDP(i) (void*)(uintptr_t)(i)
+
+namespace GpgME {
+
+ /** Constructor
+ * Set up gpgme-context, set paths to app-run path
+ */
+ GpgContext::GpgContext() {
+
+ /** The function `gpgme_check_version' must be called before any other
+ * function in the library, because it initializes the thread support
+ * subsystem in GPGME. (from the info page) */
+ gpgme_check_version(nullptr);
+
+ // the locale set here is used for the other setlocale calls which have nullptr
+ // -> nullptr means use default, which is configured here
+ setlocale(LC_ALL, settings.value("int/lang").toLocale().name().toUtf8().constData());
+
+ /** set locale, because tests do also */
+ gpgme_set_locale(nullptr, LC_CTYPE, setlocale(LC_CTYPE, nullptr));
+ //qDebug() << "Locale set to" << LC_CTYPE << " - " << setlocale(LC_CTYPE, nullptr);
+#ifndef _WIN32
+ gpgme_set_locale(nullptr, LC_MESSAGES, setlocale(LC_MESSAGES, nullptr));
+#endif
+
+ err = gpgme_new(&mCtx);
+ checkErr(err);
+
+ gpgme_engine_info_t engineInfo;
+ engineInfo = gpgme_ctx_get_engine_info(mCtx);
+
+// Check ENV before running
+ bool check_pass = false, find_openpgp = false, find_gpgconf = false, find_assuan = false, find_cms = false;
+ while (engineInfo != nullptr) {
+ qDebug() << gpgme_get_protocol_name(engineInfo->protocol) << engineInfo->file_name << engineInfo->protocol
+ << engineInfo->home_dir << engineInfo->version;
+ if (engineInfo->protocol == GPGME_PROTOCOL_GPGCONF && strcmp(engineInfo->version, "1.0.0") != 0)
+ find_gpgconf = true;
+ if (engineInfo->protocol == GPGME_PROTOCOL_OpenPGP && strcmp(engineInfo->version, "1.0.0") != 0)
+ find_openpgp = true, info.appPath = engineInfo->file_name;
+ if (engineInfo->protocol == GPGME_PROTOCOL_CMS && strcmp(engineInfo->version, "1.0.0") != 0)
+ find_cms = true;
+ if (engineInfo->protocol == GPGME_PROTOCOL_ASSUAN)
+ find_assuan = true;
+
+ engineInfo = engineInfo->next;
+ }
+
+ if (find_gpgconf && find_openpgp && find_cms && find_assuan)
+ check_pass = true;
+
+ if (!check_pass) {
+ good = false;
+ return;
+ } else good = true;
+
+
+/** Setting the output type must be done at the beginning */
+/** think this means ascii-armor --> ? */
+ gpgme_set_armor(mCtx, 1);
+/** passphrase-callback */
+ gpgme_set_passphrase_cb(mCtx, passphraseCb, this);
+
+/** check if app is called with -d from command line */
+ if (qApp->arguments().contains("-d")) {
+ qDebug() << "gpgme_data_t debug on";
+ debug = true;
+ } else {
+ debug = false;
+ }
+
+ connect(this, SIGNAL(signalKeyDBChanged()),
+ this, SLOT(slotRefreshKeyList()), Qt::DirectConnection);
+ connect(this, SIGNAL(signalKeyUpdated(QString)),
+ this, SLOT(slotUpdateKeyList(QString)), Qt::DirectConnection);
+ slotRefreshKeyList();
+ }
+
+ /** Destructor
+ * Release gpgme-context
+ */
+ GpgContext::~GpgContext() {
+ if (mCtx) gpgme_release(mCtx);
+ mCtx = nullptr;
+ }
+
+ bool GpgContext::isGood() const {
+ return good;
+ }
+
+ /** Read gpgme-Data to QByteArray
+ * mainly from http://basket.kde.org/ (kgpgme.cpp)
+ */
+#define BUF_SIZE (32 * 1024)
+
+ gpgme_error_t GpgContext::readToBuffer(gpgme_data_t dataIn, QByteArray *outBuffer) {
+ gpgme_off_t ret;
+ gpgme_error_t gpgErrNoError = GPG_ERR_NO_ERROR;
+
+ ret = gpgme_data_seek(dataIn, 0, SEEK_SET);
+ if (ret) {
+ gpgErrNoError = gpgme_err_code_from_errno(errno);
+ checkErr(gpgErrNoError, "failed dataseek dataIn readToBuffer");
+ } else {
+ char buf[BUF_SIZE + 2];
+
+ while ((ret = gpgme_data_read(dataIn, buf, BUF_SIZE)) > 0) {
+ const size_t size = outBuffer->size();
+ outBuffer->resize(static_cast<int>(size + ret));
+ memcpy(outBuffer->data() + size, buf, ret);
+ }
+ if (ret < 0) {
+ gpgErrNoError = gpgme_err_code_from_errno(errno);
+ checkErr(gpgErrNoError, "failed data_read dataIn readToBuffer");
+ }
+ }
+ return gpgErrNoError;
+ }
+
+ /**
+ * The Passphrase window, if not provided by env-Var GPG_AGENT_INFO
+ * originally copied from http://basket.kde.org/ (kgpgme.cpp), but modified
+ */
+ gpgme_error_t GpgContext::passphraseCb(void *hook, const char *uid_hint,
+ const char *passphrase_info,
+ int last_was_bad, int fd) {
+ auto *gpg = static_cast<GpgContext *>(hook);
+ return gpg->passphrase(uid_hint, passphrase_info, last_was_bad, fd);
+ }
+
+ gpgme_error_t GpgContext::passphrase(const char *uid_hint,
+ const char * /*passphrase_info*/,
+ int last_was_bad, int fd) {
+
+ gpgme_error_t returnValue = GPG_ERR_CANCELED;
+ QString passwordDialogMessage;
+ QString gpgHint = QString::fromUtf8(uid_hint);
+ bool result;
+
+#ifdef _WIN32
+ DWORD written;
+ auto hd = INT2VOIDP(fd);
+#endif
+
+ if (last_was_bad) {
+ passwordDialogMessage += "<i>" + tr("Wrong password") + ".</i><br><br>\n\n";
+ clearPasswordCache();
+ }
+
+ /** if uid provided */
+ if (!gpgHint.isEmpty()) {
+ // remove UID, leave only username & email
+ gpgHint.remove(0, gpgHint.indexOf(" "));
+ passwordDialogMessage += "<b>" + tr("Enter Password for") + "</b><br>" + gpgHint + "<br>";
+ }
+
+ if (mPasswordCache.isEmpty()) {
+ QString password = QInputDialog::getText(QApplication::activeWindow(), tr("Enter Password"),
+ passwordDialogMessage, QLineEdit::Password,
+ "", &result);
+
+ if (result) mPasswordCache = password.toUtf8();
+ } else result = true;
+
+ if (result) {
+
+#ifndef _WIN32
+ if (write(fd, mPasswordCache.data(), mPasswordCache.length()) == -1) qDebug() << "something is terribly broken";
+#else
+ WriteFile(hd, mPasswordCache.data(), mPasswordCache.length(), &written, 0);
+#endif
+ returnValue = GPG_ERR_NO_ERROR;
+ }
+
+#ifndef _WIN32
+ if (write(fd, "\n", 1) == -1) qDebug() << "something is terribly broken";
+#else
+ WriteFile(hd, "\n", 1, &written, 0);
+
+ /* program will hang on cancel if hd not closed */
+ if (!result) CloseHandle(hd);
+#endif
+
+ return returnValue;
+ }
+
+ /** also from kgpgme.cpp, seems to clear password from mem */
+ void GpgContext::clearPasswordCache() {
+ if (mPasswordCache.size() > 0) {
+ mPasswordCache.fill('\0');
+ mPasswordCache.truncate(0);
+ }
+ }
+
+ // error-handling
+ void GpgContext::checkErr(gpgme_error_t gpgmeError, const QString &comment) {
+ //if (gpgmeError != GPG_ERR_NO_ERROR && gpgmeError != GPG_ERR_CANCELED) {
+ if (gpgmeError != GPG_ERR_NO_ERROR) {
+ qDebug() << "[Error " << gpg_err_code(gpgmeError)
+ << "] Source: " << gpgme_strsource(gpgmeError) << " Description: " << gpgErrString(gpgmeError);
+ }
+ }
+
+ void GpgContext::checkErr(gpgme_error_t gpgmeError) {
+ //if (gpgmeError != GPG_ERR_NO_ERROR && gpgmeError != GPG_ERR_CANCELED) {
+ if (gpg_err_code(gpgmeError) != GPG_ERR_NO_ERROR) {
+ qDebug() << "[Error " << gpg_err_code(gpgmeError)
+ << "] Source: " << gpgme_strsource(gpgmeError) << " Description: " << gpgErrString(gpgmeError);
+ }
+ }
+
+ QString GpgContext::gpgErrString(gpgme_error_t err) {
+ return QString::fromUtf8(gpgme_strerror(err));
+ }
+
+ /** return type should be gpgme_error_t*/
+ void
+ GpgContext::executeGpgCommand(const QStringList &arguments, const std::function<void(QProcess *)> &interactFunc) {
+ QEventLoop looper;
+ auto dialog = new WaitingDialog(tr("Processing"), nullptr);
+ dialog->show();
+ auto *gpgProcess = new QProcess(&looper);
+ gpgProcess->setProcessChannelMode(QProcess::MergedChannels);
+ connect(gpgProcess, qOverload<int, QProcess::ExitStatus>(&QProcess::finished), &looper, &QEventLoop::quit);
+ connect(gpgProcess, qOverload<int, QProcess::ExitStatus>(&QProcess::finished), dialog,
+ &WaitingDialog::deleteLater);
+ connect(gpgProcess, &QProcess::errorOccurred, []() -> void { qDebug("Error in Process"); });
+ connect(gpgProcess, &QProcess::errorOccurred, &looper, &QEventLoop::quit);
+ connect(gpgProcess, &QProcess::started, []() -> void { qDebug() << "Gpg Process Started Success"; });
+ connect(gpgProcess, &QProcess::readyReadStandardOutput, [interactFunc, gpgProcess]() {
+ qDebug() << "Function Called";
+ interactFunc(gpgProcess);
+ });
+ gpgProcess->setProgram(info.appPath);
+ gpgProcess->setArguments(arguments);
+ gpgProcess->start();
+ looper.exec();
+ dialog->close();
+
+ }
+
+
+ /*
+ * if there is no '\n' before the PGP-Begin-Block, but for example a whitespace,
+ * GPGME doesn't recognise the Message as encrypted. This function adds '\n'
+ * before the PGP-Begin-Block, if missing.
+ */
+ void GpgContext::preventNoDataErr(QByteArray *in) {
+ int block_start = in->indexOf(GpgConstants::PGP_CRYPT_BEGIN);
+ if (block_start > 0 && in->at(block_start - 1) != '\n') {
+ in->insert(block_start, '\n');
+ }
+ block_start = in->indexOf(GpgConstants::PGP_SIGNED_BEGIN);
+ if (block_start > 0 && in->at(block_start - 1) != '\n') {
+ in->insert(block_start, '\n');
+ }
+ }
+
+ /*
+ * isSigned returns:
+ * - 0, if text isn't signed at all
+ * - 1, if text is partially signed
+ * - 2, if text is completly signed
+ */
+ int GpgContext::textIsSigned(const QByteArray &text) {
+ if (text.trimmed().startsWith(GpgConstants::PGP_SIGNED_BEGIN) &&
+ text.trimmed().endsWith(GpgConstants::PGP_SIGNED_END))
+ return 2;
+ else if (text.contains(GpgConstants::PGP_SIGNED_BEGIN) && text.contains(GpgConstants::PGP_SIGNED_END))
+ return 1;
+
+ else return 0;
+ }
+
+ QString GpgContext::beautifyFingerprint(QString fingerprint) {
+ uint len = fingerprint.length();
+ if ((len > 0) && (len % 4 == 0))
+ for (uint n = 0; 4 * (n + 1) < len; ++n) fingerprint.insert(static_cast<int>(5u * n + 4u), ' ');
+ return fingerprint;
+ }
+
+ void GpgContext::slotRefreshKeyList() {
+ qDebug() << "Refreshing Keys";
+ this->fetch_keys();
+ emit signalKeyInfoChanged();
+ }
+
+ QString GpgContext::getGpgmeVersion() {
+ return {gpgme_check_version(nullptr)};
+ }
+
+ const GpgKeyList &GpgContext::getKeys() const {
+ return mKeyList;
+ }
+
+ void GpgContext::getSigners(QVector<GpgKey> &signer, gpgme_ctx_t ctx) {
+ auto count = gpgme_signers_count(ctx);
+ signer.clear();
+ for (auto i = 0; i < count; i++) {
+ auto key = gpgme_signers_enum(ctx, i);
+ auto it = mKeyMap.find(key->subkeys->keyid);
+ if (it == mKeyMap.end()) {
+ qDebug() << "Inconsistent state";
+ signer.push_back(GpgKey(key));
+ } else {
+ signer.push_back(*it.value());
+ }
+ }
+ }
+
+ void GpgContext::setSigners(const QVector<GpgKey> &keys, gpgme_ctx_t ctx) {
+ gpgme_signers_clear(ctx);
+ for (const auto &key : keys) {
+ if (checkIfKeyCanSign(key)) {
+ auto gpgmeError = gpgme_signers_add(ctx, key.key_refer);
+ checkErr(gpgmeError);
+ }
+ }
+ if (keys.length() != gpgme_signers_count(ctx)) {
+ qDebug() << "No All Keys Added";
+ }
+ }
+
+ void GpgContext::slotUpdateKeyList(const QString &key_id) {
+ auto it = mKeyMap.find(key_id);
+ if (it != mKeyMap.end()) {
+ gpgme_key_t new_key_refer;
+ auto gpgmeErr = gpgme_get_key(mCtx, key_id.toUtf8().constData(), &new_key_refer, 0);
+
+ if (gpgme_err_code(gpgmeErr) == GPG_ERR_EOF) {
+ gpgmeErr = gpgme_get_key(mCtx, key_id.toUtf8().constData(), &new_key_refer, 1);
+
+ if (gpgme_err_code(gpgmeErr) == GPG_ERR_EOF) {
+ throw std::runtime_error("key_id not found in key database");
+ }
+
+ }
+
+ if (new_key_refer != nullptr) {
+ it.value()->swapKeyRefer(new_key_refer);
+ emit signalKeyInfoChanged();
+ }
+
+ }
+ }
+
+ bool GpgContext::revSign(const GpgKey &key, const GpgKeySignature &signature) {
+
+ auto signing_key = getKeyById(signature.keyid);
+
+ auto gpgmeError = gpgme_op_revsig(mCtx, key.key_refer,
+ signing_key.key_refer,
+ signature.uid.toUtf8().constData(), 0);
+ if (gpg_err_code(gpgmeError) == GPG_ERR_NO_ERROR) {
+ emit signalKeyUpdated(key.id);
+ return true;
+ } else {
+ checkErr(gpgmeError);
+ return false;
+ }
+ }
+
+ gpgme_ctx_t GpgME::GpgContext::create_ctx() {
+ gpgme_ctx_t ctx;
+ err = gpgme_new(&ctx);
+ checkErr(err);
+
+ gpgme_set_armor(ctx, 1);
+ gpgme_set_passphrase_cb(ctx, passphraseCb, this);
+ return ctx;
+ }
+
+
+}
diff --git a/src/gpg/gpg_context/GpgContextBasicOpera.cpp b/src/gpg/gpg_context/GpgContextBasicOpera.cpp
new file mode 100644
index 00000000..d9bf0bdb
--- /dev/null
+++ b/src/gpg/gpg_context/GpgContextBasicOpera.cpp
@@ -0,0 +1,315 @@
+/**
+ * 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.
+ *
+ * Foobar 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 Foobar. If not, see <https://www.gnu.org/licenses/>.
+ *
+ * The initial version of the source code is inherited from gpg4usb-team.
+ * Their source code version also complies with GNU General Public License.
+ *
+ * The source code version of this software was modified and released
+ * by Saturneric<[email protected]> starting on May 12, 2021.
+ *
+ */
+
+#include "gpg/GpgContext.h"
+
+/**
+ * Encrypt data
+ * @param keys keys used
+ * @param inBuffer input byte array
+ * @param outBuffer output byte array
+ * @param result opera result
+ * @return error information
+ */
+gpg_error_t GpgME::GpgContext::encrypt(QVector<GpgKey> &keys, const QByteArray &inBuffer, QByteArray *outBuffer,
+ gpgme_encrypt_result_t *result) {
+
+ gpgme_data_t dataIn = nullptr, dataOut = nullptr;
+ outBuffer->resize(0);
+
+ // gpgme_encrypt_result_t e_result;
+ gpgme_key_t recipients[keys.count() + 1];
+
+ int index = 0;
+ for (const auto &key : keys) recipients[index++] = key.key_refer;
+
+ // Last entry dataIn array has to be nullptr
+ recipients[keys.count()] = nullptr;
+
+ // If the last parameter isnt 0, a private copy of data is made
+ if (mCtx) {
+ err = gpgme_data_new_from_mem(&dataIn, inBuffer.data(), inBuffer.size(), 1);
+ checkErr(err);
+ if (!err) {
+ err = gpgme_data_new(&dataOut);
+ checkErr(err);
+ if (!err) {
+ err = gpgme_op_encrypt(mCtx, recipients, GPGME_ENCRYPT_ALWAYS_TRUST, dataIn, dataOut);
+ checkErr(err);
+ if (!err) {
+ err = readToBuffer(dataOut, outBuffer);
+ checkErr(err);
+ }
+ }
+ }
+ }
+ if (dataIn) gpgme_data_release(dataIn);
+ if (dataOut) gpgme_data_release(dataOut);
+
+ if (result != nullptr) *result = gpgme_op_encrypt_result(mCtx);
+ return err;
+}
+
+/**
+ * Decrypt data
+ * @param keys keys used
+ * @param inBuffer input byte array
+ * @param outBuffer output byte array
+ * @param result opera result
+ * @return error information
+ */
+gpgme_error_t GpgME::GpgContext::decrypt(const QByteArray &inBuffer, QByteArray *outBuffer,
+ gpgme_decrypt_result_t *result) {
+ gpgme_data_t dataIn = nullptr, dataOut = nullptr;
+ gpgme_decrypt_result_t m_result = nullptr;
+
+ outBuffer->resize(0);
+ if (mCtx != nullptr) {
+ err = gpgme_data_new_from_mem(&dataIn, inBuffer.data(), inBuffer.size(), 1);
+ if (gpgme_err_code(err) == GPG_ERR_NO_ERROR) {
+ err = gpgme_data_new(&dataOut);
+ if (gpgme_err_code(err) == GPG_ERR_NO_ERROR) {
+ err = gpgme_op_decrypt(mCtx, dataIn, dataOut);
+ m_result = gpgme_op_decrypt_result(mCtx);
+ if (gpgme_err_code(err) == GPG_ERR_NO_ERROR) err = readToBuffer(dataOut, outBuffer);
+ }
+ }
+ }
+
+ if (!settings.value("general/rememberPassword").toBool()) clearPasswordCache();
+
+ if (dataIn) gpgme_data_release(dataIn);
+ if (dataOut) gpgme_data_release(dataOut);
+
+ if (result != nullptr) *result = m_result;
+
+ return err;
+}
+
+/**
+ * Verify data
+ * @param keys keys used
+ * @param inBuffer input byte array
+ * @param sigBuffer signature byte array (detected by format)
+ * @param result opera result
+ * @return error information
+ */
+gpgme_error_t GpgME::GpgContext::verify(QByteArray *inBuffer, QByteArray *sigBuffer, gpgme_verify_result_t *result) {
+
+ gpgme_data_t dataIn;
+ gpgme_error_t gpgmeError;
+ gpgme_verify_result_t m_result;
+
+ gpgmeError = gpgme_data_new_from_mem(&dataIn, inBuffer->data(), inBuffer->size(), 1);
+ checkErr(gpgmeError);
+
+ if (sigBuffer != nullptr) {
+ gpgme_data_t sigdata;
+ gpgmeError = gpgme_data_new_from_mem(&sigdata, sigBuffer->data(), sigBuffer->size(), 1);
+ checkErr(gpgmeError);
+ gpgmeError = gpgme_op_verify(mCtx, sigdata, dataIn, nullptr);
+ } else {
+ gpgmeError = gpgme_op_verify(mCtx, dataIn, nullptr, dataIn);
+ }
+
+ checkErr(gpgmeError);
+
+ m_result = gpgme_op_verify_result(mCtx);
+
+ if (result != nullptr) {
+ *result = m_result;
+ }
+
+ return gpgmeError;
+}
+
+/**
+ * Sign data
+ * @param keys keys used
+ * @param inBuffer input byte array
+ * @param outBuffer output byte array
+ * @param mode sign mode
+ * @param result opera result
+ * @return
+ */
+gpg_error_t GpgME::GpgContext::sign(const QVector<GpgKey> &keys, const QByteArray &inBuffer, QByteArray *outBuffer,
+ gpgme_sig_mode_t mode, gpgme_sign_result_t *result, bool default_ctx) {
+
+ gpgme_error_t gpgmeError;
+ gpgme_data_t dataIn, dataOut;
+ gpgme_sign_result_t m_result;
+
+ auto _ctx = mCtx;
+
+ if(!default_ctx)
+ _ctx = create_ctx();
+
+ if (keys.isEmpty()) {
+ QMessageBox::critical(nullptr, tr("Key Selection"), tr("No Private Key Selected"));
+ return false;
+ }
+
+ // Set Singers of this opera
+ setSigners(keys, _ctx);
+
+ gpgmeError = gpgme_data_new_from_mem(&dataIn, inBuffer.data(), inBuffer.size(), 1);
+ checkErr(gpgmeError);
+ gpgmeError = gpgme_data_new(&dataOut);
+ checkErr(gpgmeError);
+
+ /**
+ `GPGME_SIG_MODE_NORMAL'
+ A normal signature is made, the output includes the plaintext
+ and the signature.
+
+ `GPGME_SIG_MODE_DETACH'
+ A detached signature is made.
+
+ `GPGME_SIG_MODE_CLEAR'
+ A clear text signature is made. The ASCII armor and text
+ mode settings of the context are ignored.
+ */
+
+ gpgmeError = gpgme_op_sign(_ctx, dataIn, dataOut, mode);
+ checkErr(gpgmeError);
+
+ if (gpgmeError == GPG_ERR_CANCELED) return false;
+
+ if (gpgmeError != GPG_ERR_NO_ERROR) {
+ QMessageBox::critical(nullptr, tr("Error in signing:"), QString::fromUtf8(gpgme_strerror(gpgmeError)));
+ return false;
+ }
+
+ if(default_ctx)
+ m_result = gpgme_op_sign_result(_ctx);
+ else m_result = nullptr;
+
+ if (result != nullptr) *result = m_result;
+
+ if(!default_ctx) gpgme_release(_ctx);
+
+ gpgmeError = readToBuffer(dataOut, outBuffer);
+ checkErr(gpgmeError);
+
+ gpgme_data_release(dataIn);
+ gpgme_data_release(dataOut);
+
+ // Of no use yet
+ if (!settings.value("general/rememberPassword").toBool()) clearPasswordCache();
+
+ return gpgmeError;
+}
+
+/**
+ * Encrypt and sign data
+ * @param keys keys used
+ * @param inBuffer input byte array
+ * @param outBuffer output byte array
+ * @param encr_result encrypt opera result
+ * @param sign_result sign opera result
+ * @return
+ */
+gpgme_error_t
+GpgME::GpgContext::encryptSign(QVector<GpgKey> &keys, QVector<GpgKey> &signers, const QByteArray &inBuffer,
+ QByteArray *outBuffer, gpgme_encrypt_result_t *encr_result,
+ gpgme_sign_result_t *sign_result) {
+ gpgme_data_t data_in = nullptr, data_out = nullptr;
+ outBuffer->resize(0);
+
+ setSigners(signers, mCtx);
+
+ //gpgme_encrypt_result_t e_result;
+ gpgme_key_t recipients[keys.count() + 1];
+
+ // set key for user
+ int index = 0;
+ for (const auto &key : keys) recipients[index++] = key.key_refer;
+
+ // Last entry dataIn array has to be nullptr
+ recipients[keys.count()] = nullptr;
+
+ // If the last parameter isnt 0, a private copy of data is made
+ if (mCtx != nullptr) {
+ err = gpgme_data_new_from_mem(&data_in, inBuffer.data(), inBuffer.size(), 1);
+ if (gpg_err_code(err) == GPG_ERR_NO_ERROR) {
+ err = gpgme_data_new(&data_out);
+ if (gpg_err_code(err) == GPG_ERR_NO_ERROR) {
+ err = gpgme_op_encrypt_sign(mCtx, recipients, GPGME_ENCRYPT_ALWAYS_TRUST, data_in, data_out);
+ if (encr_result != nullptr)
+ *encr_result = gpgme_op_encrypt_result(mCtx);
+ if (sign_result != nullptr)
+ *sign_result = gpgme_op_sign_result(mCtx);
+ if (gpg_err_code(err) == GPG_ERR_NO_ERROR) {
+ err = readToBuffer(data_out, outBuffer);
+ }
+ }
+ }
+ }
+
+ if (gpgme_err_code(err) != GPG_ERR_NO_ERROR) checkErr(err);
+
+ if (data_in) gpgme_data_release(data_in);
+ if (data_out) gpgme_data_release(data_out);
+
+ return err;
+}
+
+/**
+ * Decrypt and verify data
+ * @param inBuffer input byte array
+ * @param outBuffer output byte array
+ * @param decrypt_result decrypt opera result
+ * @param verify_result verify opera result
+ * @return error info
+ */
+gpgme_error_t GpgME::GpgContext::decryptVerify(const QByteArray &inBuffer, QByteArray *outBuffer,
+ gpgme_decrypt_result_t *decrypt_result,
+ gpgme_verify_result_t *verify_result) {
+ gpgme_data_t data_in = nullptr, data_out = nullptr;
+
+ outBuffer->resize(0);
+ if (mCtx != nullptr) {
+ err = gpgme_data_new_from_mem(&data_in, inBuffer.data(), inBuffer.size(), 1);
+ if (gpgme_err_code(err) == GPG_ERR_NO_ERROR) {
+ err = gpgme_data_new(&data_out);
+ if (gpgme_err_code(err) == GPG_ERR_NO_ERROR) {
+ err = gpgme_op_decrypt_verify(mCtx, data_in, data_out);
+ if (decrypt_result != nullptr)
+ *decrypt_result = gpgme_op_decrypt_result(mCtx);
+ if (verify_result != nullptr)
+ *verify_result = gpgme_op_verify_result(mCtx);
+ if (gpgme_err_code(err) == GPG_ERR_NO_ERROR) {
+ err = readToBuffer(data_out, outBuffer);
+ }
+ }
+ }
+ }
+
+ if (!settings.value("general/rememberPassword").toBool()) clearPasswordCache();
+
+ if (data_in) gpgme_data_release(data_in);
+ if (data_out) gpgme_data_release(data_out);
+
+ return err;
+}
diff --git a/src/gpg/gpg_context/GpgContextKeyInfo.cpp b/src/gpg/gpg_context/GpgContextKeyInfo.cpp
new file mode 100644
index 00000000..f6942e4e
--- /dev/null
+++ b/src/gpg/gpg_context/GpgContextKeyInfo.cpp
@@ -0,0 +1,110 @@
+/**
+ * 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.
+ *
+ * Foobar 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 Foobar. If not, see <https://www.gnu.org/licenses/>.
+ *
+ * The initial version of the source code is inherited from gpg4usb-team.
+ * Their source code version also complies with GNU General Public License.
+ *
+ * The source code version of this software was modified and released
+ * by Saturneric<[email protected]> starting on May 12, 2021.
+ *
+ */
+
+#include "gpg/GpgContext.h"
+
+/**
+ * check if key can sign(actually)
+ * @param key target key
+ * @return if key sign
+ */
+bool GpgME::GpgContext::checkIfKeyCanSign(const GpgKey &key) {
+ if (std::any_of(key.subKeys.begin(), key.subKeys.end(), [](const GpgSubKey &subkey) -> bool {
+ return subkey.secret && subkey.can_sign && !subkey.disabled && !subkey.revoked && !subkey.expired;
+ }))
+ return true;
+ else return false;
+}
+
+/**
+ * check if key can certify(actually)
+ * @param key target key
+ * @return if key certify
+ */
+bool GpgME::GpgContext::checkIfKeyCanCert(const GpgKey &key) {
+ return key.has_master_key && !key.expired && !key.revoked && !key.disabled;
+}
+
+/**
+ * check if key can authenticate(actually)
+ * @param key target key
+ * @return if key authenticate
+ */
+bool GpgME::GpgContext::checkIfKeyCanAuth(const GpgKey &key) {
+ if (std::any_of(key.subKeys.begin(), key.subKeys.end(), [](const GpgSubKey &subkey) -> bool {
+ return subkey.secret && subkey.can_authenticate && !subkey.disabled && !subkey.revoked && !subkey.expired;
+ }))
+ return true;
+ else return false;
+}
+
+/**
+ * check if key can encrypt(actually)
+ * @param key target key
+ * @return if key encrypt
+ */
+bool GpgME::GpgContext::checkIfKeyCanEncr(const GpgKey &key) {
+ if (std::any_of(key.subKeys.begin(), key.subKeys.end(), [](const GpgSubKey &subkey) -> bool {
+ return subkey.can_encrypt && !subkey.disabled && !subkey.revoked && !subkey.expired;
+ }))
+ return true;
+ else return false;
+}
+
+/**
+ * Get target key
+ * @param fpr master key's fingerprint
+ * @return the key
+ */
+GpgKey GpgME::GpgContext::getKeyByFpr(const QString &fpr) {
+ for (const auto &key : mKeyList) {
+ if (key.fpr == fpr) return key;
+ else
+ for (auto &subkey : key.subKeys) {
+ if (subkey.fpr == fpr) return key;
+ }
+ }
+ return GpgKey(nullptr);
+}
+
+
+/**
+ * Get target key
+ * @param id master key's id
+ * @return the key
+ */
+GpgKey GpgME::GpgContext::getKeyById(const QString &id) {
+
+ for (const auto &key : mKeyList) {
+ if (key.id == id) return key;
+ else {
+ auto sub_keys = key.subKeys;
+ for (const auto &subkey : sub_keys) {
+ if (subkey.id == id) return key;
+ }
+ }
+ }
+
+ return GpgKey(nullptr);
+}
diff --git a/src/gpg/gpg_context/GpgContextKeyOpera.cpp b/src/gpg/gpg_context/GpgContextKeyOpera.cpp
new file mode 100644
index 00000000..a224231d
--- /dev/null
+++ b/src/gpg/gpg_context/GpgContextKeyOpera.cpp
@@ -0,0 +1,410 @@
+/**
+ * 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.
+ *
+ * Foobar 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 Foobar. If not, see <https://www.gnu.org/licenses/>.
+ *
+ * The initial version of the source code is inherited from gpg4usb-team.
+ * Their source code version also complies with GNU General Public License.
+ *
+ * The source code version of this software was modified and released
+ * by Saturneric<[email protected]> starting on May 12, 2021.
+ *
+ */
+
+#include "gpg/GpgContext.h"
+
+/**
+ * Import key pair
+ * @param inBuffer input byte array
+ * @return Import information
+ */
+GpgImportInformation GpgME::GpgContext::importKey(QByteArray inBuffer) {
+ auto *importInformation = new GpgImportInformation();
+ err = gpgme_data_new_from_mem(&in, inBuffer.data(), inBuffer.size(), 1);
+ checkErr(err);
+ err = gpgme_op_import(mCtx, in);
+ gpgme_import_result_t result;
+
+ result = gpgme_op_import_result(mCtx);
+
+ if (result->unchanged) importInformation->unchanged = result->unchanged;
+ if (result->considered) importInformation->considered = result->considered;
+ if (result->no_user_id) importInformation->no_user_id = result->no_user_id;
+ if (result->imported) importInformation->imported = result->imported;
+ if (result->imported_rsa) importInformation->imported_rsa = result->imported_rsa;
+ if (result->unchanged) importInformation->unchanged = result->unchanged;
+ if (result->new_user_ids) importInformation->new_user_ids = result->new_user_ids;
+ if (result->new_sub_keys) importInformation->new_sub_keys = result->new_sub_keys;
+ if (result->new_signatures) importInformation->new_signatures = result->new_signatures;
+ if (result->new_revocations) importInformation->new_revocations = result->new_revocations;
+ if (result->secret_read) importInformation->secret_read = result->secret_read;
+ if (result->secret_imported) importInformation->secret_imported = result->secret_imported;
+ if (result->secret_unchanged) importInformation->secret_unchanged = result->secret_unchanged;
+ if (result->not_imported) importInformation->not_imported = result->not_imported;
+
+ gpgme_import_status_t status = result->imports;
+ while (status != nullptr) {
+ GpgImportedKey key;
+ key.importStatus = static_cast<int>(status->status);
+ key.fpr = status->fpr;
+ importInformation->importedKeys.emplace_back(key);
+ status = status->next;
+ }
+ checkErr(err);
+ emit signalKeyDBChanged();
+ gpgme_data_release(in);
+ return *importInformation;
+}
+
+/**
+ * Generate a new key pair
+ * @param params key generation args
+ * @return error information
+ */
+gpgme_error_t GpgME::GpgContext::generateKey(GenKeyInfo *params) {
+
+ auto userid_utf8 = params->getUserid().toUtf8();
+ const char *userid = userid_utf8.constData();
+ auto algo_utf8 = (params->getAlgo() + params->getKeySizeStr()).toUtf8();
+ const char *algo = algo_utf8.constData();
+ unsigned long expires = QDateTime::currentDateTime().secsTo(params->getExpired());
+ unsigned int flags = 0;
+
+ if (!params->isSubKey()) flags |= GPGME_CREATE_CERT;
+ if (params->isAllowEncryption()) flags |= GPGME_CREATE_ENCR;
+ if (params->isAllowSigning()) flags |= GPGME_CREATE_SIGN;
+ if (params->isAllowAuthentication()) flags |= GPGME_CREATE_AUTH;
+ if (params->isNonExpired()) flags |= GPGME_CREATE_NOEXPIRE;
+ if (params->isNoPassPhrase()) flags |= GPGME_CREATE_NOPASSWD;
+
+ err = gpgme_op_createkey(mCtx, userid, algo, 0, expires, nullptr, flags);
+
+ if (gpgme_err_code(err) != GPG_ERR_NO_ERROR) {
+ checkErr(err);
+ return err;
+ } else {
+ emit signalKeyDBChanged();
+ return err;
+ }
+}
+
+/**
+ * Export Key
+ * @param uidList key ids
+ * @param outBuffer output byte array
+ * @return if success
+ */
+bool GpgME::GpgContext::exportKeys(QStringList *uidList, QByteArray *outBuffer) {
+ gpgme_data_t dataOut = nullptr;
+ outBuffer->resize(0);
+
+ if (uidList->count() == 0) {
+ QMessageBox::critical(nullptr, "Export Keys Error", "No Keys Selected");
+ return false;
+ }
+
+ // Alleviate another crash problem caused by an unknown array out-of-bounds access
+ gpgme_ctx_t ctx = create_ctx();
+
+ for (int i = 0; i < uidList->count(); i++) {
+ err = gpgme_data_new(&dataOut);
+ checkErr(err);
+
+ err = gpgme_op_export(ctx, uidList->at(i).toUtf8().constData(), 0, dataOut);
+ checkErr(err);
+
+ qDebug() << "exportKeys read_bytes" << gpgme_data_seek(dataOut, 0, SEEK_END);
+
+ err = readToBuffer(dataOut, outBuffer);
+ checkErr(err);
+ gpgme_data_release(dataOut);
+ }
+
+ gpgme_release(ctx);
+
+ return true;
+}
+
+/**
+ * Get and store all key pairs info
+ */
+void GpgME::GpgContext::fetch_keys() {
+
+ gpgme_error_t gpgmeError;
+
+ gpgme_key_t key;
+
+ qDebug() << "Clear List and Map";
+
+ mKeyList.clear();
+ mKeyMap.clear();
+
+ auto &keys = mKeyList;
+ auto &keys_map = mKeyMap;
+
+ qDebug() << "Set Key Listing Mode";
+
+ gpgmeError = gpgme_set_keylist_mode(mCtx,
+ GPGME_KEYLIST_MODE_LOCAL
+ | GPGME_KEYLIST_MODE_WITH_SECRET
+ | GPGME_KEYLIST_MODE_SIGS
+ | GPGME_KEYLIST_MODE_SIG_NOTATIONS
+ | GPGME_KEYLIST_MODE_WITH_TOFU);
+ if (gpg_err_code(gpgmeError) != GPG_ERR_NO_ERROR) {
+ checkErr(gpgmeError);
+ return;
+ }
+
+ qDebug() << "Operate KeyList Start";
+
+ gpgmeError = gpgme_op_keylist_start(mCtx, nullptr, 0);
+ if (gpg_err_code(gpgmeError) != GPG_ERR_NO_ERROR) {
+ checkErr(gpgmeError);
+ return;
+ }
+
+ qDebug() << "Start Loop";
+
+ while ((gpgmeError = gpgme_op_keylist_next(mCtx, &key)) == GPG_ERR_NO_ERROR) {
+ if (!key->subkeys)
+ continue;
+
+ qDebug() << "Append Key" << key->subkeys->keyid;
+
+ keys.emplace_back(key);
+ keys_map.insert(keys.back().id, &keys.back());
+ gpgme_key_unref(key);
+ }
+
+
+ if (gpg_err_code(gpgmeError) != GPG_ERR_EOF) {
+ checkErr(gpgmeError);
+ return;
+ }
+
+ gpgmeError = gpgme_op_keylist_end(mCtx);
+ if (gpg_err_code(gpgmeError) != GPG_ERR_NO_ERROR) {
+ checkErr(gpgmeError);
+ return;
+ }
+
+ qDebug() << "Operate KeyList End";
+
+ mKeyList = keys;
+}
+
+/**
+ * Delete keys
+ * @param uidList key ids
+ */
+void GpgME::GpgContext::deleteKeys(QStringList *uidList) {
+
+ gpgme_error_t error;
+ gpgme_key_t key;
+
+ for (const auto &tmp : *uidList) {
+
+ error = gpgme_op_keylist_start(mCtx, tmp.toUtf8().constData(), 0);
+ if (error != GPG_ERR_NO_ERROR) {
+ checkErr(error);
+ continue;
+ }
+
+ error = gpgme_op_keylist_next(mCtx, &key);
+ if (error != GPG_ERR_NO_ERROR) {
+ checkErr(error);
+ continue;
+ }
+
+ error = gpgme_op_keylist_end(mCtx);
+ if (error != GPG_ERR_NO_ERROR) {
+ checkErr(error);
+ continue;
+ }
+
+ error = gpgme_op_delete(mCtx, key, 1);
+ if (error != GPG_ERR_NO_ERROR) {
+ checkErr(error);
+ continue;
+ }
+
+ }
+ emit signalKeyDBChanged();
+}
+
+/**
+ * Export keys
+ * @param keys keys used
+ * @param outBuffer output byte array
+ * @return if success
+ */
+bool GpgME::GpgContext::exportKeys(const QVector<GpgKey> &keys, QByteArray &outBuffer) {
+ gpgme_data_t data_out = nullptr;
+ outBuffer.resize(0);
+
+ if (keys.empty()) {
+ QMessageBox::critical(nullptr, "Export Keys Error", "No Keys Selected");
+ return false;
+ }
+
+ for (const auto &key : keys) {
+ err = gpgme_data_new(&data_out);
+ checkErr(err);
+
+ err = gpgme_op_export(mCtx, key.id.toUtf8().constData(), 0, data_out);
+ checkErr(err);
+
+ gpgme_data_seek(data_out, 0, SEEK_END);
+
+ err = readToBuffer(data_out, &outBuffer);
+ checkErr(err);
+ gpgme_data_release(data_out);
+ }
+
+ return true;
+}
+
+/**
+ * Set the expire date and time of a key pair(actually the master key) or subkey
+ * @param key target key pair
+ * @param subkey null if master key
+ * @param expires date and time
+ * @return if successful
+ */
+bool GpgME::GpgContext::setExpire(const GpgKey &key, const GpgSubKey *subkey, QDateTime *expires) {
+ unsigned long expires_time = 0;
+ if (expires != nullptr) {
+ qDebug() << "Expire Datetime" << expires->toString();
+ expires_time = QDateTime::currentDateTime().secsTo(*expires);
+ }
+
+ const char *subfprs = nullptr;
+
+ if (subkey != nullptr) subfprs = subkey->fpr.toUtf8().constData();
+
+ auto gpgmeError = gpgme_op_setexpire(mCtx, key.key_refer,
+ expires_time, subfprs, 0);
+ if (gpgmeError == GPG_ERR_NO_ERROR) {
+ emit signalKeyUpdated(key.id);
+ return true;
+ } else {
+ checkErr(gpgmeError);
+ return false;
+ }
+}
+
+/**
+ * Export the secret key of a key pair(including subkeys)
+ * @param key target key pair
+ * @param outBuffer output byte array
+ * @return if successful
+ */
+bool GpgME::GpgContext::exportSecretKey(const GpgKey &key, QByteArray *outBuffer) {
+ qDebug() << "Export Secret Key" << key.id;
+ gpgme_key_t target_key[2] = {
+ key.key_refer,
+ nullptr
+ };
+
+ gpgme_data_t dataOut;
+ gpgme_data_new(&dataOut);
+
+ // export private key to outBuffer
+ gpgme_error_t error = gpgme_op_export_keys(mCtx, target_key, GPGME_EXPORT_MODE_SECRET, dataOut);
+
+ if (gpgme_err_code(error) != GPG_ERR_NO_ERROR) {
+ checkErr(error);
+ gpgme_data_release(dataOut);
+ return false;
+ }
+
+ readToBuffer(dataOut, outBuffer);
+ gpgme_data_release(dataOut);
+ return true;
+}
+
+/**
+ * Sign a key pair(actually a certain uid)
+ * @param target target key pair
+ * @param uid target
+ * @param expires expire date and time of the signature
+ * @return if successful
+ */
+bool GpgME::GpgContext::signKey(const GpgKey &target, const QVector<GpgKey> &keys, const QString &uid,
+ const QDateTime *expires) {
+
+ setSigners(keys, mCtx);
+
+ unsigned int flags = 0;
+
+ unsigned int expires_time_t = 0;
+ if (expires == nullptr) flags |= GPGME_KEYSIGN_NOEXPIRE;
+ else expires_time_t = QDateTime::currentDateTime().secsTo(*expires);
+
+ auto gpgmeError =
+ gpgme_op_keysign(mCtx, target.key_refer, uid.toUtf8().constData(), expires_time_t, flags);
+
+ if (gpgmeError == GPG_ERR_NO_ERROR) {
+ emit signalKeyUpdated(target.id);
+ return true;
+ } else {
+ checkErr(gpgmeError);
+ return false;
+ }
+}
+
+/**
+ * Generate revoke cert of a key pair
+ * @param key target key pair
+ * @param outputFileName out file name(path)
+ * @return the process doing this job
+ */
+void GpgME::GpgContext::generateRevokeCert(const GpgKey &key, const QString &outputFileName) {
+ executeGpgCommand({
+ "--command-fd",
+ "0",
+ "--status-fd",
+ "1",
+ //"--no-tty",
+ "-o",
+ outputFileName,
+ "--gen-revoke",
+ key.fpr
+ },
+ [](QProcess *proc) -> void {
+ qDebug() << "Function Called" << proc;
+ // Code From Gpg4Win
+ while (proc->canReadLine()) {
+ const QString line = QString::fromUtf8(proc->readLine()).trimmed();
+ if (line == QLatin1String("[GNUPG:] GET_BOOL gen_revoke.okay")) {
+ proc->write("y\n");
+ } else if (line == QLatin1String(
+ "[GNUPG:] GET_LINE ask_revocation_reason.code")) {
+ proc->write("0\n");
+ } else if (line == QLatin1String(
+ "[GNUPG:] GET_LINE ask_revocation_reason.text")) {
+ proc->write("\n");
+ } else if (line == QLatin1String(
+ "[GNUPG:] GET_BOOL openfile.overwrite.okay")) {
+ // We asked before
+ proc->write("y\n");
+ } else if (line == QLatin1String(
+ "[GNUPG:] GET_BOOL ask_revocation_reason.okay")) {
+ proc->write("y\n");
+ }
+ }
+ // Code From Gpg4Win
+ }
+ );
+}
diff --git a/src/gpg/gpg_context/GpgContextSubkeyOpera.cpp b/src/gpg/gpg_context/GpgContextSubkeyOpera.cpp
new file mode 100644
index 00000000..10243f5e
--- /dev/null
+++ b/src/gpg/gpg_context/GpgContextSubkeyOpera.cpp
@@ -0,0 +1,61 @@
+/**
+ * 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.
+ *
+ * Foobar 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 Foobar. If not, see <https://www.gnu.org/licenses/>.
+ *
+ * The initial version of the source code is inherited from gpg4usb-team.
+ * Their source code version also complies with GNU General Public License.
+ *
+ * The source code version of this software was modified and released
+ * by Saturneric<[email protected]> starting on May 12, 2021.
+ *
+ */
+
+#include "gpg/GpgContext.h"
+
+/**
+ * Generate a new subkey of a certain key pair
+ * @param key target key pair
+ * @param params opera args
+ * @return error info
+ */
+gpgme_error_t GpgME::GpgContext::generateSubkey(const GpgKey &key, GenKeyInfo *params) {
+
+ if (!params->isSubKey()) return GPG_ERR_CANCELED;
+
+ auto algo_utf8 = (params->getAlgo() + params->getKeySizeStr()).toUtf8();
+ const char *algo = algo_utf8.constData();
+ unsigned long expires = QDateTime::currentDateTime().secsTo(params->getExpired());
+ unsigned int flags = 0;
+
+ if (!params->isSubKey()) flags |= GPGME_CREATE_CERT;
+ if (params->isAllowEncryption()) flags |= GPGME_CREATE_ENCR;
+ if (params->isAllowSigning()) flags |= GPGME_CREATE_SIGN;
+ if (params->isAllowAuthentication()) flags |= GPGME_CREATE_AUTH;
+ if (params->isNonExpired()) flags |= GPGME_CREATE_NOEXPIRE;
+
+ flags |= GPGME_CREATE_NOPASSWD;
+
+
+ auto gpgmeError = gpgme_op_createsubkey(mCtx, key.key_refer,
+ algo, 0, expires, flags);
+ if (gpgme_err_code(gpgmeError) == GPG_ERR_NO_ERROR) {
+ emit signalKeyUpdated(key.id);
+ return gpgmeError;
+ } else {
+ checkErr(gpgmeError);
+ return gpgmeError;
+ }
+}
+
diff --git a/src/gpg/gpg_context/GpgContextUIDOpera.cpp b/src/gpg/gpg_context/GpgContextUIDOpera.cpp
new file mode 100644
index 00000000..b96f5f8f
--- /dev/null
+++ b/src/gpg/gpg_context/GpgContextUIDOpera.cpp
@@ -0,0 +1,80 @@
+/**
+ * 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.
+ *
+ * Foobar 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 Foobar. If not, see <https://www.gnu.org/licenses/>.
+ *
+ * The initial version of the source code is inherited from gpg4usb-team.
+ * Their source code version also complies with GNU General Public License.
+ *
+ * The source code version of this software was modified and released
+ * by Saturneric<[email protected]> starting on May 12, 2021.
+ *
+ */
+
+#include "gpg/GpgContext.h"
+
+/**
+ * create a new uid in certain key pair
+ * @param key target key pair
+ * @param uid uid args
+ * @return if successful
+ */
+bool GpgME::GpgContext::addUID(const GpgKey &key, const GpgUID &uid) {
+ QString userid = QString("%1 (%3) <%2>").arg(uid.name, uid.email, uid.comment);
+ auto gpgmeError = gpgme_op_adduid(mCtx, key.key_refer, userid.toUtf8().constData(), 0);
+ if (gpgmeError == GPG_ERR_NO_ERROR) {
+ emit signalKeyUpdated(key.id);
+ return true;
+ } else {
+ checkErr(gpgmeError);
+ return false;
+ }
+
+}
+
+/**
+ * Revoke(Delete) UID from certain key pair
+ * @param key target key pair
+ * @param uid target uid
+ * @return if successful
+ */
+bool GpgME::GpgContext::revUID(const GpgKey &key, const GpgUID &uid) {
+ auto gpgmeError = gpgme_op_revuid(mCtx, key.key_refer, uid.uid.toUtf8().constData(), 0);
+ if (gpgmeError == GPG_ERR_NO_ERROR) {
+ emit signalKeyUpdated(key.id);
+ return true;
+ } else {
+ checkErr(gpgmeError);
+ return false;
+ }
+}
+
+/**
+ * Set one of a uid of a key pair as primary
+ * @param key target key pair
+ * @param uid target uid
+ * @return if successful
+ */
+bool GpgME::GpgContext::setPrimaryUID(const GpgKey &key, const GpgUID &uid) {
+ auto gpgmeError = gpgme_op_set_uid_flag(mCtx, key.key_refer,
+ uid.uid.toUtf8().constData(), "primary", nullptr);
+ if (gpgmeError == GPG_ERR_NO_ERROR) {
+ emit signalKeyUpdated(key.id);
+ return true;
+ } else {
+ checkErr(gpgmeError);
+ return false;
+ }
+}
+
diff --git a/src/gpg/result_analyse/DecryptResultAnalyse.cpp b/src/gpg/result_analyse/DecryptResultAnalyse.cpp
index 7eda4027..b4d0b14f 100644
--- a/src/gpg/result_analyse/DecryptResultAnalyse.cpp
+++ b/src/gpg/result_analyse/DecryptResultAnalyse.cpp
@@ -1,59 +1,86 @@
-//
-// Created by eric on 2021/6/9.
-//
+/**
+ * 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.
+ *
+ * Foobar 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 Foobar. If not, see <https://www.gnu.org/licenses/>.
+ *
+ * The initial version of the source code is inherited from gpg4usb-team.
+ * Their source code version also complies with GNU General Public License.
+ *
+ * The source code version of this software was modified and released
+ * by Saturneric<[email protected]> starting on May 12, 2021.
+ *
+ */
#include "gpg/result_analyse/DecryptResultAnalyse.h"
DecryptResultAnalyse::DecryptResultAnalyse(GpgME::GpgContext *ctx, gpgme_error_t error, gpgme_decrypt_result_t result)
: mCtx(ctx) {
- stream << "Decrypt Report: " << Qt::endl << "-----" << Qt::endl;
+ stream << tr("[#] Decrypt Operation ");
if (gpgme_err_code(error) == GPG_ERR_NO_ERROR) {
- stream << "Status: Success" << Qt::endl;
+ stream << tr("[Success]") << Qt::endl;
} else {
+ stream << tr("[Failed] ") << gpgme_strerror(error) << Qt::endl;
setStatus(-1);
- stream << "Status: " << gpgme_strerror(error) << Qt::endl;
-
- if (result != nullptr && result->unsupported_algorithm != nullptr)
- stream << "Unsupported algo: " << result->unsupported_algorithm << Qt::endl;
+ if (result != nullptr && result->unsupported_algorithm != nullptr) {
+ stream << "------------>" << Qt::endl;
+ stream << tr("Unsupported Algo: ") << result->unsupported_algorithm << Qt::endl;
+ }
}
- if(result != nullptr) {
- if (result->file_name != nullptr)
- stream << "File name: " << result->file_name << Qt::endl;
- stream << Qt::endl;
+ if (result != nullptr && result->recipients != nullptr) {
+ stream << "------------>" << Qt::endl;
+ if (result->file_name != nullptr) {
+ stream << tr("File Name: ") << result->file_name << Qt::endl;
+ stream << Qt::endl;
+ }
auto reci = result->recipients;
if (reci != nullptr)
- stream << "Recipient(s): " << Qt::endl;
+ stream << tr("Recipient(s): ") << Qt::endl;
while (reci != nullptr) {
printReci(stream, reci);
reci = reci->next;
}
+ stream << "<------------" << Qt::endl;
}
- stream << "-----" << Qt::endl << Qt::endl;
+ stream << Qt::endl;
}
bool DecryptResultAnalyse::printReci(QTextStream &stream, gpgme_recipient_t reci) {
bool keyFound = true;
- stream << QApplication::tr(">Recipient: ");
+ stream << QApplication::tr(" {>} Recipient: ");
- try {
- auto key = mCtx->getKeyById(reci->keyid);
+ auto key = mCtx->getKeyById(reci->keyid);
+ if(key.good) {
stream << key.name;
if (!key.email.isEmpty()) {
stream << "<" << key.email << ">";
}
- } catch(std::runtime_error &ignored) {
+ } else {
stream << "<Unknown>";
setStatus(0);
keyFound = false;
}
+
stream << Qt::endl;
- stream << "Public algo: " << gpgme_pubkey_algo_name(reci->pubkey_algo) << Qt::endl << Qt::endl;
+ stream << tr(" Keu ID: ") << reci->keyid << Qt::endl;
+ stream << tr(" Public Algo: ") << gpgme_pubkey_algo_name(reci->pubkey_algo) << Qt::endl;
+
return keyFound;
}
diff --git a/src/gpg/result_analyse/EncryptResultAnalyse.cpp b/src/gpg/result_analyse/EncryptResultAnalyse.cpp
index dfcad1ac..1ba685c9 100644
--- a/src/gpg/result_analyse/EncryptResultAnalyse.cpp
+++ b/src/gpg/result_analyse/EncryptResultAnalyse.cpp
@@ -1,33 +1,58 @@
-//
-// Created by eric on 2021/6/9.
-//
+/**
+ * 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.
+ *
+ * Foobar 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 Foobar. If not, see <https://www.gnu.org/licenses/>.
+ *
+ * The initial version of the source code is inherited from gpg4usb-team.
+ * Their source code version also complies with GNU General Public License.
+ *
+ * The source code version of this software was modified and released
+ * by Saturneric<[email protected]> starting on May 12, 2021.
+ *
+ */
#include "gpg/result_analyse/EncryptResultAnalyse.h"
EncryptResultAnalyse::EncryptResultAnalyse(gpgme_error_t error, gpgme_encrypt_result_t result) {
- stream << "# Encrypt Report: " << Qt::endl << "-----" << Qt::endl;
+ qDebug() << "Start Encrypt Result Analyse";
- if(gpgme_err_code(error) == GPG_ERR_NO_ERROR) {
- stream << "Status: Encrypt Success" << Qt::endl;
- }
+ stream << "[#] Encrypt Operation ";
+
+ if(gpgme_err_code(error) == GPG_ERR_NO_ERROR)
+ stream << "[Success]" << Qt::endl;
else {
- stream << "Status:" << gpgme_strerror(error) << Qt::endl;
+ stream << "[Failed] " << gpgme_strerror(error) << Qt::endl;
setStatus(-1);
+ }
+
+ if(!~status) {
+ stream << "------------>" << Qt::endl;
if (result != nullptr) {
- stream << "Invalid Recipients: " << Qt::endl;
+ stream << tr("Invalid Recipients: ") << Qt::endl;
auto inv_reci = result->invalid_recipients;
while (inv_reci != nullptr) {
- stream << "Fingerprint: " << inv_reci->fpr << Qt::endl;
- stream << "Reason: " << gpgme_strerror(inv_reci->reason) << Qt::endl;
+ stream << tr("Fingerprint: ") << inv_reci->fpr << Qt::endl;
+ stream << tr("Reason: ") << gpgme_strerror(inv_reci->reason) << Qt::endl;
stream << Qt::endl;
inv_reci = inv_reci->next;
}
}
+ stream << "<------------" << Qt::endl;
}
- stream << "-----" << Qt::endl;
stream << Qt::endl;
}
diff --git a/src/gpg/result_analyse/ResultAnalyse.cpp b/src/gpg/result_analyse/ResultAnalyse.cpp
index 960c24cd..7186d21a 100644
--- a/src/gpg/result_analyse/ResultAnalyse.cpp
+++ b/src/gpg/result_analyse/ResultAnalyse.cpp
@@ -1,6 +1,26 @@
-//
-// Created by eric on 2021/6/8.
-//
+/**
+ * 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.
+ *
+ * Foobar 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 Foobar. If not, see <https://www.gnu.org/licenses/>.
+ *
+ * The initial version of the source code is inherited from gpg4usb-team.
+ * Their source code version also complies with GNU General Public License.
+ *
+ * The source code version of this software was modified and released
+ * by Saturneric<[email protected]> starting on May 12, 2021.
+ *
+ */
#include "gpg/result_analyse/ResultAnalyse.h"
diff --git a/src/gpg/result_analyse/SignResultAnalyse.cpp b/src/gpg/result_analyse/SignResultAnalyse.cpp
index fac598d5..10d76678 100644
--- a/src/gpg/result_analyse/SignResultAnalyse.cpp
+++ b/src/gpg/result_analyse/SignResultAnalyse.cpp
@@ -24,58 +24,73 @@
#include "gpg/result_analyse/SignResultAnalyse.h"
-SignResultAnalyse::SignResultAnalyse(gpgme_error_t error, gpgme_sign_result_t result) {
+SignResultAnalyse::SignResultAnalyse(GpgME::GpgContext *ctx, gpgme_error_t error, gpgme_sign_result_t result) {
- stream << "# Sign Report: " << Qt::endl
- << "-----" << Qt::endl;
- stream << "Status: " << gpgme_strerror(error) << Qt::endl << Qt::endl;
+ qDebug() << "Start Sign Result Analyse";
- if(gpg_err_code(error) != GPG_ERR_NO_ERROR) {
+ stream << tr("[#] Sign Operation ");
+
+ if (gpgme_err_code(error) == GPG_ERR_NO_ERROR)
+ stream << tr("[Success]") << Qt::endl;
+ else {
+ stream << tr("[Failed] ") << gpgme_strerror(error) << Qt::endl;
setStatus(-1);
}
- if(result != nullptr) {
+ if (result != nullptr && (result->signatures != nullptr || result->invalid_signers != nullptr)) {
+ qDebug() << "Sign Result Analyse Getting Result";
+ stream << "------------>" << Qt::endl;
auto new_sign = result->signatures;
while (new_sign != nullptr) {
- stream << "> A New Signature: " << Qt::endl;
+ stream << tr("[>] New Signature: ") << Qt::endl;
+
+ qDebug() << "Signers Fingerprint: " << new_sign->fpr;
- stream << "Sign mode: ";
+ stream << tr(" Sign Mode: ");
if (new_sign->type == GPGME_SIG_MODE_NORMAL)
- stream << "Normal";
+ stream << tr("Normal");
else if (new_sign->type == GPGME_SIG_MODE_CLEAR)
- stream << "Clear";
+ stream << tr("Clear");
else if (new_sign->type == GPGME_SIG_MODE_DETACH)
- stream << "Detach";
+ stream << tr("Detach");
stream << Qt::endl;
- stream << "Public key algo: " << gpgme_pubkey_algo_name(new_sign->pubkey_algo) << Qt::endl;
- stream << "Hash algo: " << gpgme_hash_algo_name(new_sign->hash_algo) << Qt::endl;
- stream << "Date of signature: " << QDateTime::fromTime_t(new_sign->timestamp).toString() << Qt::endl;
+ GpgKey singerKey = ctx->getKeyByFpr(new_sign->fpr);
+ if(singerKey.good) {
+ stream << tr(" Signer: ") << singerKey.uids.first().uid << Qt::endl;
+ } else {
+ stream << tr(" Signer: ") << tr("<unknown>") << Qt::endl;
+ }
+ stream << tr(" Public Key Algo: ") << gpgme_pubkey_algo_name(new_sign->pubkey_algo) << Qt::endl;
+ stream << tr(" Hash Algo: ") << gpgme_hash_algo_name(new_sign->hash_algo) << Qt::endl;
+ stream << tr(" Date & Time: ") << QDateTime::fromTime_t(new_sign->timestamp).toString() << Qt::endl;
stream << Qt::endl;
new_sign = new_sign->next;
}
+ qDebug() << "Sign Result Analyse Getting Invalid Signer";
+
auto invalid_signer = result->invalid_signers;
if (invalid_signer != nullptr)
- stream << "Invalid Signers: " << Qt::endl;
+ stream << tr("Invalid Signers: ") << Qt::endl;
while (invalid_signer != nullptr) {
setStatus(0);
- stream << "Fingerprint: " << invalid_signer->fpr << Qt::endl;
- stream << "Reason: " << gpgme_strerror(invalid_signer->reason) << Qt::endl;
+ stream << tr("[>] Signer: ") << Qt::endl;
+ stream << tr(" Fingerprint: ") << invalid_signer->fpr << Qt::endl;
+ stream << tr(" Reason: ") << gpgme_strerror(invalid_signer->reason) << Qt::endl;
stream << Qt::endl;
invalid_signer = invalid_signer->next;
}
+ stream << "<------------" << Qt::endl;
}
- stream << "-----" << Qt::endl << Qt::endl;
-
}
diff --git a/src/gpg/result_analyse/VerifyResultAnalyse.cpp b/src/gpg/result_analyse/VerifyResultAnalyse.cpp
index 59c7e3ef..75e07d33 100644
--- a/src/gpg/result_analyse/VerifyResultAnalyse.cpp
+++ b/src/gpg/result_analyse/VerifyResultAnalyse.cpp
@@ -1,6 +1,26 @@
-//
-// Created by eric on 2021/6/7.
-//
+/**
+ * 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.
+ *
+ * Foobar 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 Foobar. If not, see <https://www.gnu.org/licenses/>.
+ *
+ * The initial version of the source code is inherited from gpg4usb-team.
+ * Their source code version also complies with GNU General Public License.
+ *
+ * The source code version of this software was modified and released
+ * by Saturneric<[email protected]> starting on May 12, 2021.
+ *
+ */
#include "GpgFrontend.h"
#include "gpg/result_analyse/VerifyResultAnalyse.h"
@@ -8,23 +28,31 @@
VerifyResultAnalyse::VerifyResultAnalyse(GpgME::GpgContext *ctx, gpgme_error_t error, gpgme_verify_result_t result)
: mCtx(ctx) {
- stream << "# Verify Report: " << Qt::endl << "-----" << Qt::endl;
- stream << "Status: " << gpgme_strerror(error) << Qt::endl;
+ qDebug() << "Verify Result Analyse Started";
- if(result != nullptr) {
+ stream << tr("[#] Verify Operation ");
+ if (gpgme_err_code(error) == GPG_ERR_NO_ERROR)
+ stream << tr("[Success]") << Qt::endl;
+ else {
+ stream << tr("[Failed] ") << gpgme_strerror(error) << Qt::endl;
+ setStatus(-1);
+ }
+
+
+ if (result != nullptr && result->signatures) {
+ stream << "------------>" << Qt::endl;
auto sign = result->signatures;
if (sign == nullptr) {
- stream << "> Not Signature Found" << Qt::endl;
+ stream << "[>] Not Signature Found" << Qt::endl;
setStatus(0);
return;
}
+ stream << "[>] Signed On " << QDateTime::fromTime_t(sign->timestamp).toString() << Qt::endl;
- stream << "> It was Signed ON " << QDateTime::fromTime_t(sign->timestamp).toString() << Qt::endl;
-
- stream << Qt::endl << "> It Contains:" << Qt::endl;
+ stream << Qt::endl << "[>] Signatures:" << Qt::endl;
bool canContinue = true;
@@ -63,13 +91,11 @@ VerifyResultAnalyse::VerifyResultAnalyse(GpgME::GpgContext *ctx, gpgme_error_t e
if (sign->summary & GPGME_SIGSUM_VALID) {
stream << QApplication::tr("Signature Fully Valid.") << Qt::endl;
} else {
- stream << QApplication::tr("Signature NOT Fully Valid.") << Qt::endl;
+ stream << QApplication::tr("Signature Not Fully Valid.") << Qt::endl;
}
if (!(sign->status & GPGME_SIGSUM_KEY_MISSING)) {
- if (!printSigner(stream, sign)) {
- setStatus(0);
- }
+ if (!printSigner(stream, sign)) setStatus(0);
} else {
stream << QApplication::tr("Key is NOT present with ID 0x") << QString(sign->fpr) << Qt::endl;
}
@@ -117,26 +143,26 @@ VerifyResultAnalyse::VerifyResultAnalyse(GpgME::GpgContext *ctx, gpgme_error_t e
stream << Qt::endl;
sign = sign->next;
}
+ stream << "<------------" << Qt::endl;
}
-
- stream << "-----" << Qt::endl;
- stream << Qt::endl;
}
bool VerifyResultAnalyse::printSigner(QTextStream &stream, gpgme_signature_t sign) {
bool keyFound = true;
- stream << QApplication::tr("Signed By: ");
auto key = mCtx->getKeyByFpr(sign->fpr);
- if(!key.good) {
- stream << "<Unknown>";
+
+ key = mCtx->getKeyByFpr(sign->fpr);
+
+ if (!key.good) {
+ stream << tr(" Signed By: ") << tr("<unknown>") << Qt::endl;
setStatus(0);
keyFound = false;
+ } else {
+ stream << tr(" Signed By: ") << key.uids.first().uid << Qt::endl;
}
- stream << key.name;
- if (!key.email.isEmpty()) {
- stream << "<" << key.email << ">";
- }
+ stream << tr(" Public Key Algo: ") << gpgme_pubkey_algo_name(sign->pubkey_algo) << Qt::endl;
+ stream << tr(" Hash Algo: ") << gpgme_hash_algo_name(sign->hash_algo) << Qt::endl;
+ stream << tr(" Date & Time: ") << QDateTime::fromTime_t(sign->timestamp).toString() << Qt::endl;
stream << Qt::endl;
return keyFound;
-
} \ No newline at end of file
diff --git a/src/main.cpp b/src/main.cpp
index ff3b0bb4..1ec264e7 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -43,12 +43,14 @@ int main(int argc, char *argv[]) {
// unicode in source
QTextCodec::setCodecForLocale(QTextCodec::codecForName("utf-8"));
- // css
+#if OS_PLATFORM == WINDOWS
+ // load css file
QFile file(RESOURCE_DIR(qApp->applicationDirPath()) + "/css/default.qss");
file.open(QFile::ReadOnly);
QString styleSheet = QLatin1String(file.readAll());
qApp->setStyleSheet(styleSheet);
file.close();
+#endif
/**
* internationalisation. loop to restart mainwindow
diff --git a/src/server/BaseAPI.cpp b/src/server/BaseAPI.cpp
new file mode 100644
index 00000000..be388df9
--- /dev/null
+++ b/src/server/BaseAPI.cpp
@@ -0,0 +1,70 @@
+/**
+ * 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.
+ *
+ * Foobar 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 Foobar. If not, see <https://www.gnu.org/licenses/>.
+ *
+ * The initial version of the source code is inherited from gpg4usb-team.
+ * Their source code version also complies with GNU General Public License.
+ *
+ * The source code version of this software was modified and released
+ * by Saturneric<[email protected]> starting on May 12, 2021.
+ *
+ */
+
+#include "server/BaseAPI.h"
+#include "rapidjson/writer.h"
+
+BaseAPI::BaseAPI(ComUtils::ServiceType serviceType) : utils(new ComUtils(nullptr)),
+ reqUrl(utils->getUrl(serviceType)), request(reqUrl) {
+ request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
+}
+
+BaseAPI::~BaseAPI() {
+ utils->deleteLater();
+}
+
+QNetworkReply *BaseAPI::send_json_data() {
+ rapidjson::StringBuffer sb;
+ rapidjson::Writer<rapidjson::StringBuffer> writer(sb);
+ document.Accept(writer);
+
+ QByteArray postData(sb.GetString());
+ qDebug() << "postData" << QString::fromUtf8(postData);
+
+ auto reply = utils->getNetworkManager().post(request, postData);
+
+ while (reply->isRunning()) QApplication::processEvents();
+
+ QByteArray replyData = reply->readAll().constData();
+ if (utils->checkServerReply(replyData)) {
+ good = true, deal_reply();
+ }
+
+ return reply;
+}
+
+void BaseAPI::start() {
+ construct_json();
+ send_json_data()->deleteLater();
+}
+
+void BaseAPI::refresh() {
+ document.Clear();
+ utils->clear();
+ good = false;
+}
+
+bool BaseAPI::result() const {
+ return good;
+}
diff --git a/src/server/CMakeLists.txt b/src/server/CMakeLists.txt
new file mode 100644
index 00000000..423e9d1e
--- /dev/null
+++ b/src/server/CMakeLists.txt
@@ -0,0 +1,7 @@
+aux_source_directory(./api SERVER_SOURCE)
+aux_source_directory(. SERVER_SOURCE)
+
+add_library(server STATIC ${SERVER_SOURCE})
+
+target_link_libraries(server
+ Qt5::Network Qt5::Widgets Qt5::Core)
diff --git a/src/server/ComUtils.cpp b/src/server/ComUtils.cpp
new file mode 100644
index 00000000..01be4ea7
--- /dev/null
+++ b/src/server/ComUtils.cpp
@@ -0,0 +1,197 @@
+/**
+ * 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.
+ *
+ * Foobar 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 Foobar. If not, see <https://www.gnu.org/licenses/>.
+ *
+ * The initial version of the source code is inherited from gpg4usb-team.
+ * Their source code version also complies with GNU General Public License.
+ *
+ * The source code version of this software was modified and released
+ * by Saturneric<[email protected]> starting on May 12, 2021.
+ *
+ */
+
+#include "server/ComUtils.h"
+
+/**
+ * check server reply if it can parse into a json object
+ * @param reply reply data in byte array
+ * @return if successful
+ */
+bool ComUtils::checkServerReply(const QByteArray &reply) {
+
+ if(reply.isEmpty()) {
+ QMessageBox::critical(this, tr("Error"), tr("Nothing Reply. Please check the Internet connection."));
+ return false;
+ }
+
+ qDebug() << "Reply" << reply;
+
+ /**
+ * Server Reply Format(Except Timeout)
+ * {
+ * "status": 200,
+ * "msg": "OK",
+ * "timestamp": 1628652783895
+ * "data" : {
+ * ...
+ * }
+ * }
+ */
+
+ // check if reply is a json object
+ if (replyDoc.Parse(reply).HasParseError() || !replyDoc.IsObject()) {
+ QMessageBox::critical(this, tr("Error"), tr("Unknown Error"));
+ return false;
+ }
+
+ // check status(int) and message(string)
+ if (replyDoc.HasMember("status") && replyDoc.HasMember("msg") && replyDoc.HasMember("timestamp") &&
+ replyDoc.HasMember("data")
+ && replyDoc["status"].IsNumber() && replyDoc["msg"].IsString() && replyDoc["timestamp"].IsNumber() &&
+ replyDoc["data"].IsObject()) {
+
+ int status = replyDoc["status"].GetInt();
+ QDateTime time;
+ time.setMSecsSinceEpoch(replyDoc["timestamp"].GetInt64());
+ auto message = replyDoc["msg"].GetString();
+ dataVal = replyDoc["data"].GetObject();
+
+ qDebug() << "Reply Date & Time" << time;
+
+ // check reply timestamp
+ if (time < QDateTime::currentDateTime().addSecs(-10)) {
+ QMessageBox::critical(this, tr("Network Error"), tr("Outdated Reply"));
+ return false;
+ }
+
+ // check status code if successful (200-299)
+ // check data object
+ if (status / 100 == 2) {
+ is_good = true;
+ return true;
+ } else {
+ if (dataVal.HasMember("exceptionMessage") && dataVal["exceptionMessage"].IsString())
+ QMessageBox::critical(this, message, dataVal["exceptionMessage"].GetString());
+ else QMessageBox::critical(this, message, tr("Unknown Reason"));
+ }
+
+ } else QMessageBox::critical(this, tr("Network Error"), tr("Unknown Reply Format"));
+
+ return false;
+}
+
+/**
+ * get value in data
+ * @param key key of value
+ * @return value in string format
+ */
+QString ComUtils::getDataValueStr(const QString &key) const {
+ if (is_good) {
+ auto k_byte_array = key.toUtf8();
+ if (dataVal.HasMember(k_byte_array.data())) {
+ return dataVal[k_byte_array.data()].GetString();
+ } else return {};
+ } else return {};
+}
+
+/**
+ * Get eventually url by service type
+ * @param type service which server provides
+ * @return url
+ */
+QString ComUtils::getUrl(ComUtils::ServiceType type) const {
+ auto host = settings.value("general/currentGpgfrontendServer",
+ "service.gpgfrontend.pub").toString();
+
+ auto protocol = QString();
+ // Localhost Debug Server
+ if (host == "localhost") protocol = "http://";
+ else protocol = "https://";
+
+ auto url = protocol + host + ":9049/";
+
+ switch (type) {
+ case GetServiceToken:
+ url += "/user";
+ break;
+ case ShortenCryptText:
+ url += "/text/new";
+ break;
+ case GetFullCryptText:
+ url += "/text/get";
+ break;
+ case UploadPubkey:
+ url += "/key/upload";
+ break;
+ case GetPubkey:
+ url += "/key/get";
+ break;
+ }
+
+ qDebug() << "ComUtils getUrl" << url;
+
+ return url;
+}
+
+bool ComUtils::checkDataValueStr(const QString &key) const {
+ auto key_byte_array_data = key.toUtf8().constData();
+ if (is_good) {
+ return dataVal.HasMember(key_byte_array_data) && dataVal[key_byte_array_data].IsString();
+ } else return false;
+}
+
+bool ComUtils::checkServiceTokenFormat(const QString &uuid) const {
+ return re_uuid.match(uuid).hasMatch();
+}
+
+QByteArray ComUtils::getSignStringBase64(GpgME::GpgContext *ctx, const QString &str, const GpgKey &key) {
+ QVector<GpgKey> keys{key};
+ QByteArray outSignText;
+ auto signData = str.toUtf8();
+
+ // The use of multi-threading brings an improvement in UI smoothness
+ gpgme_error_t error;
+ auto thread = QThread::create([&]() {
+ error = ctx->sign(keys, signData, &outSignText, GPGME_SIG_MODE_NORMAL, nullptr, false);
+ });
+ thread->start();
+ while (thread->isRunning()) QApplication::processEvents();
+ thread->deleteLater();
+
+ return outSignText.toBase64();
+}
+
+const rapidjson::Value &ComUtils::getDataValue(const QString &key) const {
+ if (is_good) {
+ auto k_byte_array = key.toUtf8();
+ if (dataVal.HasMember(k_byte_array.data())) {
+ return dataVal[k_byte_array.data()];
+ }
+ }
+ throw std::runtime_error("Inner Error");
+}
+
+bool ComUtils::checkDataValue(const QString &key) const{
+ auto key_byte_array_data = key.toUtf8().constData();
+ if (is_good) {
+ return dataVal.HasMember(key_byte_array_data);
+ } else return false;
+}
+
+void ComUtils::clear() {
+ this->dataVal.Clear();
+ this->replyDoc.Clear();
+ is_good = false;
+} \ No newline at end of file
diff --git a/src/server/api/PubkeyGetter.cpp b/src/server/api/PubkeyGetter.cpp
new file mode 100644
index 00000000..2ba55d11
--- /dev/null
+++ b/src/server/api/PubkeyGetter.cpp
@@ -0,0 +1,96 @@
+/**
+ * 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.
+ *
+ * Foobar 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 Foobar. If not, see <https://www.gnu.org/licenses/>.
+ *
+ * The initial version of the source code is inherited from gpg4usb-team.
+ * Their source code version also complies with GNU General Public License.
+ *
+ * The source code version of this software was modified and released
+ * by Saturneric<[email protected]> starting on May 12, 2021.
+ *
+ */
+
+#include "server/api/PubkeyGetter.h"
+
+PubkeyGetter::PubkeyGetter(GpgME::GpgContext *ctx, const QVector<QString> &fprs) : BaseAPI(ComUtils::GetPubkey),
+ mCtx(ctx), mFprs(fprs) {
+}
+
+void PubkeyGetter::construct_json() {
+ document.SetArray();
+ QStringList keyIds;
+
+ rapidjson::Document::AllocatorType &allocator = document.GetAllocator();
+
+ for (const auto &fprStr : mFprs) {
+ rapidjson::Value fpr;
+
+ auto fprByteArray = fprStr.toUtf8();
+ fpr.SetString(fprByteArray.constData(), fprByteArray.count());
+
+ document.PushBack(fpr, allocator);
+ keyIds.clear();
+ }
+}
+
+void PubkeyGetter::deal_reply() {
+
+ const auto &utils = getUtils();
+
+ /**
+ * {
+ * "pubkeys" : [
+ * {
+ * "publicKey" : ...,
+ * "fpr" : ...,
+ * "sha" : ...
+ * },
+ * ...
+ * ]
+ * }
+ */
+
+ if (!utils.checkDataValue("pubkeys")) {
+ QMessageBox::critical(nullptr, tr("Error"),
+ tr("The communication content with the server does not meet the requirements"));
+ } else {
+ auto &pubkeys = utils.getDataValue("pubkeys");
+ qDebug() << "Pubkey Getter" << pubkeys.IsArray() << pubkeys.GetArray().Size();
+ if (pubkeys.IsArray()) {
+ for (const auto &pubkey : pubkeys.GetArray()) {
+ if (pubkey.IsObject()
+ && pubkey.HasMember("publicKey") && pubkey.HasMember("fpr") && pubkey.HasMember("sha")
+ && pubkey["publicKey"].IsString() && pubkey["fpr"].IsString() && pubkey["sha"].IsString()) {
+
+ auto pubkeyData = QString(pubkey["publicKey"].GetString());
+
+ QCryptographicHash shaGen(QCryptographicHash::Sha256);
+ shaGen.addData(pubkeyData.toUtf8());
+
+ if (shaGen.result().toHex() == pubkey["sha"].GetString()) {
+ mCtx->importKey(pubkeyData.toUtf8());
+ }
+
+ }
+ }
+
+ } else {
+ QMessageBox::critical(nullptr, tr("Error"),
+ tr("The communication content with the server does not meet the requirements"));
+ }
+ }
+}
+
+
diff --git a/src/server/api/PubkeyUploader.cpp b/src/server/api/PubkeyUploader.cpp
new file mode 100644
index 00000000..c6101c65
--- /dev/null
+++ b/src/server/api/PubkeyUploader.cpp
@@ -0,0 +1,106 @@
+/**
+ * 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.
+ *
+ * Foobar 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 Foobar. If not, see <https://www.gnu.org/licenses/>.
+ *
+ * The initial version of the source code is inherited from gpg4usb-team.
+ * Their source code version also complies with GNU General Public License.
+ *
+ * The source code version of this software was modified and released
+ * by Saturneric<[email protected]> starting on May 12, 2021.
+ *
+ */
+
+#include "server/api/PubkeyUploader.h"
+
+PubkeyUploader::PubkeyUploader(GpgME::GpgContext *ctx, const QVector<GpgKey> &keys) : BaseAPI(ComUtils::UploadPubkey),
+ mCtx(ctx),
+ mKeys(keys) {
+}
+
+void PubkeyUploader::construct_json() {
+ document.SetArray();
+ QStringList keyIds;
+ QCryptographicHash shaGen(QCryptographicHash::Sha256);
+
+ auto &allocator = document.GetAllocator();
+
+ QVector<QByteArray> keysData;
+ for (const auto &key : mKeys) {
+ QByteArray keyDataBuf;
+ keyIds << key.id;
+
+ // The use of multi-threading brings an improvement in UI smoothness
+ gpgme_error_t error;
+ auto thread = QThread::create([&]() {
+ error = mCtx->exportKeys(&keyIds, &keyDataBuf);
+ });
+ thread->start();
+ while (thread->isRunning()) QApplication::processEvents();
+ thread->deleteLater();
+ keysData.push_back(keyDataBuf);
+ keyIds.clear();
+ }
+
+ int index = 0;
+ for (const auto &keyData : keysData) {
+ rapidjson::Value publicKeyObj, pubkey, sha, signedFpr;
+
+ shaGen.addData(keyData);
+ auto shaStr = shaGen.result().toHex();
+ shaGen.reset();
+
+ auto signFprStr = ComUtils::getSignStringBase64(mCtx, mKeys[index].fpr, mKeys[index]);
+ qDebug() << "signFprStr" << signFprStr;
+
+ pubkey.SetString(keyData.data(), keyData.count(), allocator);
+ sha.SetString(shaStr.data(), shaStr.count(), allocator);
+ signedFpr.SetString(signFprStr.data(), signFprStr.count(), allocator);
+
+ publicKeyObj.SetObject();
+ publicKeyObj.AddMember("publicKey", pubkey, allocator);
+ publicKeyObj.AddMember("sha", sha, allocator);
+ publicKeyObj.AddMember("signedFpr", signedFpr, allocator);
+
+ document.PushBack(publicKeyObj, allocator);
+ index++;
+ }
+}
+
+void PubkeyUploader::deal_reply() {
+
+ const auto &utils = getUtils();
+
+ /**
+ * {
+ * "strings" : [
+ * "...",
+ * "..."
+ * ]
+ * }
+ */
+
+ if (!utils.checkDataValue("strings")) {
+ QMessageBox::critical(nullptr, tr("Error"),
+ tr("The communication content with the server does not meet the requirements"));
+ } else {
+ auto &strings = utils.getDataValue("strings");
+ qDebug() << "Pubkey Uploader" << strings.IsArray() << strings.GetArray().Size();
+ if (strings.IsArray() && strings.GetArray().Size() == mKeys.size()) {
+ good = true;
+ } else {
+ good = false;
+ }
+ }
+}
diff --git a/src/ui/CMakeLists.txt b/src/ui/CMakeLists.txt
index 618b5d28..b6552227 100644
--- a/src/ui/CMakeLists.txt
+++ b/src/ui/CMakeLists.txt
@@ -4,6 +4,7 @@ aux_source_directory(./widgets UI_SOURCE)
aux_source_directory(./keygen UI_SOURCE)
aux_source_directory(./main_window UI_SOURCE)
aux_source_directory(./help UI_SOURCE)
+aux_source_directory(./settings UI_SOURCE)
add_library(gpgfrontend-ui STATIC ${UI_SOURCE})
diff --git a/src/ui/FileEncryptionDialog.cpp b/src/ui/FileEncryptionDialog.cpp
index e92dfc90..23ec0b2a 100755
--- a/src/ui/FileEncryptionDialog.cpp
+++ b/src/ui/FileEncryptionDialog.cpp
@@ -229,7 +229,7 @@ void FileEncryptionDialog::slotExecuteAction() {
if (mAction == Sign) {
qDebug() << "Action Sign";
- gpgme_error_t err = mCtx->sign(keys, inBuffer, outBuffer, true);
+ gpgme_error_t err = mCtx->sign(keys, inBuffer, outBuffer, GPGME_SIG_MODE_DETACH, nullptr);
if (gpgme_err_code(err) != GPG_ERR_NO_ERROR) {
qDebug() << "Error" << gpgme_strerror(err);
QMessageBox::warning(this, tr("Error"),
diff --git a/src/ui/KeyMgmt.cpp b/src/ui/KeyMgmt.cpp
index ce5343bf..77f3b760 100755
--- a/src/ui/KeyMgmt.cpp
+++ b/src/ui/KeyMgmt.cpp
@@ -26,9 +26,9 @@
#include <utility>
-KeyMgmt::KeyMgmt(GpgME::GpgContext *ctx, QWidget *parent ) :
- QMainWindow(parent), appPath(qApp->applicationDirPath()), settings(RESOURCE_DIR(appPath) + "/conf/gpgfrontend.ini", QSettings::IniFormat)
-{
+KeyMgmt::KeyMgmt(GpgME::GpgContext *ctx, QWidget *parent) :
+ QMainWindow(parent), appPath(qApp->applicationDirPath()),
+ settings(RESOURCE_DIR(appPath) + "/conf/gpgfrontend.ini", QSettings::IniFormat) {
mCtx = ctx;
/* the list of Keys available*/
@@ -36,14 +36,14 @@ KeyMgmt::KeyMgmt(GpgME::GpgContext *ctx, QWidget *parent ) :
mKeyList->setColumnWidth(2, 250);
mKeyList->setColumnWidth(3, 250);
setCentralWidget(mKeyList);
- mKeyList->setDoubleClickedAction([this] (const GpgKey &key, QWidget *parent) {
+ mKeyList->setDoubleClickedAction([this](const GpgKey &key, QWidget *parent) {
new KeyDetailsDialog(mCtx, key, parent);
});
createActions();
createMenus();
createToolBars();
- connect(this,SIGNAL(signalStatusBarChanged(QString)),this->parent(),SLOT(slotSetStatusBarText(QString)));
+ connect(this, SIGNAL(signalStatusBarChanged(QString)), this->parent(), SLOT(slotSetStatusBarText(QString)));
/* Restore the iconstyle */
this->settings.sync();
@@ -51,7 +51,8 @@ KeyMgmt::KeyMgmt(GpgME::GpgContext *ctx, QWidget *parent ) :
QSize iconSize = settings.value("toolbar/iconsize", QSize(24, 24)).toSize();
settings.setValue("toolbar/iconsize", iconSize);
- Qt::ToolButtonStyle buttonStyle = static_cast<Qt::ToolButtonStyle>(settings.value("toolbar/iconstyle", Qt::ToolButtonTextUnderIcon).toUInt());
+ Qt::ToolButtonStyle buttonStyle = static_cast<Qt::ToolButtonStyle>(settings.value("toolbar/iconstyle",
+ Qt::ToolButtonTextUnderIcon).toUInt());
this->setIconSize(iconSize);
this->setToolButtonStyle(buttonStyle);
@@ -83,8 +84,7 @@ KeyMgmt::KeyMgmt(GpgME::GpgContext *ctx, QWidget *parent ) :
mKeyList->addMenuAction(showKeyDetailsAct);
}
-void KeyMgmt::createActions()
-{
+void KeyMgmt::createActions() {
openKeyFileAct = new QAction(tr("&Open"), this);
openKeyFileAct->setShortcut(tr("Ctrl+O"));
openKeyFileAct->setToolTip(tr("Open Key File"));
@@ -147,8 +147,7 @@ void KeyMgmt::createActions()
connect(showKeyDetailsAct, SIGNAL(triggered()), this, SLOT(slotShowKeyDetails()));
}
-void KeyMgmt::createMenus()
-{
+void KeyMgmt::createMenus() {
fileMenu = menuBar()->addMenu(tr("&File"));
fileMenu->addAction(openKeyFileAct);
fileMenu->addAction(closeAct);
@@ -168,13 +167,12 @@ void KeyMgmt::createMenus()
keyMenu->addAction(deleteCheckedKeysAct);
}
-void KeyMgmt::createToolBars()
-{
+void KeyMgmt::createToolBars() {
QToolBar *keyToolBar = addToolBar(tr("Key"));
keyToolBar->setObjectName("keytoolbar");
// add button with popup menu for import
- auto* generateToolButton = new QToolButton(this);
+ auto *generateToolButton = new QToolButton(this);
generateToolButton->setMenu(generateKeyMenu);
generateToolButton->setPopupMode(QToolButton::InstantPopup);
generateToolButton->setIcon(QIcon(":key_generate.png"));
@@ -184,7 +182,7 @@ void KeyMgmt::createToolBars()
keyToolBar->addWidget(generateToolButton);
// add button with popup menu for import
- auto* toolButton = new QToolButton(this);
+ auto *toolButton = new QToolButton(this);
toolButton->setMenu(importKeyMenu);
toolButton->setPopupMode(QToolButton::InstantPopup);
toolButton->setIcon(QIcon(":key_import.png"));
@@ -201,17 +199,17 @@ void KeyMgmt::createToolBars()
}
-void KeyMgmt::slotImportKeys(QByteArray inBuffer)
-{
+void KeyMgmt::slotImportKeys(QByteArray inBuffer) {
GpgImportInformation result = mCtx->importKey(std::move(inBuffer));
new KeyImportDetailDialog(mCtx, result, false, this);
}
-void KeyMgmt::slotImportKeyFromFile()
-{
- QString fileName = QFileDialog::getOpenFileName(this, tr("Open Key"), "", tr("Key Files") + " (*.asc *.txt);;"+tr("Keyring files")+" (*.gpg);;All Files (*)");
- if (! fileName.isNull()) {
+void KeyMgmt::slotImportKeyFromFile() {
+ QString fileName = QFileDialog::getOpenFileName(this, tr("Open Key"), "",
+ tr("Key Files") + " (*.asc *.txt);;" + tr("Keyring files") +
+ " (*.gpg);;All Files (*)");
+ if (!fileName.isNull()) {
QFile file;
file.setFileName(fileName);
if (!file.open(QIODevice::ReadOnly)) {
@@ -224,30 +222,25 @@ void KeyMgmt::slotImportKeyFromFile()
}
}
-void KeyMgmt::slotImportKeyFromKeyServer()
-{
+void KeyMgmt::slotImportKeyFromKeyServer() {
importDialog = new KeyServerImportDialog(mCtx, mKeyList, false, this);
importDialog->show();
}
-void KeyMgmt::slotImportKeyFromClipboard()
-{
+void KeyMgmt::slotImportKeyFromClipboard() {
QClipboard *cb = QApplication::clipboard();
slotImportKeys(cb->text(QClipboard::Clipboard).toUtf8());
}
-void KeyMgmt::slotDeleteSelectedKeys()
-{
+void KeyMgmt::slotDeleteSelectedKeys() {
deleteKeysWithWarning(mKeyList->getSelected());
}
-void KeyMgmt::slotDeleteCheckedKeys()
-{
+void KeyMgmt::slotDeleteCheckedKeys() {
deleteKeysWithWarning(mKeyList->getChecked());
}
-void KeyMgmt::deleteKeysWithWarning(QStringList *uidList)
-{
+void KeyMgmt::deleteKeysWithWarning(QStringList *uidList) {
/**
* TODO: Different Messages for private/public key, check if
* more than one selected... compare to seahorse "delete-dialog"
@@ -258,7 +251,8 @@ void KeyMgmt::deleteKeysWithWarning(QStringList *uidList)
}
QString keynames;
for (const auto &uid : *uidList) {
- auto &key = mCtx->getKeyById(uid);
+ auto key = mCtx->getKeyById(uid);
+ if (!key.good) continue;
keynames.append(key.name);
keynames.append("<i> &lt;");
keynames.append(key.email);
@@ -266,8 +260,9 @@ void KeyMgmt::deleteKeysWithWarning(QStringList *uidList)
}
int ret = QMessageBox::warning(this, tr("Deleting Keys"),
- "<b>"+tr("Are you sure that you want to delete the following keys?")+"</b><br/><br/>"+keynames+
- +"<br/>"+tr("The action can not be undone."),
+ "<b>" + tr("Are you sure that you want to delete the following keys?") +
+ "</b><br/><br/>" + keynames +
+ +"<br/>" + tr("The action can not be undone."),
QMessageBox::No | QMessageBox::Yes);
if (ret == QMessageBox::Yes) {
@@ -275,28 +270,36 @@ void KeyMgmt::deleteKeysWithWarning(QStringList *uidList)
}
}
-void KeyMgmt::slotShowKeyDetails()
-{
+void KeyMgmt::slotShowKeyDetails() {
if (mKeyList->getSelected()->isEmpty()) {
return;
}
- auto &key = mCtx->getKeyById(mKeyList->getSelected()->first());
+ auto key = mCtx->getKeyById(mKeyList->getSelected()->first());
+
+ if (!key.good) {
+ QMessageBox::critical(nullptr, tr("Error"), tr("Key Not Found."));
+ return;
+ }
new KeyDetailsDialog(mCtx, key);
}
-void KeyMgmt::slotExportKeyToFile()
-{
+void KeyMgmt::slotExportKeyToFile() {
auto *keyArray = new QByteArray();
if (!mCtx->exportKeys(mKeyList->getChecked(), keyArray)) {
delete keyArray;
return;
}
- auto &key = mCtx->getKeyById(mKeyList->getSelected()->first());
- QString fileString = key.name + " " + key.email+ "(" + key.id+ ")_pub.asc";
+ auto key = mCtx->getKeyById(mKeyList->getSelected()->first());
+ if (!key.good) {
+ QMessageBox::critical(nullptr, tr("Error"), tr("Key Not Found."));
+ return;
+ }
+ QString fileString = key.name + " " + key.email + "(" + key.id + ")_pub.asc";
- QString fileName = QFileDialog::getSaveFileName(this, tr("Export Key To File"), fileString, tr("Key Files") + " (*.asc *.txt);;All Files (*)");
+ QString fileName = QFileDialog::getSaveFileName(this, tr("Export Key To File"), fileString,
+ tr("Key Files") + " (*.asc *.txt);;All Files (*)");
QFile file(fileName);
if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) {
delete keyArray;
@@ -309,8 +312,7 @@ void KeyMgmt::slotExportKeyToFile()
emit signalStatusBarChanged(QString(tr("key(s) exported")));
}
-void KeyMgmt::slotExportKeyToClipboard()
-{
+void KeyMgmt::slotExportKeyToClipboard() {
auto *keyArray = new QByteArray();
QClipboard *cb = QApplication::clipboard();
if (!mCtx->exportKeys(mKeyList->getChecked(), keyArray)) {
@@ -320,27 +322,29 @@ void KeyMgmt::slotExportKeyToClipboard()
delete keyArray;
}
-void KeyMgmt::slotGenerateKeyDialog()
-{
- auto *keyGenDialog = new KeyGenDialog(mCtx,this);
+void KeyMgmt::slotGenerateKeyDialog() {
+ auto *keyGenDialog = new KeyGenDialog(mCtx, this);
keyGenDialog->show();
}
-void KeyMgmt::closeEvent(QCloseEvent *event)
-{
+void KeyMgmt::closeEvent(QCloseEvent *event) {
QMainWindow::closeEvent(event);
}
void KeyMgmt::slotGenerateSubKey() {
auto selectedList = mKeyList->getSelected();
- if(selectedList->empty()) {
+ if (selectedList->empty()) {
QMessageBox::information(nullptr,
tr("Invalid Operation"),
tr("Please select one KeyPair before doing this operation."));
return;
}
- const auto &key = mCtx->getKeyById(selectedList->first());
- if(!key.is_private_key) {
+ const auto key = mCtx->getKeyById(selectedList->first());
+ if (!key.good) {
+ QMessageBox::critical(nullptr, tr("Error"), tr("Key Not Found."));
+ return;
+ }
+ if (!key.is_private_key) {
QMessageBox::critical(nullptr,
tr("Invalid Operation"),
tr("If a key pair does not have a private key then it will not be able to generate sub-keys."));
diff --git a/src/ui/KeyUploadDialog.cpp b/src/ui/KeyUploadDialog.cpp
index faf892f0..ab38569f 100644
--- a/src/ui/KeyUploadDialog.cpp
+++ b/src/ui/KeyUploadDialog.cpp
@@ -24,8 +24,6 @@
#include "ui/KeyUploadDialog.h"
-#include <utility>
-
KeyUploadDialog::KeyUploadDialog(GpgME::GpgContext *ctx, const QVector<GpgKey> &keys, QWidget *parent)
: appPath(qApp->applicationDirPath()),
settings(RESOURCE_DIR(appPath) + "/conf/gpgfrontend.ini", QSettings::IniFormat),
diff --git a/src/ui/SettingsDialog.cpp b/src/ui/SettingsDialog.cpp
deleted file mode 100755
index 1732d718..00000000
--- a/src/ui/SettingsDialog.cpp
+++ /dev/null
@@ -1,777 +0,0 @@
-/**
- * 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.
- *
- * Foobar 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 Foobar. If not, see <https://www.gnu.org/licenses/>.
- *
- * The initial version of the source code is inherited from gpg4usb-team.
- * Their source code version also complies with GNU General Public License.
- *
- * The source code version of this software was modified and released
- * by Saturneric<[email protected]> starting on May 12, 2021.
- *
- */
-
-#include "ui/SettingsDialog.h"
-#include "smtp/SmtpMime"
-#include "ui/WaitingDialog.h"
-
-SettingsDialog::SettingsDialog(GpgME::GpgContext *ctx, QWidget *parent)
- : QDialog(parent) {
- mCtx = ctx;
- tabWidget = new QTabWidget;
- generalTab = new GeneralTab(mCtx);
- appearanceTab = new AppearanceTab;
- sendMailTab = new SendMailTab;
- keyserverTab = new KeyserverTab;
- advancedTab = new AdvancedTab;
- gpgPathsTab = new GpgPathsTab;
-
- tabWidget->addTab(generalTab, tr("General"));
- tabWidget->addTab(appearanceTab, tr("Appearance"));
- tabWidget->addTab(sendMailTab, tr("Send Mail"));
- tabWidget->addTab(keyserverTab, tr("Key Server"));
- // tabWidget->addTab(gpgPathsTab, tr("Gpg paths"));
- tabWidget->addTab(advancedTab, tr("Advanced"));
-
- buttonBox =
- new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
-
- connect(buttonBox, SIGNAL(accepted()), this, SLOT(slotAccept()));
- connect(buttonBox, SIGNAL(rejected()), this, SLOT(reject()));
-
- auto *mainLayout = new QVBoxLayout;
- mainLayout->addWidget(tabWidget);
- mainLayout->addWidget(buttonBox);
- setLayout(mainLayout);
-
- setWindowTitle(tr("Settings"));
-
- // slots for handling the restartneeded member
- this->slotSetRestartNeeded(false);
- connect(generalTab, SIGNAL(signalRestartNeeded(bool)), this,
- SLOT(slotSetRestartNeeded(bool)));
- connect(appearanceTab, SIGNAL(signalRestartNeeded(bool)), this,
- SLOT(slotSetRestartNeeded(bool)));
- connect(sendMailTab, SIGNAL(signalRestartNeeded(bool)), this,
- SLOT(slotSetRestartNeeded(bool)));
- connect(keyserverTab, SIGNAL(signalRestartNeeded(bool)), this,
- SLOT(slotSetRestartNeeded(bool)));
- connect(advancedTab, SIGNAL(signalRestartNeeded(bool)), this,
- SLOT(slotSetRestartNeeded(bool)));
-
- connect(this, SIGNAL(signalRestartNeeded(bool)), parent,
- SLOT(slotSetRestartNeeded(bool)));
-
- this->show();
-}
-
-bool SettingsDialog::getRestartNeeded() const { return this->restartNeeded; }
-
-void SettingsDialog::slotSetRestartNeeded(bool needed) {
- this->restartNeeded = needed;
-}
-
-void SettingsDialog::slotAccept() {
- generalTab->applySettings();
- sendMailTab->applySettings();
- appearanceTab->applySettings();
- keyserverTab->applySettings();
- advancedTab->applySettings();
- gpgPathsTab->applySettings();
- if (getRestartNeeded()) {
- emit signalRestartNeeded(true);
- }
- close();
-}
-
-// http://www.informit.com/articles/article.aspx?p=1405555&seqNum=3
-// http://developer.qt.nokia.com/wiki/How_to_create_a_multi_language_application
-QHash<QString, QString> SettingsDialog::listLanguages() {
- QHash<QString, QString> languages;
-
- languages.insert("", tr("System Default"));
-
- QString appPath = qApp->applicationDirPath();
- QDir qmDir = QDir(RESOURCE_DIR(appPath) + "/ts/");
- QStringList fileNames = qmDir.entryList(QStringList("gpgfrontend_*.qm"));
-
- for (int i = 0; i < fileNames.size(); ++i) {
- QString locale = fileNames[i];
- locale.truncate(locale.lastIndexOf('.'));
- locale.remove(0, locale.indexOf('_') + 1);
-
- // this works in qt 4.8
- QLocale qloc(locale);
-#if QT_VERSION < 0x040800
- QString language =
- QLocale::languageToString(qloc.language()) + " (" + locale +
- ")"; //+ " (" + QLocale::languageToString(qloc.language()) + ")";
-#else
- QString language = qloc.nativeLanguageName() + " (" + locale + ")";
-#endif
- languages.insert(locale, language);
- }
- return languages;
-}
-
-GeneralTab::GeneralTab(GpgME::GpgContext *ctx, QWidget *parent)
- : QWidget(parent), appPath(qApp->applicationDirPath()),
- settings(RESOURCE_DIR(appPath) + "/conf/gpgfrontend.ini",
- QSettings::IniFormat) {
- mCtx = ctx;
-
- /*****************************************
- * remember Password-Box
- *****************************************/
- auto *rememberPasswordBox = new QGroupBox(tr("Remember Password"));
- auto *rememberPasswordBoxLayout = new QHBoxLayout();
- rememberPasswordCheckBox =
- new QCheckBox(tr("Remember password until closing gpg4usb"), this);
- rememberPasswordBoxLayout->addWidget(rememberPasswordCheckBox);
- rememberPasswordBox->setLayout(rememberPasswordBoxLayout);
-
- /*****************************************
- * Save-Checked-Keys-Box
- *****************************************/
- auto *saveCheckedKeysBox = new QGroupBox(tr("Save Checked Keys"));
- auto *saveCheckedKeysBoxLayout = new QHBoxLayout();
- saveCheckedKeysCheckBox = new QCheckBox(
- tr("Save checked private keys on exit and restore them on next start."),
- this);
- saveCheckedKeysBoxLayout->addWidget(saveCheckedKeysCheckBox);
- saveCheckedKeysBox->setLayout(saveCheckedKeysBoxLayout);
-
- /*****************************************
- * Key-Impport-Confirmation Box
- *****************************************/
- auto *importConfirmationBox =
- new QGroupBox(tr("Confirm drag'n'drop key import"));
- auto *importConfirmationBoxLayout = new QHBoxLayout();
- importConfirmationCheckBox = new QCheckBox(
- tr("Import files dropped on the keylist without confirmation."), this);
- importConfirmationBoxLayout->addWidget(importConfirmationCheckBox);
- importConfirmationBox->setLayout(importConfirmationBoxLayout);
-
- /*****************************************
- * Language Select Box
- *****************************************/
- auto *langBox = new QGroupBox(tr("Language"));
- auto *langBoxLayout = new QVBoxLayout();
- langSelectBox = new QComboBox;
- lang = SettingsDialog::listLanguages();
-
- foreach (QString l, lang) { langSelectBox->addItem(l); }
-
- langBoxLayout->addWidget(langSelectBox);
- langBoxLayout->addWidget(
- new QLabel(tr("<b>NOTE: </b> GpgFrontend will restart automatically if "
- "you change the language!")));
- langBox->setLayout(langBoxLayout);
- connect(langSelectBox, SIGNAL(currentIndexChanged(int)), this,
- SLOT(slotLanguageChanged()));
-
- /*****************************************
- * Own Key Select Box
- *****************************************/
- auto *ownKeyBox = new QGroupBox(tr("Own key"));
- auto *ownKeyBoxLayout = new QVBoxLayout();
- ownKeySelectBox = new QComboBox;
-
- ownKeyBox->setLayout(ownKeyBoxLayout);
- mKeyList = new KeyList(mCtx);
-
- // Fill the keyid hashmap
- keyIds.insert("", tr("<none>"));
-
- for (const auto &keyid : *mKeyList->getAllPrivateKeys()) {
- auto &key = mCtx->getKeyById(keyid);
- keyIds.insert(key.id, key.uids.first().uid);
- }
- for (const auto &k : keyIds.keys()) {
- ownKeySelectBox->addItem(keyIds.find(k).value());
- keyIdsList.append(k);
- }
- connect(ownKeySelectBox, SIGNAL(currentIndexChanged(int)), this,
- SLOT(slotOwnKeyIdChanged()));
-
- ownKeyBoxLayout->addWidget(new QLabel(
- tr("Key pair for synchronization and identity authentication")));
- ownKeyBoxLayout->addWidget(ownKeySelectBox);
-
- /*****************************************
- * Mainlayout
- *****************************************/
- auto *mainLayout = new QVBoxLayout;
- mainLayout->addWidget(rememberPasswordBox);
- mainLayout->addWidget(saveCheckedKeysBox);
- mainLayout->addWidget(importConfirmationBox);
- mainLayout->addWidget(langBox);
- mainLayout->addWidget(ownKeyBox);
-
- setSettings();
- mainLayout->addStretch(1);
- setLayout(mainLayout);
-}
-
-/**********************************
- * Read the settings from config
- * and set the buttons and checkboxes
- * appropriately
- **********************************/
-void GeneralTab::setSettings() {
- // Keysaving
- if (settings.value("keys/saveKeyChecked").toBool()) {
- saveCheckedKeysCheckBox->setCheckState(Qt::Checked);
- }
-
- // Language setting
- QString langKey = settings.value("int/lang").toString();
- QString langValue = lang.value(langKey);
- if (langKey != "") {
- langSelectBox->setCurrentIndex(langSelectBox->findText(langValue));
- }
-
- QString ownKeyId = settings.value("general/ownKeyId").toString();
- qDebug() << "OwnKeyId" << ownKeyId;
- if (ownKeyId.isEmpty()) {
- ownKeySelectBox->setCurrentText("<none>");
- } else {
- const auto text = keyIds.find(ownKeyId).value();
- qDebug() << "OwnKey" << ownKeyId << text;
- ownKeySelectBox->setCurrentText(text);
- }
-
- // Get own key information from keydb/gpg.conf (if contained)
- if (settings.value("general/confirmImportKeys", Qt::Checked).toBool()) {
- importConfirmationCheckBox->setCheckState(Qt::Checked);
- }
-}
-
-/***********************************
- * get the values of the buttons and
- * write them to settings-file
- *************************************/
-void GeneralTab::applySettings() {
- settings.setValue("keys/saveKeyChecked",
- saveCheckedKeysCheckBox->isChecked());
- // TODO: clear passwordCache instantly on unset rememberPassword
- settings.setValue("general/rememberPassword",
- rememberPasswordCheckBox->isChecked());
- settings.setValue("int/lang", lang.key(langSelectBox->currentText()));
- settings.setValue("general/ownKeyId",
- keyIdsList[ownKeySelectBox->currentIndex()]);
- settings.setValue("general/confirmImportKeys",
- importConfirmationCheckBox->isChecked());
-}
-
-void GeneralTab::slotLanguageChanged() { emit signalRestartNeeded(true); }
-
-void GeneralTab::slotOwnKeyIdChanged() {
- // Set ownKeyId to currently selected
-}
-
-SendMailTab::SendMailTab(QWidget *parent)
- : QWidget(parent), appPath(qApp->applicationDirPath()),
- settings(RESOURCE_DIR(appPath) + "/conf/gpgfrontend.ini",
- QSettings::IniFormat) {
-
- enableCheckBox = new QCheckBox(tr("Enable"));
- enableCheckBox->setTristate(false);
-
- smtpAddress = new QLineEdit();
- username = new QLineEdit();
- password = new QLineEdit();
- password->setEchoMode(QLineEdit::Password);
-
- portSpin = new QSpinBox();
- portSpin->setMinimum(1);
- portSpin->setMaximum(65535);
- connectionTypeComboBox = new QComboBox();
- connectionTypeComboBox->addItem("None");
- connectionTypeComboBox->addItem("SSL");
- connectionTypeComboBox->addItem("TLS");
- connectionTypeComboBox->addItem("STARTTLS");
-
- defaultSender = new QLineEdit();;
- checkConnectionButton = new QPushButton("Check Connection");
-
- auto layout = new QGridLayout();
- layout->addWidget(enableCheckBox, 0, 0);
- layout->addWidget(new QLabel(tr("SMTP Address")), 1, 0);
- layout->addWidget(smtpAddress, 1, 1, 1, 4);
- layout->addWidget(new QLabel(tr("Username")), 2, 0);
- layout->addWidget(username, 2, 1, 1, 4);
- layout->addWidget(new QLabel(tr("Password")), 3, 0);
- layout->addWidget(password, 3, 1, 1, 4);
- layout->addWidget(new QLabel(tr("Port")), 4, 0);
- layout->addWidget(portSpin, 4, 1, 1, 1);
- layout->addWidget(new QLabel(tr("Connection Security")), 5, 0);
- layout->addWidget(connectionTypeComboBox, 5, 1, 1, 1);
-
- layout->addWidget(new QLabel(tr("Default Sender")), 6, 0);
- layout->addWidget(defaultSender, 6, 1, 1, 4);
- layout->addWidget(checkConnectionButton, 7, 0);
-
- connect(enableCheckBox, SIGNAL(stateChanged(int)), this, SLOT(slotCheckBoxSetEnableDisable(int)));
- connect(checkConnectionButton, SIGNAL(clicked(bool)), this, SLOT(slotCheckConnection()));
-
-
- this->setLayout(layout);
- setSettings();
-}
-
-/**********************************
- * Read the settings from config
- * and set the buttons and checkboxes
- * appropriately
- **********************************/
-void SendMailTab::setSettings() {
-
- if (settings.value("sendMail/enable", false).toBool())
- enableCheckBox->setCheckState(Qt::Checked);
- else {
- enableCheckBox->setCheckState(Qt::Unchecked);
- smtpAddress->setDisabled(true);
- username->setDisabled(true);
- password->setDisabled(true);
- portSpin->setDisabled(true);
- connectionTypeComboBox->setDisabled(true);
- defaultSender->setDisabled(true);
- checkConnectionButton->setDisabled(true);
- }
-
- smtpAddress->setText(settings.value("sendMail/smtpAddress", QString()).toString());
- username->setText(settings.value("sendMail/username", QString()).toString());
- password->setText(settings.value("sendMail/password", QString()).toString());
- portSpin->setValue(settings.value("sendMail/port", 25).toInt());
- connectionTypeComboBox->setCurrentText(settings.value("sendMail/connectionType", "None").toString());
- defaultSender->setText(settings.value("sendMail/defaultSender", QString()).toString());
-
-}
-
-/***********************************
- * get the values of the buttons and
- * write them to settings-file
- *************************************/
-void SendMailTab::applySettings() {
-
- settings.setValue("sendMail/smtpAddress", smtpAddress->text());
- settings.setValue("sendMail/username", username->text());
- settings.setValue("sendMail/password", password->text());
- settings.setValue("sendMail/port", portSpin->value());
- settings.setValue("sendMail/connectionType", connectionTypeComboBox->currentText());
- settings.setValue("sendMail/defaultSender", defaultSender->text());
-
- settings.setValue("sendMail/enable", enableCheckBox->isChecked());
-}
-
-void SendMailTab::slotCheckConnection() {
-
- SmtpClient::ConnectionType connectionType = SmtpClient::ConnectionType::TcpConnection;
-
- if (connectionTypeComboBox->currentText() == "SSL") {
- connectionType = SmtpClient::ConnectionType::SslConnection;
- } else if (connectionTypeComboBox->currentText() == "TLS") {
- connectionType = SmtpClient::ConnectionType::TlsConnection;
- } else if (connectionTypeComboBox->currentText() == "STARTTLS") {
- connectionType = SmtpClient::ConnectionType::TlsConnection;
- } else {
- connectionType = SmtpClient::ConnectionType::TcpConnection;
- }
-
- SmtpClient smtp(smtpAddress->text(), portSpin->value(), connectionType);
-
- // We need to set the username (your email address) and the password
- // for smtp authentification.
-
- smtp.setUser(username->text());
- smtp.setPassword(password->text());
-
- bool if_success = true;
-
- if (!smtp.connectToHost()) {
- QMessageBox::critical(this, tr("Fail"), tr("Fail to Connect SMTP Server"));
- if_success = false;
- }
- if (if_success && !smtp.login()) {
- QMessageBox::critical(this, tr("Fail"), tr("Fail to Login"));
- if_success = false;
- }
-
- if (if_success)
- QMessageBox::information(this, tr("Success"), tr("Succeed in connecting and login"));
-
-}
-
-void SendMailTab::slotCheckBoxSetEnableDisable(int state) {
- if (state == Qt::Checked) {
- smtpAddress->setEnabled(true);
- username->setEnabled(true);
- password->setEnabled(true);
- portSpin->setEnabled(true);
- connectionTypeComboBox->setEnabled(true);
- defaultSender->setEnabled(true);
- checkConnectionButton->setEnabled(true);
- } else {
- smtpAddress->setDisabled(true);
- username->setDisabled(true);
- password->setDisabled(true);
- portSpin->setDisabled(true);
- connectionTypeComboBox->setDisabled(true);
- defaultSender->setDisabled(true);
- checkConnectionButton->setDisabled(true);
- }
-}
-
-AppearanceTab::AppearanceTab(QWidget *parent)
- : QWidget(parent), appPath(qApp->applicationDirPath()),
- settings(RESOURCE_DIR(appPath) + "/conf/gpgfrontend.ini",
- QSettings::IniFormat) {
- /*****************************************
- * Icon-Size-Box
- *****************************************/
- auto *iconSizeBox = new QGroupBox(tr("Iconsize"));
- iconSizeGroup = new QButtonGroup();
- iconSizeSmall = new QRadioButton(tr("small"));
- iconSizeMedium = new QRadioButton(tr("medium"));
- iconSizeLarge = new QRadioButton(tr("large"));
-
- iconSizeGroup->addButton(iconSizeSmall, 1);
- iconSizeGroup->addButton(iconSizeMedium, 2);
- iconSizeGroup->addButton(iconSizeLarge, 3);
-
- auto *iconSizeBoxLayout = new QHBoxLayout();
- iconSizeBoxLayout->addWidget(iconSizeSmall);
- iconSizeBoxLayout->addWidget(iconSizeMedium);
- iconSizeBoxLayout->addWidget(iconSizeLarge);
-
- iconSizeBox->setLayout(iconSizeBoxLayout);
-
- /*****************************************
- * Icon-Style-Box
- *****************************************/
- auto *iconStyleBox = new QGroupBox(tr("Iconstyle"));
- iconStyleGroup = new QButtonGroup();
- iconTextButton = new QRadioButton(tr("just text"));
- iconIconsButton = new QRadioButton(tr("just icons"));
- iconAllButton = new QRadioButton(tr("text and icons"));
-
- iconStyleGroup->addButton(iconTextButton, 1);
- iconStyleGroup->addButton(iconIconsButton, 2);
- iconStyleGroup->addButton(iconAllButton, 3);
-
- auto *iconStyleBoxLayout = new QHBoxLayout();
- iconStyleBoxLayout->addWidget(iconTextButton);
- iconStyleBoxLayout->addWidget(iconIconsButton);
- iconStyleBoxLayout->addWidget(iconAllButton);
-
- iconStyleBox->setLayout(iconStyleBoxLayout);
-
- /*****************************************
- * Window-Size-Box
- *****************************************/
- auto *windowSizeBox = new QGroupBox(tr("Windowstate"));
- auto *windowSizeBoxLayout = new QHBoxLayout();
- windowSizeCheckBox =
- new QCheckBox(tr("Save window size and position on exit."), this);
- windowSizeBoxLayout->addWidget(windowSizeCheckBox);
- windowSizeBox->setLayout(windowSizeBoxLayout);
-
- /*****************************************
- * Info-Board-Font-Size-Box
- *****************************************/
-
- auto *infoBoardBox = new QGroupBox(tr("Information Board"));
- auto *infoBoardLayout = new QHBoxLayout();
- infoBoardFontSizeSpin = new QSpinBox();
- infoBoardFontSizeSpin->setRange(9, 18);
- infoBoardFontSizeSpin->setValue(10);
- infoBoardFontSizeSpin->setSingleStep(1);
- infoBoardLayout->addWidget(new QLabel(tr(" Front Size")));
- infoBoardLayout->addWidget(infoBoardFontSizeSpin);
- infoBoardBox->setLayout(infoBoardLayout);
-
- auto *mainLayout = new QVBoxLayout;
- mainLayout->addWidget(iconSizeBox);
- mainLayout->addWidget(iconStyleBox);
- mainLayout->addWidget(windowSizeBox);
- mainLayout->addWidget(infoBoardBox);
- mainLayout->addStretch(1);
- setSettings();
- setLayout(mainLayout);
-}
-
-/**********************************
- * Read the settings from config
- * and set the buttons and checkboxes
- * appropriately
- **********************************/
-void AppearanceTab::setSettings() {
-
- // Iconsize
- QSize iconSize = settings.value("toolbar/iconsize", QSize(24, 24)).toSize();
- switch (iconSize.height()) {
- case 12:
- iconSizeSmall->setChecked(true);
- break;
- case 24:
- iconSizeMedium->setChecked(true);
- break;
- case 32:
- iconSizeLarge->setChecked(true);
- break;
- }
- // Iconstyle
- Qt::ToolButtonStyle iconStyle = static_cast<Qt::ToolButtonStyle>(
- settings.value("toolbar/iconstyle", Qt::ToolButtonTextUnderIcon)
- .toUInt());
- switch (iconStyle) {
- case Qt::ToolButtonTextOnly:
- iconTextButton->setChecked(true);
- break;
- case Qt::ToolButtonIconOnly:
- iconIconsButton->setChecked(true);
- break;
- case Qt::ToolButtonTextUnderIcon:
- iconAllButton->setChecked(true);
- break;
- default:
- break;
- }
-
- // Window Save and Position
- if (settings.value("window/windowSave").toBool())
- windowSizeCheckBox->setCheckState(Qt::Checked);
-
- // infoBoardFontSize
- auto infoBoardFontSize = settings.value("informationBoard/fontSize", 10).toInt();
- if (infoBoardFontSize < 9 || infoBoardFontSize > 18)
- infoBoardFontSize = 10;
- infoBoardFontSizeSpin->setValue(infoBoardFontSize);
-}
-
-/***********************************
- * get the values of the buttons and
- * write them to settings-file
- *************************************/
-void AppearanceTab::applySettings() {
- switch (iconSizeGroup->checkedId()) {
- case 1:
- settings.setValue("toolbar/iconsize", QSize(12, 12));
- break;
- case 2:
- settings.setValue("toolbar/iconsize", QSize(24, 24));
- break;
- case 3:
- settings.setValue("toolbar/iconsize", QSize(32, 32));
- break;
- }
-
- switch (iconStyleGroup->checkedId()) {
- case 1:
- settings.setValue("toolbar/iconstyle", Qt::ToolButtonTextOnly);
- break;
- case 2:
- settings.setValue("toolbar/iconstyle", Qt::ToolButtonIconOnly);
- break;
- case 3:
- settings.setValue("toolbar/iconstyle", Qt::ToolButtonTextUnderIcon);
- break;
- }
-
- settings.setValue("window/windowSave", windowSizeCheckBox->isChecked());
-
- settings.setValue("informationBoard/fontSize", infoBoardFontSizeSpin->value());
-}
-
-KeyserverTab::KeyserverTab(QWidget *parent)
- : QWidget(parent), appPath(qApp->applicationDirPath()),
- settings(RESOURCE_DIR(appPath) + "/conf/gpgfrontend.ini",
- QSettings::IniFormat) {
-
- auto keyServerList = settings.value("keyserver/keyServerList").toStringList();
-
- auto *mainLayout = new QVBoxLayout(this);
-
- auto *label = new QLabel(tr("Default Key Server for import:"));
- comboBox = new QComboBox;
- comboBox->setEditable(false);
- comboBox->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
-
- for (const auto &keyServer : keyServerList) {
- comboBox->addItem(keyServer);
- qDebug() << "KeyserverTab Get ListItemText" << keyServer;
- }
-
- comboBox->setCurrentText(
- settings.value("keyserver/defaultKeyServer").toString());
-
- auto *addKeyServerBox = new QWidget(this);
- auto *addKeyServerLayout = new QHBoxLayout(addKeyServerBox);
- auto *http = new QLabel("URL: ");
- newKeyServerEdit = new QLineEdit(this);
- auto *newKeyServerButton = new QPushButton(tr("Add"), this);
- connect(newKeyServerButton, SIGNAL(clicked()), this, SLOT(addKeyServer()));
- addKeyServerLayout->addWidget(http);
- addKeyServerLayout->addWidget(newKeyServerEdit);
- addKeyServerLayout->addWidget(newKeyServerButton);
-
- mainLayout->addWidget(label);
- mainLayout->addWidget(comboBox);
- mainLayout->addWidget(addKeyServerBox);
- mainLayout->addStretch(1);
-
- // Read keylist from ini-file and fill it into combobox
- setSettings();
-}
-
-/**********************************
- * Read the settings from config
- * and set the buttons and checkboxes
- * appropriately
- **********************************/
-void KeyserverTab::setSettings() {
- auto *keyServerList = new QStringList();
- for (int i = 0; i < comboBox->count(); i++) {
- keyServerList->append(comboBox->itemText(i));
- qDebug() << "KeyserverTab ListItemText" << comboBox->itemText(i);
- }
- settings.setValue("keyserver/keyServerList", *keyServerList);
- settings.setValue("keyserver/defaultKeyServer", comboBox->currentText());
-}
-
-void KeyserverTab::addKeyServer() {
- if (newKeyServerEdit->text().startsWith("http://") ||
- newKeyServerEdit->text().startsWith("https://")) {
- comboBox->addItem(newKeyServerEdit->text());
- } else {
- comboBox->addItem("http://" + newKeyServerEdit->text());
- }
- comboBox->setCurrentIndex(comboBox->count() - 1);
-}
-
-/***********************************
- * get the values of the buttons and
- * write them to settings-file
- *************************************/
-void KeyserverTab::applySettings() {
- settings.setValue("keyserver/defaultKeyServer", comboBox->currentText());
-}
-
-AdvancedTab::AdvancedTab(QWidget *parent)
- : QWidget(parent), appPath(qApp->applicationDirPath()),
- settings(RESOURCE_DIR(appPath) + "/conf/gpgfrontend.ini",
- QSettings::IniFormat) {
- /*****************************************
- * Steganography Box
- *****************************************/
- auto *steganoBox = new QGroupBox(tr("Show Steganography Options [Advanced]"));
- auto *steganoBoxLayout = new QHBoxLayout();
- steganoCheckBox = new QCheckBox(tr("Show Steganographic Options."), this);
- steganoBoxLayout->addWidget(steganoCheckBox);
- steganoBox->setLayout(steganoBoxLayout);
-
- auto *mainLayout = new QVBoxLayout;
- mainLayout->addWidget(steganoBox);
- setSettings();
- mainLayout->addStretch(1);
- setLayout(mainLayout);
-}
-
-void AdvancedTab::setSettings() {
- if (settings.value("advanced/steganography").toBool()) {
- steganoCheckBox->setCheckState(Qt::Checked);
- }
-}
-
-void AdvancedTab::applySettings() {
- settings.setValue("advanced/steganography", steganoCheckBox->isChecked());
-}
-
-GpgPathsTab::GpgPathsTab(QWidget *parent)
- : QWidget(parent), appPath(qApp->applicationDirPath()),
- settings(RESOURCE_DIR(appPath) + "/conf/gpgfrontend.ini",
- QSettings::IniFormat) {
- setSettings();
-
- /*****************************************
- * Keydb Box
- *****************************************/
- auto *keydbBox = new QGroupBox(tr("Relative path to keydb"));
- auto *keydbBoxLayout = new QGridLayout();
-
- // Label containing the current keydbpath relative to default keydb path
- keydbLabel = new QLabel(accKeydbPath, this);
-
- auto *keydbButton = new QPushButton("Change keydb path", this);
- connect(keydbButton, SIGNAL(clicked()), this, SLOT(chooseKeydbDir()));
- auto *keydbDefaultButton = new QPushButton("Set keydb to default path", this);
- connect(keydbDefaultButton, SIGNAL(clicked()), this,
- SLOT(setKeydbPathToDefault()));
-
- keydbBox->setLayout(keydbBoxLayout);
- keydbBoxLayout->addWidget(new QLabel(tr("Current keydb path: ")), 1, 1);
- keydbBoxLayout->addWidget(keydbLabel, 1, 2);
- keydbBoxLayout->addWidget(keydbButton, 1, 3);
- keydbBoxLayout->addWidget(keydbDefaultButton, 2, 3);
- keydbBoxLayout->addWidget(
- new QLabel(tr("<b>NOTE: </b> Gpg4usb will restart automatically if you "
- "change the keydb path!")),
- 3, 1, 1, 3);
-
- auto *mainLayout = new QVBoxLayout;
- mainLayout->addWidget(keydbBox);
- mainLayout->addStretch(1);
- setLayout(mainLayout);
-}
-
-QString GpgPathsTab::getRelativePath(const QString &dir1, const QString &dir2) {
- QDir dir(dir1);
- QString s;
-
- s = dir.relativeFilePath(dir2);
- qDebug() << "relative path: " << s;
- if (s.isEmpty()) {
- s = ".";
- }
- return s;
-}
-
-void GpgPathsTab::setKeydbPathToDefault() {
- accKeydbPath = ".";
- keydbLabel->setText(".");
-}
-
-QString GpgPathsTab::chooseKeydbDir() {
- QString dir = QFileDialog::getExistingDirectory(
- this, tr("Choose keydb directory"), accKeydbPath,
- QFileDialog::ShowDirsOnly);
-
- accKeydbPath = getRelativePath(defKeydbPath, dir);
- keydbLabel->setText(accKeydbPath);
- return "";
-}
-
-void GpgPathsTab::setSettings() {
- defKeydbPath = qApp->applicationDirPath() + "/keydb";
-
- accKeydbPath = settings.value("gpgpaths/keydbpath").toString();
- if (accKeydbPath.isEmpty()) {
- accKeydbPath = ".";
- }
-}
-
-void GpgPathsTab::applySettings() {
- settings.setValue("gpgpaths/keydbpath", accKeydbPath);
-}
diff --git a/src/ui/ShowCopyDialog.cpp b/src/ui/ShowCopyDialog.cpp
new file mode 100644
index 00000000..3286f6c4
--- /dev/null
+++ b/src/ui/ShowCopyDialog.cpp
@@ -0,0 +1,53 @@
+/**
+ * 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.
+ *
+ * Foobar 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 Foobar. If not, see <https://www.gnu.org/licenses/>.
+ *
+ * The initial version of the source code is inherited from gpg4usb-team.
+ * Their source code version also complies with GNU General Public License.
+ *
+ * The source code version of this software was modified and released
+ * by Saturneric<[email protected]> starting on May 12, 2021.
+ *
+ */
+
+#include "ui/ShowCopyDialog.h"
+
+ShowCopyDialog::ShowCopyDialog(const QString &text, const QString &info, QWidget *parent) : QDialog(parent) {
+ textEdit = new QTextEdit();
+ textEdit->setReadOnly(true);
+ textEdit->setLineWrapMode(QTextEdit::WidgetWidth);
+ textEdit->setText(text);
+ copyButton = new QPushButton("Copy");
+ connect(copyButton, SIGNAL(clicked(bool)), this, SLOT(slotCopyText()));
+
+ infoLabel = new QLabel();
+ infoLabel->setText(info);
+ infoLabel->setWordWrap(true);
+
+ auto *layout = new QVBoxLayout();
+ layout->addWidget(textEdit);
+ layout->addWidget(copyButton);
+ layout->addWidget(infoLabel);
+
+ this->setWindowTitle("Short Ciphertext");
+ this->resize(320, 120);
+ this->setModal(true);
+ this->setLayout(layout);
+}
+
+void ShowCopyDialog::slotCopyText() {
+ QClipboard *cb = QApplication::clipboard();
+ cb->setText(textEdit->toPlainText());
+}
diff --git a/src/ui/Wizard.cpp b/src/ui/Wizard.cpp
index b0486cc9..8b482675 100644
--- a/src/ui/Wizard.cpp
+++ b/src/ui/Wizard.cpp
@@ -24,10 +24,6 @@
#include "ui/Wizard.h"
-#ifdef Q_OS_WIN
-#include "windows.h"
-#endif
-
Wizard::Wizard(GpgME::GpgContext *ctx, KeyMgmt *keyMgmt, QWidget *parent)
: QWizard(parent), appPath(qApp->applicationDirPath()),
settings(RESOURCE_DIR(appPath) + "/conf/gpgfrontend.ini", QSettings::IniFormat) {
@@ -36,8 +32,6 @@ Wizard::Wizard(GpgME::GpgContext *ctx, KeyMgmt *keyMgmt, QWidget *parent)
setPage(Page_Intro, new IntroPage(this));
setPage(Page_Choose, new ChoosePage(this));
- setPage(Page_ImportFromGpg4usb, new ImportFromGpg4usbPage(mCtx, mKeyMgmt, this));
- setPage(Page_ImportFromGnupg, new ImportFromGnupgPage(mCtx, mKeyMgmt, this));
setPage(Page_GenKey, new KeyGenPage(mCtx, this));
setPage(Page_Conclusion, new ConclusionPage(this));
#ifndef Q_WS_MAC
@@ -54,7 +48,6 @@ Wizard::Wizard(GpgME::GpgContext *ctx, KeyMgmt *keyMgmt, QWidget *parent)
settings.remove("wizard/nextPage");
connect(this, SIGNAL(accepted()), this, SLOT(slotWizardAccepted()));
- // connect(this, SIGNAL(signalOpenHelp(QString)), parentWidget(), SLOT(signalOpenHelp(QString)));
}
@@ -67,57 +60,20 @@ void Wizard::slotWizardAccepted() {
}
}
-bool Wizard::importPubAndSecKeysFromDir(const QString &dir, KeyMgmt *keyMgmt) {
- QFile secRingFile(dir + "/secring.gpg");
- QFile pubRingFile(dir + "/pubring.gpg");
-
- // Return, if no keyrings are found in subdir of chosen dir
- if (!(pubRingFile.exists() or secRingFile.exists())) {
- QMessageBox::critical(0, tr("Import Error"), tr("Couldn't locate any keyring file in %1").arg(dir));
- return false;
- }
-
- QByteArray inBuffer;
- if (secRingFile.exists()) {
- // write content of secringfile to inBuffer
- if (!secRingFile.open(QIODevice::ReadOnly)) {
- QMessageBox::critical(nullptr, tr("Import error"),
- tr("Couldn't open private keyringfile: %1").arg(secRingFile.fileName()));
- return false;
- }
- inBuffer = secRingFile.readAll();
- secRingFile.close();
- }
-
- if (pubRingFile.exists()) {
- // try to import public keys
- if (!pubRingFile.open(QIODevice::ReadOnly)) {
- QMessageBox::critical(nullptr, tr("Import error"),
- tr("Couldn't open public keyringfile: %1").arg(pubRingFile.fileName()));
- return false;
- }
- inBuffer.append(pubRingFile.readAll());
- pubRingFile.close();
- }
- keyMgmt->slotImportKeys(inBuffer);
- inBuffer.clear();
-
- return true;
-}
-
IntroPage::IntroPage(QWidget *parent)
: QWizardPage(parent), appPath(qApp->applicationDirPath()),
settings(RESOURCE_DIR(appPath) + "/conf/gpgfrontend.ini", QSettings::IniFormat) {
setTitle(tr("Getting Started..."));
setSubTitle(tr("... with GPGFrontend"));
- auto *topLabel = new QLabel(tr("Welcome to use GPGFrontend for decrypting and signing text or file!")+
- " <br><br><a href='https://github.com/saturneric/GpgFrontend'>GpgFrontend</a> " +
- tr("is a Powerful, Easy-to-Use, Compact, Cross-Platform, and Installation-Free OpenPGP Crypto Tool.") +
- tr("For brief information have a look at the") + "<a href='https://saturneric.github.io/GpgFrontend/index.html#/overview'>"+
- tr("Overview") +"</a> (" +
- tr("by clicking the link, the page will open in the web browser") +
- "). <br>");
+ auto *topLabel = new QLabel(tr("Welcome to use GPGFrontend for decrypting and signing text or file!") +
+ " <br><br><a href='https://gpgfrontend.pub'>GpgFrontend</a> " +
+ tr("is a Powerful, Easy-to-Use, Compact, Cross-Platform, and Installation-Free OpenPGP Crypto Tool.") +
+ tr("For brief information have a look at the") +
+ " <a href='https://gpgfrontend.pub/index.html#/overview'>" +
+ tr("Overview") + "</a> (" +
+ tr("by clicking the link, the page will open in the web browser") +
+ "). <br>");
topLabel->setTextFormat(Qt::RichText);
topLabel->setTextInteractionFlags(Qt::TextBrowserInteraction);
topLabel->setOpenExternalLinks(true);
@@ -130,7 +86,7 @@ IntroPage::IntroPage(QWidget *parent)
languages = SettingsDialog::listLanguages();
auto *langSelectBox = new QComboBox();
- for(const auto &l : languages) {
+ for (const auto &l : languages) {
langSelectBox->addItem(l);
}
// selected entry from config
@@ -166,19 +122,21 @@ ChoosePage::ChoosePage(QWidget *parent)
setSubTitle(tr("...by clicking on the appropriate link."));
auto *keygenLabel = new QLabel(tr("If you have never used GPGFrontend before and also don't own a gpg key yet you "
- "may possibly want to read how to") + " <a href=\"https://saturneric.github.io/GpgFrontend/index.html#/manual/generate-key\">"
+ "may possibly want to read how to") +
+ " <a href=\"https://gpgfrontend.pub/index.html#/manual/generate-key\">"
+ tr("Generate Key") + "</a><hr>");
keygenLabel->setTextFormat(Qt::RichText);
keygenLabel->setTextInteractionFlags(Qt::TextBrowserInteraction);
keygenLabel->setOpenExternalLinks(true);
keygenLabel->setWordWrap(true);
- auto *encrDecyTextLabel = new QLabel(tr("If you want to learn how to encrypt, decrypt, sign and verify text, you can read ")
- + "<a href=\"https://saturneric.github.io/GpgFrontend/index.html#/manual/encrypt-decrypt-text\">"
- + tr("Encrypt & Decrypt Text") + "</a> " + tr("or")
- + " <a href=\"https://saturneric.github.io/GpgFrontend/index.html#/manual/sign-verify-text\">"
- + tr("Sign & Verify Text")
- +"</a><hr>");
+ auto *encrDecyTextLabel = new QLabel(
+ tr("If you want to learn how to encrypt, decrypt, sign and verify text, you can read ")
+ + "<a href=\"https://gpgfrontend.pub/index.html#/manual/encrypt-decrypt-text\">"
+ + tr("Encrypt & Decrypt Text") + "</a> " + tr("or")
+ + " <a href=\"https://gpgfrontend.pub/index.html#/manual/sign-verify-text\">"
+ + tr("Sign & Verify Text")
+ + "</a><hr>");
encrDecyTextLabel->setTextFormat(Qt::RichText);
encrDecyTextLabel->setTextInteractionFlags(Qt::TextBrowserInteraction);
@@ -186,11 +144,13 @@ ChoosePage::ChoosePage(QWidget *parent)
encrDecyTextLabel->setWordWrap(true);
auto *signVerifyTextLabel = new QLabel(tr("If you want to operate file, you can read ")
- + "<a href=\"https://saturneric.github.io/GpgFrontend/index.html#/manual/encrypt-decrypt-file\">"
- + tr("Encrypt & Sign File") + "</a> " + tr("or")
- + " <a href=\"https://saturneric.github.io/GpgFrontend/index.html#/manual/sign-verify-file\">"
- + tr("Sign & Verify File")
- +"</a><hr>");
+ +
+ "<a href=\"https://gpgfrontend.pub/index.html#/manual/encrypt-decrypt-file\">"
+ + tr("Encrypt & Sign File") + "</a> " + tr("or")
+ +
+ " <a href=\"https://gpgfrontend.pub/index.html#/manual/sign-verify-file\">"
+ + tr("Sign & Verify File")
+ + "</a><hr>");
signVerifyTextLabel->setTextFormat(Qt::RichText);
signVerifyTextLabel->setTextInteractionFlags(Qt::TextBrowserInteraction);
signVerifyTextLabel->setOpenExternalLinks(true);
@@ -217,149 +177,6 @@ void ChoosePage::slotJumpPage(const QString &page) {
wizard()->next();
}
-ImportFromGpg4usbPage::ImportFromGpg4usbPage(GpgME::GpgContext *ctx, KeyMgmt *keyMgmt, QWidget *parent)
- : QWizardPage(parent), appPath(qApp->applicationDirPath()),
- settings(RESOURCE_DIR(appPath) + "/conf/gpgfrontend.ini", QSettings::IniFormat) {
- mCtx = ctx;
- mKeyMgmt = keyMgmt;
- setTitle(tr("Import from..."));
- setSubTitle(tr("...existing GPGFrontend"));
-
- auto *topLabel = new QLabel(tr("You can import keys and/or settings from existing GPGFrontend. <br><br>"
- "Just check what you want to import, click the import button and choose "
- "the directory of your other GPGFrontend in the appearing file dialog."), this);
- topLabel->setWordWrap(true);
-
- gpg4usbKeyCheckBox = new QCheckBox();
- gpg4usbKeyCheckBox->setChecked(true);
- auto *keyLabel = new QLabel(tr("Keys"));
-
- gpg4usbConfigCheckBox = new QCheckBox();
- gpg4usbConfigCheckBox->setChecked(true);
- auto *configLabel = new QLabel(tr("Configuration"));
-
- auto *importFromGpg4usbButton = new QPushButton(tr("Import from GPGFrontend"));
- connect(importFromGpg4usbButton, SIGNAL(clicked()), this, SLOT(slotImportFromOlderGpg4usb()));
-
- auto *gpg4usbLayout = new QGridLayout();
- gpg4usbLayout->addWidget(topLabel, 1, 1, 1, 2);
- gpg4usbLayout->addWidget(gpg4usbKeyCheckBox, 2, 1, Qt::AlignRight);
- gpg4usbLayout->addWidget(keyLabel, 2, 2);
- gpg4usbLayout->addWidget(gpg4usbConfigCheckBox, 3, 1, Qt::AlignRight);
- gpg4usbLayout->addWidget(configLabel, 3, 2);
- gpg4usbLayout->addWidget(importFromGpg4usbButton, 4, 2);
-
- this->setLayout(gpg4usbLayout);
-}
-
-void ImportFromGpg4usbPage::slotImportFromOlderGpg4usb() {
- QString dir = QFileDialog::getExistingDirectory(this, tr("Other GPGFrontend directory"));
-
- // Return, if cancel was hit
- if (dir.isEmpty()) {
- return;
- }
-
- // try to import keys, if appropriate box is checked, return, if import was unsuccessful
- if (gpg4usbKeyCheckBox->isChecked()) {
- if (!Wizard::importPubAndSecKeysFromDir(dir + "/keydb", mKeyMgmt)) {
- return;
- }
- }
-
- // try to import config, if appropriate box is checked
- if (gpg4usbConfigCheckBox->isChecked()) {
- slotImportConfFromGpg4usb(dir);
-
- settings.setValue("wizard/nextPage", this->nextId());
- QMessageBox::information(nullptr, tr("Configuration Imported"),
- tr("Imported Configuration from old GPGFrontend.<br>"
- "Will now restart to activate the configuration."));
- // TODO: edit->maybesave?
- qApp->exit(RESTART_CODE);
- }
- wizard()->next();
-}
-
-bool ImportFromGpg4usbPage::slotImportConfFromGpg4usb(const QString &dir) {
- QString path = dir + "/conf/gpgfrontend.ini";
- QSettings oldconf(path, QSettings::IniFormat, this);
- QSettings actualConf;
- foreach(QString key, oldconf.allKeys()) {
- actualConf.setValue(key, oldconf.value(key));
- }
- return true;
-}
-
-int ImportFromGpg4usbPage::nextId() const {
- return Wizard::Page_Conclusion;
-}
-
-ImportFromGnupgPage::ImportFromGnupgPage(GpgME::GpgContext *ctx, KeyMgmt *keyMgmt, QWidget *parent)
- : QWizardPage(parent) {
- mCtx = ctx;
- mKeyMgmt = keyMgmt;
- setTitle(tr("Import keys..."));
- setSubTitle(tr("...from existing GnuPG installation"));
-
- auto *gnupgLabel = new QLabel(tr("You can import keys from a locally installed GnuPG.<br><br> The location is read "
- "from registry in Windows or assumed to be the .gnupg folder in the your home directory in Linux.<br>"));
- gnupgLabel->setWordWrap(true);
-
- importFromGnupgButton = new QPushButton(tr("Import keys from GnuPG"));
- connect(importFromGnupgButton, SIGNAL(clicked()), this, SLOT(slotrImportKeysFromGnupg()));
-
- auto *layout = new QGridLayout();
- layout->addWidget(gnupgLabel);
- layout->addWidget(importFromGnupgButton);
-
- this->setLayout(layout);
-}
-
-void ImportFromGnupgPage::slotrImportKeysFromGnupg() {
- // first get gnupghomedir and check, if it exists
- QString gnuPGHome = getGnuPGHome();
- if (gnuPGHome == nullptr) {
- QMessageBox::critical(0, tr("Import Error"), tr("Couldn't locate GnuPG home directory"));
- return;
- }
-
- // Try to import the keyring files and return the return value of the method
- Wizard::importPubAndSecKeysFromDir(gnuPGHome, mKeyMgmt);
- wizard()->next();
-}
-
-QString ImportFromGnupgPage::getGnuPGHome() {
- QString gnuPGHome = "";
-#ifdef _WIN32
- bool existsAndSuccess = false;
-
- HKEY hKey;
-
- existsAndSuccess = (RegOpenKeyExW(HKEY_CURRENT_USER, L"Software\\GNU\\GNUPG", 0, KEY_READ, &hKey) == ERROR_SUCCESS);
-
- if (existsAndSuccess) {
- QSettings gnuPGsettings("HKEY_CURRENT_USER\\Software\\GNU\\GNUPG", QSettings::NativeFormat);
- if (gnuPGsettings.contains("HomeDir")) {
- gnuPGHome = gnuPGsettings.value("HomeDir").toString();
- } else {
- return NULL;
- }
- }
-#else
- gnuPGHome = QDir::homePath() + "/.gnupg";
- if (!QFile(gnuPGHome).exists()) {
- return nullptr;
- }
-#endif
-
- return gnuPGHome;
-}
-
-int ImportFromGnupgPage::nextId() const {
- return Wizard::Page_Conclusion;
-}
-
KeyGenPage::KeyGenPage(GpgME::GpgContext *ctx, QWidget *parent)
: QWizardPage(parent) {
mCtx = ctx;
@@ -407,10 +224,11 @@ ConclusionPage::ConclusionPage(QWidget *parent)
setTitle(tr("Ready."));
setSubTitle(tr("Have fun with GPGFrontend!"));
- auto *bottomLabel = new QLabel(tr("You are ready to use GPGFrontend now.<br><br>")+
- "<a href=\"https://saturneric.github.io/GpgFrontend/index.html#/overview\">"
- + tr("The Online Document") + "</a>"
- + tr(" will get you started with GPGFrontend. It will open in the main window.<br>"));
+ auto *bottomLabel = new QLabel(tr("You are ready to use GPGFrontend now.<br><br>") +
+ "<a href=\"https://saturneric.github.io/GpgFrontend/index.html#/overview\">"
+ + tr("The Online Document") + "</a>"
+ +
+ tr(" will get you started with GPGFrontend. It will open in the main window.<br>"));
bottomLabel->setTextFormat(Qt::RichText);
bottomLabel->setTextInteractionFlags(Qt::TextBrowserInteraction);
diff --git a/src/ui/help/AboutDialog.cpp b/src/ui/help/AboutDialog.cpp
index 807c509d..8fb504db 100644
--- a/src/ui/help/AboutDialog.cpp
+++ b/src/ui/help/AboutDialog.cpp
@@ -37,7 +37,7 @@ AboutDialog::AboutDialog(int defaultIndex, QWidget *parent)
auto *tabWidget = new QTabWidget;
auto *infoTab = new InfoTab();
auto *translatorsTab = new TranslatorsTab();
- auto *updateTab = new UpdateTab();
+ updateTab = new UpdateTab();
tabWidget->addTab(infoTab, tr("General"));
tabWidget->addTab(translatorsTab, tr("Translators"));
@@ -45,9 +45,6 @@ AboutDialog::AboutDialog(int defaultIndex, QWidget *parent)
connect(tabWidget, &QTabWidget::currentChanged, this, [&](int index) {
qDebug() << "Current Index" << index;
- if(index == 2) {
- updateTab->getLatestVersion();
- }
});
if(defaultIndex < tabWidget->count() && defaultIndex >= 0) {
@@ -62,7 +59,14 @@ AboutDialog::AboutDialog(int defaultIndex, QWidget *parent)
mainLayout->addWidget(buttonBox);
setLayout(mainLayout);
- this->exec();
+ this->resize(320, 580);
+
+ this->show();
+}
+
+void AboutDialog::showEvent(QShowEvent *ev) {
+ QDialog::showEvent(ev);
+ updateTab->getLatestVersion();
}
InfoTab::InfoTab(QWidget *parent)
@@ -157,6 +161,8 @@ UpdateTab::UpdateTab(QWidget *parent) {
layout->addItem(new QSpacerItem(20, 10, QSizePolicy::Minimum,
QSizePolicy::Fixed), 2, 1, 1, 1);
+ connect(this, SIGNAL(replyFromUpdateServer(QByteArray)), this, SLOT(processReplyDataFromUpdateServer(QByteArray)));
+
setLayout(layout);
}
@@ -172,44 +178,42 @@ void UpdateTab::getLatestVersion() {
QNetworkRequest request;
request.setUrl(QUrl(baseUrl));
-
QNetworkReply *replay = manager->get(request);
+ auto thread = QThread::create([replay, this]() {
+ while(replay->isRunning()) QApplication::processEvents();
+ emit replyFromUpdateServer(replay->readAll());
+ });
+ connect(thread, SIGNAL(finished()), thread, SLOT(deleteLater()));
+ thread->start();
- while(replay->isRunning()) {
- QApplication::processEvents();
- }
+}
+
+void UpdateTab::processReplyDataFromUpdateServer(const QByteArray& data) {
- this->pb->setHidden(true);
+ qDebug() << "Try to Process Reply Data From Update Server";
- if(replay->error() != QNetworkReply::NoError) {
+ this->pb->setHidden(true);
+
+ Document d;
+ if (d.Parse(data.constData()).HasParseError() || !d.IsObject()) {
qDebug() << "VersionCheckThread Found Network Error";
auto latestVersion = "Unknown";
latestVersionLabel->setText("<center><b>" + tr("Latest Version From Github: ") + latestVersion + "</b></center>");
return;
}
- QByteArray bytes = replay->readAll();
-
- Document d;
- d.Parse(bytes.constData());
-
QString latestVersion = d["tag_name"].GetString();
qDebug() << "Latest Version From Github" << latestVersion;
- QRegularExpression re("^[vV](\\d+\\.)?(\\d+\\.)?(\\*|\\d+)");
+ QRegularExpression re(R"(^[vV](\d+\.)?(\d+\.)?(\*|\d+))");
QRegularExpressionMatch match = re.match(latestVersion);
if (match.hasMatch()) {
- latestVersion = match.captured(0); // matched == "23 def"
+ latestVersion = match.captured(0);
qDebug() << "Latest Version Matched" << latestVersion;
- } else {
- latestVersion = "Unknown";
- }
+ } else latestVersion = "Unknown";
latestVersionLabel->setText("<center><b>" + tr("Latest Version From Github: ") + latestVersion + "</b></center>");
- if(latestVersion > currentVersion) {
- upgradeLabel->setHidden(false);
- }
-
+ if(latestVersion > currentVersion) upgradeLabel->setHidden(false);
}
diff --git a/src/ui/help/VersionCheckThread.cpp b/src/ui/help/VersionCheckThread.cpp
index c7c77d1c..bf1bbeda 100644
--- a/src/ui/help/VersionCheckThread.cpp
+++ b/src/ui/help/VersionCheckThread.cpp
@@ -1,6 +1,26 @@
-//
-// Created by Administrator on 2021/7/12.
-//
+/**
+ * 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.
+ *
+ * Foobar 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 Foobar. If not, see <https://www.gnu.org/licenses/>.
+ *
+ * The initial version of the source code is inherited from gpg4usb-team.
+ * Their source code version also complies with GNU General Public License.
+ *
+ * The source code version of this software was modified and released
+ * by Saturneric<[email protected]> starting on May 12, 2021.
+ *
+ */
#include "ui/help/VersionCheckThread.h"
#include "GpgFrontendBuildInfo.h"
diff --git a/src/ui/keygen/KeygenDialog.cpp b/src/ui/keygen/KeygenDialog.cpp
index 7991ddd1..98216dc6 100644
--- a/src/ui/keygen/KeygenDialog.cpp
+++ b/src/ui/keygen/KeygenDialog.cpp
@@ -23,6 +23,7 @@
*/
#include "ui/keygen/KeygenDialog.h"
+#include "ui/WaitingDialog.h"
KeyGenDialog::KeyGenDialog(GpgME::GpgContext *ctx, QWidget *parent)
: QDialog(parent), mCtx(ctx) {
@@ -92,34 +93,28 @@ void KeyGenDialog::slotKeyGenAccept() {
genKeyInfo.setExpired(dateEdit->dateTime());
}
- kg = new KeyGenThread(&genKeyInfo, mCtx);
- connect(kg, SIGNAL(signalKeyGenerated(bool)), this, SLOT(slotKeyGenResult(bool)));
- kg->start();
-
- this->accept();
-
- auto *dialog = new QDialog(this, Qt::CustomizeWindowHint | Qt::WindowTitleHint);
- dialog->setModal(true);
- dialog->setWindowTitle(tr("Generating Key..."));
-
- auto *waitMessage = new QLabel(
- tr("Collecting random data for key generation.\n This may take a while.\n To speed up the process use your computer\n (e.g. browse the net, listen to music,...)"));
- auto *pb = new QProgressBar();
- pb->setRange(0, 0);
-
- auto *layout = new QVBoxLayout(dialog);
- layout->addWidget(waitMessage);
- layout->addWidget(pb);
- dialog->setLayout(layout);
+ gpgme_error_t error = false;
+ auto thread = QThread::create([&]() {
+ error = mCtx->generateKey(&genKeyInfo);
+ });
+ thread->start();
+ auto *dialog = new WaitingDialog("Generating", this);
dialog->show();
- while (kg->isRunning()) {
+ while (thread->isRunning()) {
QCoreApplication::processEvents();
}
dialog->close();
+ if(gpgme_err_code(error) == GPG_ERR_NO_ERROR) {
+ QMessageBox::information(this, tr("Success"), tr("The new key pair has been generated."));
+ this->close();
+ }
+ else
+ QMessageBox::critical(this, tr("Failure"), tr(gpgme_strerror(error)));
+
} else {
/**
* create error message
@@ -307,13 +302,6 @@ bool KeyGenDialog::check_email_address(const QString &str) {
return re_email.match(str).hasMatch();
}
-void KeyGenDialog::slotKeyGenResult(bool success) {
- if(success)
- QMessageBox::information(nullptr, tr("Success"), tr("The new key pair has been generated."));
- else
- QMessageBox::critical(nullptr, tr("Failure"), tr("An error occurred during key generation."));
-}
-
QGroupBox *KeyGenDialog::create_basic_info_group_box() {
errorLabel = new QLabel(tr(""));
diff --git a/src/ui/keygen/SubkeyGenerateDialog.cpp b/src/ui/keygen/SubkeyGenerateDialog.cpp
index c545381f..3d709d81 100644
--- a/src/ui/keygen/SubkeyGenerateDialog.cpp
+++ b/src/ui/keygen/SubkeyGenerateDialog.cpp
@@ -23,6 +23,7 @@
*/
#include "ui/keygen/SubkeyGenerateDialog.h"
+#include "ui/WaitingDialog.h"
SubkeyGenerateDialog::SubkeyGenerateDialog(GpgME::GpgContext *ctx, const GpgKey &key, QWidget *parent)
: genKeyInfo(true), mCtx(ctx), mKey(key), QDialog(parent) {
@@ -224,34 +225,27 @@ void SubkeyGenerateDialog::slotKeyGenAccept() {
genKeyInfo.setExpired(dateEdit->dateTime());
}
- kg = new SubkeyGenerateThread(mKey ,&genKeyInfo, mCtx);
- connect(kg, SIGNAL(signalKeyGenerated(bool)), this, SLOT(slotKeyGenResult(bool)));
- kg->start();
-
- this->accept();
-
- auto *dialog = new QDialog(this, Qt::CustomizeWindowHint | Qt::WindowTitleHint);
- dialog->setModal(true);
- dialog->setWindowTitle(tr("Generating Subkey..."));
-
- auto *waitMessage = new QLabel(
- tr("Collecting random data for subkey generation.\n This may take a while.\n To speed up the process use your computer\n (e.g. browse the net, listen to music,...)"));
- auto *pb = new QProgressBar();
- pb->setRange(0, 0);
-
- auto *layout = new QVBoxLayout(dialog);
- layout->addWidget(waitMessage);
- layout->addWidget(pb);
- dialog->setLayout(layout);
+ gpgme_error_t error = false;
+ auto thread = QThread::create([&]() {
+ error = mCtx->generateSubkey(mKey, &genKeyInfo);
+ });
+ thread->start();
+ auto *dialog = new WaitingDialog("Generating", this);
dialog->show();
- while (!kg->isFinished() && kg->isRunning()) {
+ while (thread->isRunning()) {
QCoreApplication::processEvents();
}
dialog->close();
+ if (gpgme_err_code(error) == GPG_ERR_NO_ERROR) {
+ QMessageBox::information(nullptr, tr("Success"), tr("The new subkey has been generated."));
+ this->close();
+ } else
+ QMessageBox::critical(this, tr("Failure"), tr(gpgme_strerror(error)));
+
} else {
/**
* create error message
@@ -303,10 +297,3 @@ void SubkeyGenerateDialog::slotActivatedKeyType(int index) {
genKeyInfo.setAlgo(this->keyTypeComboBox->itemText(index));
refresh_widgets_state();
}
-
-void SubkeyGenerateDialog::slotKeyGenResult(bool success) {
- if(success)
- QMessageBox::information(nullptr, tr("Success"), tr("The new subkey has been generated."));
- else
- QMessageBox::critical(nullptr, tr("Failure"), tr("An error occurred during subkey generation."));
-}
diff --git a/src/ui/keypair_details/EditSubKeyDialog.cpp b/src/ui/keypair_details/EditSubKeyDialog.cpp
index 5e26a098..e44c987f 100644
--- a/src/ui/keypair_details/EditSubKeyDialog.cpp
+++ b/src/ui/keypair_details/EditSubKeyDialog.cpp
@@ -1,5 +1,25 @@
-//
-// Created by eric on 2021/6/2.
-//
+/**
+ * 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.
+ *
+ * Foobar 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 Foobar. If not, see <https://www.gnu.org/licenses/>.
+ *
+ * The initial version of the source code is inherited from gpg4usb-team.
+ * Their source code version also complies with GNU General Public License.
+ *
+ * The source code version of this software was modified and released
+ * by Saturneric<[email protected]> starting on May 12, 2021.
+ *
+ */
#include "ui/keypair_details/EditSubKeyDialog.h"
diff --git a/src/ui/keypair_details/KeyPairDetailTab.cpp b/src/ui/keypair_details/KeyPairDetailTab.cpp
index 9ca4e37e..c0a2df99 100644
--- a/src/ui/keypair_details/KeyPairDetailTab.cpp
+++ b/src/ui/keypair_details/KeyPairDetailTab.cpp
@@ -147,7 +147,6 @@ KeyPairDetailTab::KeyPairDetailTab(GpgME::GpgContext *ctx, const GpgKey &mKey, Q
keyServerOperaButton->setStyleSheet("text-align:center;");
auto *revokeCertGenButton = new QPushButton(tr("Generate Revoke Certificate"));
- revokeCertGenButton->setDisabled(true);
connect(revokeCertGenButton, SIGNAL(clicked()), this, SLOT(slotGenRevokeCert()));
hBoxLayout->addWidget(keyServerOperaButton);
@@ -215,7 +214,11 @@ void KeyPairDetailTab::slotExportPrivateKey() {
return;
}
- auto &key = mCtx->getKeyById(*keyid);
+ auto key = mCtx->getKeyById(*keyid);
+ if (!key.good) {
+ QMessageBox::critical(nullptr, tr("Error"), tr("Key Not Found."));
+ return;
+ }
QString fileString = key.name + " " + key.email + "(" +
key.id + ")_secret.asc";
QString fileName = QFileDialog::getSaveFileName(this, tr("Export Key To File"), fileString,
@@ -342,15 +345,8 @@ void KeyPairDetailTab::slotGenRevokeCert() {
QStringLiteral("%1 (*.rev)").arg(
tr("Revocation Certificates")));
- auto process = mCtx->generateRevokeCert(mKey, mOutputFileName);
-
- auto *dialog = new WaitingDialog("Generating", this);
-
- while (process->state() == QProcess::Running) {
- QApplication::processEvents();
- }
-
- dialog->close();
+ if (!mOutputFileName.isEmpty())
+ mCtx->generateRevokeCert(mKey, mOutputFileName);
}
diff --git a/src/ui/keypair_details/KeyPairSubkeyTab.cpp b/src/ui/keypair_details/KeyPairSubkeyTab.cpp
index 74b52284..6a924394 100644
--- a/src/ui/keypair_details/KeyPairSubkeyTab.cpp
+++ b/src/ui/keypair_details/KeyPairSubkeyTab.cpp
@@ -132,9 +132,8 @@ void KeyPairSubkeyTab::slotRefreshSubkeyList() {
this->buffered_subkeys.clear();
for(const auto &subkeys : mKey.subKeys) {
- if(subkeys.disabled || subkeys.revoked) {
+ if(subkeys.disabled || subkeys.revoked)
continue;
- }
this->buffered_subkeys.push_back(&subkeys);
}
diff --git a/src/ui/keypair_details/KeyUIDSignDialog.cpp b/src/ui/keypair_details/KeyUIDSignDialog.cpp
index f112ea25..9232cfce 100644
--- a/src/ui/keypair_details/KeyUIDSignDialog.cpp
+++ b/src/ui/keypair_details/KeyUIDSignDialog.cpp
@@ -89,13 +89,12 @@ void KeyUIDSignDialog::slotSignKey(bool clicked) {
// Set Signers
QVector<GpgKey> keys;
mKeyList->getCheckedKeys(keys);
- mCtx->setSigners(keys);
const auto expires = expiresEdit->dateTime();
for(const auto &uid : mUids) {
// Sign For mKey
- if (!mCtx->signKey(mKey, uid.uid, &expires)) {
+ if (!mCtx->signKey(mKey, keys, uid.uid, &expires)) {
QMessageBox::critical(nullptr,
tr("Unsuccessful Operation"),
QString(tr("Signature operation failed for UID ") + "%1")
diff --git a/src/ui/main_window/MainWindowFileSlotFunction.cpp b/src/ui/main_window/MainWindowFileSlotFunction.cpp
new file mode 100644
index 00000000..e391c666
--- /dev/null
+++ b/src/ui/main_window/MainWindowFileSlotFunction.cpp
@@ -0,0 +1,610 @@
+/**
+ * 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.
+ *
+ * Foobar 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 Foobar. If not, see <https://www.gnu.org/licenses/>.
+ *
+ * The initial version of the source code is inherited from gpg4usb-team.
+ * Their source code version also complies with GNU General Public License.
+ *
+ * The source code version of this software was modified and released
+ * by Saturneric<[email protected]> starting on May 12, 2021.
+ *
+ */
+
+#include "MainWindow.h"
+
+void MainWindow::slotFileEncrypt() {
+
+ auto fileTreeView = edit->slotCurPageFileTreeView();
+ auto path = fileTreeView->getSelected();
+
+ QFileInfo fileInfo(path);
+ QFileInfo pathInfo(fileInfo.absolutePath());
+
+ if (!fileInfo.isFile()) {
+ QMessageBox::critical(this, tr("Error"), tr("Select a file before doing it."));
+ return;
+ }
+ if (!fileInfo.isReadable()) {
+ QMessageBox::critical(this, tr("Error"), tr("No permission to read this file."));
+ return;
+ }
+ if (!pathInfo.isWritable()) {
+ QMessageBox::critical(this, tr("Error"), tr("No permission to create file."));
+ return;
+ }
+ if (QFile::exists(path + ".asc")) {
+ auto ret = QMessageBox::warning(this,
+ tr("Warning"),
+ tr("The target file already exists, do you need to overwrite it?"),
+ QMessageBox::Ok | QMessageBox::Cancel);
+
+ if (ret == QMessageBox::Cancel)
+ return;
+ }
+
+ QVector<GpgKey> keys;
+
+ mKeyList->getCheckedKeys(keys);
+
+ if (keys.empty()) {
+ QMessageBox::critical(this, tr("No Key Selected"), tr("No Key Selected"));
+ return;
+ }
+
+ for (const auto &key : keys) {
+ if (!GpgME::GpgContext::checkIfKeyCanEncr(key)) {
+ QMessageBox::information(this,
+ tr("Invalid Operation"),
+ tr("The selected key contains a key that does not actually have a encrypt usage.<br/>")
+ + tr("<br/>For example the Following Key: <br/>") + key.uids.first().uid);
+ return;
+
+ }
+ }
+
+ gpgme_encrypt_result_t result;
+
+ gpgme_error_t error;
+ bool if_error = false;
+ auto thread = QThread::create([&]() {
+ try {
+ error = GpgFileOpera::encryptFile(mCtx, keys, path, &result);
+ } catch (const std::runtime_error &e) {
+ if_error = true;
+ }
+ });
+ connect(thread, SIGNAL(finished()), thread, SLOT(deleteLater()));
+ thread->start();
+
+ auto *dialog = new WaitingDialog(tr("Encrypting"), this);
+ while (thread->isRunning()) {
+ QApplication::processEvents();
+ }
+
+ dialog->close();
+ if (!if_error) {
+ auto resultAnalyse = new EncryptResultAnalyse(error, result);
+ auto &reportText = resultAnalyse->getResultReport();
+ infoBoard->associateTabWidget(edit->tabWidget);
+ infoBoard->associateFileTreeView(edit->curFilePage());
+
+ if (resultAnalyse->getStatus() < 0)
+ infoBoard->slotRefresh(reportText, INFO_ERROR_CRITICAL);
+ else if (resultAnalyse->getStatus() > 0)
+ infoBoard->slotRefresh(reportText, INFO_ERROR_OK);
+ else
+ infoBoard->slotRefresh(reportText, INFO_ERROR_WARN);
+
+ delete resultAnalyse;
+
+ fileTreeView->update();
+ } else {
+ QMessageBox::critical(this, tr("Error"), tr("An error occurred during operation."));
+ return;
+ }
+}
+
+void MainWindow::slotFileDecrypt() {
+
+ auto fileTreeView = edit->slotCurPageFileTreeView();
+ auto path = fileTreeView->getSelected();
+
+ QFileInfo fileInfo(path);
+ QFileInfo pathInfo(fileInfo.absolutePath());
+ if (!fileInfo.isFile()) {
+ QMessageBox::critical(this, tr("Error"), tr("Select a file before doing it."));
+ return;
+ }
+ if (!fileInfo.isReadable()) {
+ QMessageBox::critical(this, tr("Error"), tr("No permission to read this file."));
+ return;
+ }
+ if (!pathInfo.isWritable()) {
+ QMessageBox::critical(this, tr("Error"), tr("No permission to create file."));
+ return;
+ }
+
+ QString outFileName, fileExtension = fileInfo.suffix();
+
+ if (fileExtension == "asc" || fileExtension == "gpg") {
+ int pos = path.lastIndexOf(QChar('.'));
+ outFileName = path.left(pos);
+ } else {
+ outFileName = path + ".out";
+ }
+
+ if (QFile::exists(outFileName)) {
+ auto ret = QMessageBox::warning(this,
+ tr("Warning"),
+ tr("The target file already exists, do you need to overwrite it?"),
+ QMessageBox::Ok | QMessageBox::Cancel);
+
+ if (ret == QMessageBox::Cancel)
+ return;
+ }
+
+ gpgme_decrypt_result_t result;
+ gpgme_error_t error;
+ bool if_error = false;
+
+ auto thread = QThread::create([&]() {
+ try {
+ error = GpgFileOpera::decryptFile(mCtx, path, &result);
+ } catch (const std::runtime_error &e) {
+ if_error = true;
+ }
+ });
+ connect(thread, SIGNAL(finished()), thread, SLOT(deleteLater()));
+ thread->start();
+
+ auto *dialog = new WaitingDialog("Decrypting", this);
+ while (thread->isRunning()) {
+ QApplication::processEvents();
+ }
+
+ dialog->close();
+
+ if (!if_error) {
+ auto resultAnalyse = new DecryptResultAnalyse(mCtx, error, result);
+ auto &reportText = resultAnalyse->getResultReport();
+ infoBoard->associateTabWidget(edit->tabWidget);
+ infoBoard->associateFileTreeView(edit->curFilePage());
+
+ if (resultAnalyse->getStatus() < 0)
+ infoBoard->slotRefresh(reportText, INFO_ERROR_CRITICAL);
+ else if (resultAnalyse->getStatus() > 0)
+ infoBoard->slotRefresh(reportText, INFO_ERROR_OK);
+ else
+ infoBoard->slotRefresh(reportText, INFO_ERROR_WARN);
+
+ delete resultAnalyse;
+
+ fileTreeView->update();
+ } else {
+ QMessageBox::critical(this, tr("Error"), tr("An error occurred during operation."));
+ return;
+ }
+
+
+}
+
+void MainWindow::slotFileSign() {
+
+ auto fileTreeView = edit->slotCurPageFileTreeView();
+ auto path = fileTreeView->getSelected();
+
+ QFileInfo fileInfo(path);
+ QFileInfo pathInfo(fileInfo.absolutePath());
+
+ if (!fileInfo.isFile()) {
+ QMessageBox::critical(this, tr("Error"), tr("Select a file before doing it."));
+ return;
+ }
+ if (!fileInfo.isReadable()) {
+ QMessageBox::critical(this, tr("Error"), tr("No permission to read this file."));
+ return;
+ }
+ if (!pathInfo.isWritable()) {
+ QMessageBox::critical(this, tr("Error"), tr("No permission to create file."));
+ return;
+ }
+
+ if (QFile::exists(path + ".sig")) {
+ auto ret = QMessageBox::warning(this,
+ tr("Warning"),
+ tr("The target file already exists, do you need to overwrite it?"),
+ QMessageBox::Ok | QMessageBox::Cancel);
+
+ if (ret == QMessageBox::Cancel)
+ return;
+ }
+
+ QVector<GpgKey> keys;
+
+ mKeyList->getCheckedKeys(keys);
+
+ if (keys.empty()) {
+ QMessageBox::critical(this, tr("No Key Selected"), tr("No Key Selected"));
+ return;
+ }
+
+ for (const auto &key : keys) {
+ if (!GpgME::GpgContext::checkIfKeyCanEncr(key)) {
+ QMessageBox::information(this,
+ tr("Invalid Operation"),
+ tr("The selected key contains a key that does not actually have a encrypt usage.<br/>")
+ + tr("<br/>For example the Following Key: <br/>") + key.uids.first().uid);
+ return;
+
+ }
+ }
+
+ gpgme_sign_result_t result;
+ gpgme_error_t error;
+ bool if_error = false;
+
+ auto thread = QThread::create([&]() {
+ try {
+ error = GpgFileOpera::signFile(mCtx, keys, path, &result);
+ } catch (const std::runtime_error &e) {
+ if_error = true;
+ }
+ });
+ connect(thread, SIGNAL(finished()), thread, SLOT(deleteLater()));
+ thread->start();
+
+ auto *dialog = new WaitingDialog(tr("Signing"), this);
+ while (thread->isRunning()) {
+ QApplication::processEvents();
+ }
+
+ dialog->close();
+
+ if (!if_error) {
+
+ auto resultAnalyse = new SignResultAnalyse(mCtx, error, result);
+ auto &reportText = resultAnalyse->getResultReport();
+ infoBoard->associateTabWidget(edit->tabWidget);
+ infoBoard->associateFileTreeView(edit->curFilePage());
+
+ if (resultAnalyse->getStatus() < 0)
+ infoBoard->slotRefresh(reportText, INFO_ERROR_CRITICAL);
+ else if (resultAnalyse->getStatus() > 0)
+ infoBoard->slotRefresh(reportText, INFO_ERROR_OK);
+ else
+ infoBoard->slotRefresh(reportText, INFO_ERROR_WARN);
+
+ delete resultAnalyse;
+
+ fileTreeView->update();
+
+ } else {
+ QMessageBox::critical(this, tr("Error"), tr("An error occurred during operation."));
+ return;
+ }
+
+ fileTreeView->update();
+
+}
+
+void MainWindow::slotFileVerify() {
+
+ auto fileTreeView = edit->slotCurPageFileTreeView();
+ auto path = fileTreeView->getSelected();
+
+ QFileInfo fileInfo(path);
+
+ QString signFilePath, dataFilePath;
+
+ if (fileInfo.suffix() == "gpg") {
+ dataFilePath = path;
+ signFilePath = path;
+ } else if (fileInfo.suffix() == "sig") {
+ int pos = path.lastIndexOf(QChar('.'));
+ dataFilePath = path.left(pos);
+ signFilePath = path;
+ } else {
+ dataFilePath = path;
+ signFilePath = path + ".sig";
+ }
+
+ QFileInfo dataFileInfo(dataFilePath), signFileInfo(signFilePath);
+
+ if (!dataFileInfo.isFile() || !signFileInfo.isFile()) {
+ QMessageBox::critical(this, tr("Error"),
+ tr("Please select the appropriate target file or signature file. Ensure that both are in this directory."));
+ return;
+ }
+ if (!dataFileInfo.isReadable()) {
+ QMessageBox::critical(this, tr("Error"), tr("No permission to read target file."));
+ return;
+ }
+ if (!fileInfo.isReadable()) {
+ QMessageBox::critical(this, tr("Error"), tr("No permission to read signature file."));
+ return;
+ }
+
+ gpgme_verify_result_t result;
+
+ gpgme_error_t error;
+ bool if_error = false;
+ auto thread = QThread::create([&]() {
+ try {
+ error = GpgFileOpera::verifyFile(mCtx, dataFilePath, &result);
+ } catch (const std::runtime_error &e) {
+ if_error = true;
+ }
+ });
+ connect(thread, SIGNAL(finished()), thread, SLOT(deleteLater()));
+ thread->start();
+
+ auto *dialog = new WaitingDialog(tr("Verifying"), this);
+ while (thread->isRunning()) {
+ QApplication::processEvents();
+ }
+ dialog->close();
+
+ if (!if_error) {
+ auto resultAnalyse = new VerifyResultAnalyse(mCtx, error, result);
+ auto &reportText = resultAnalyse->getResultReport();
+ infoBoard->associateTabWidget(edit->tabWidget);
+ infoBoard->associateFileTreeView(edit->curFilePage());
+
+ if (resultAnalyse->getStatus() < 0)
+ infoBoard->slotRefresh(reportText, INFO_ERROR_CRITICAL);
+ else if (resultAnalyse->getStatus() > 0)
+ infoBoard->slotRefresh(reportText, INFO_ERROR_OK);
+ else
+ infoBoard->slotRefresh(reportText, INFO_ERROR_WARN);
+
+ if (resultAnalyse->getStatus() >= 0) {
+ infoBoard->resetOptionActionsMenu();
+ infoBoard->addOptionalAction("Show Verify Details", [this, error, result]() {
+ VerifyDetailsDialog(this, mCtx, mKeyList, error, result);
+ });
+ }
+
+ delete resultAnalyse;
+
+ fileTreeView->update();
+ } else {
+ QMessageBox::critical(this, tr("Error"), tr("An error occurred during operation."));
+ return;
+ }
+}
+
+void MainWindow::slotFileEncryptSign() {
+ auto fileTreeView = edit->slotCurPageFileTreeView();
+ auto path = fileTreeView->getSelected();
+
+ QFileInfo fileInfo(path);
+ QFileInfo pathInfo(fileInfo.absolutePath());
+
+ if (!fileInfo.isFile()) {
+ QMessageBox::critical(this, tr("Error"), tr("Select a file before doing it."));
+ return;
+ }
+ if (!fileInfo.isReadable()) {
+ QMessageBox::critical(this, tr("Error"), tr("No permission to read this file."));
+ return;
+ }
+ if (!pathInfo.isWritable()) {
+ QMessageBox::critical(this, tr("Error"), tr("No permission to create file."));
+ return;
+ }
+ if (QFile::exists(path + ".gpg")) {
+ auto ret = QMessageBox::warning(this,
+ tr("Warning"),
+ tr("The target file already exists, do you need to overwrite it?"),
+ QMessageBox::Ok | QMessageBox::Cancel);
+
+ if (ret == QMessageBox::Cancel)
+ return;
+ }
+
+ QVector<GpgKey> keys;
+
+ mKeyList->getCheckedKeys(keys);
+
+ if (keys.empty()) {
+ QMessageBox::critical(this, tr("No Key Selected"), tr("No Key Selected"));
+ return;
+ }
+
+ bool can_sign = false, can_encr = false;
+
+ for (const auto &key : keys) {
+ bool key_can_sign = GpgME::GpgContext::checkIfKeyCanSign(key);
+ bool key_can_encr = GpgME::GpgContext::checkIfKeyCanEncr(key);
+
+ if (!key_can_sign && !key_can_encr) {
+ QMessageBox::critical(nullptr,
+ tr("Invalid KeyPair"),
+ tr("The selected keypair cannot be used for signing and encryption at the same time.<br/>")
+ + tr("<br/>For example the Following Key: <br/>") + key.uids.first().uid);
+ return;
+ }
+
+ if (key_can_sign) can_sign = true;
+ if (key_can_encr) can_encr = true;
+ }
+
+ if (!can_encr) {
+ QMessageBox::critical(nullptr,
+ tr("Incomplete Operation"),
+ tr("None of the selected key pairs can provide the encryption function."));
+ return;
+ }
+
+ if (!can_sign) {
+ QMessageBox::warning(nullptr,
+ tr("Incomplete Operation"),
+ tr("None of the selected key pairs can provide the signature function."));
+ }
+
+ gpgme_encrypt_result_t encr_result = nullptr;
+ gpgme_sign_result_t sign_result = nullptr;
+
+ gpgme_error_t error;
+ bool if_error = false;
+
+ auto thread = QThread::create([&]() {
+ try {
+ error = GpgFileOpera::encryptSignFile(mCtx, keys, path, &encr_result, &sign_result);
+ } catch (const std::runtime_error &e) {
+ if_error = true;
+ }
+ });
+ connect(thread, SIGNAL(finished()), thread, SLOT(deleteLater()));
+ thread->start();
+
+ auto *dialog = new WaitingDialog(tr("Encrypting and Signing"), this);
+ while (thread->isRunning()) {
+ QApplication::processEvents();
+ }
+ dialog->close();
+
+ if (!if_error) {
+
+ auto resultAnalyseEncr = new EncryptResultAnalyse(error, encr_result);
+ auto resultAnalyseSign = new SignResultAnalyse(mCtx, error, sign_result);
+ int status = std::min(resultAnalyseEncr->getStatus(), resultAnalyseSign->getStatus());
+ auto reportText = resultAnalyseEncr->getResultReport() + resultAnalyseSign->getResultReport();
+
+ infoBoard->associateFileTreeView(edit->curFilePage());
+
+ if (status < 0)
+ infoBoard->slotRefresh(reportText, INFO_ERROR_CRITICAL);
+ else if (status > 0)
+ infoBoard->slotRefresh(reportText, INFO_ERROR_OK);
+ else
+ infoBoard->slotRefresh(reportText, INFO_ERROR_WARN);
+
+ delete resultAnalyseEncr;
+ delete resultAnalyseSign;
+
+ fileTreeView->update();
+
+ } else {
+ QMessageBox::critical(this, tr("Error"), tr("An error occurred during operation."));
+ return;
+ }
+}
+
+void MainWindow::slotFileDecryptVerify() {
+ auto fileTreeView = edit->slotCurPageFileTreeView();
+ auto path = fileTreeView->getSelected();
+
+ QFileInfo fileInfo(path);
+ QFileInfo pathInfo(fileInfo.absolutePath());
+ if (!fileInfo.isFile()) {
+ QMessageBox::critical(this, tr("Error"), tr("Select a file(.gpg/.asc) before doing it."));
+ return;
+ }
+ if (!fileInfo.isReadable()) {
+ QMessageBox::critical(this, tr("Error"), tr("No permission to read this file."));
+ return;
+ }
+ if (!pathInfo.isWritable()) {
+ QMessageBox::critical(this, tr("Error"), tr("No permission to create file."));
+ return;
+ }
+
+ QString outFileName, fileExtension = fileInfo.suffix();
+
+ if (fileExtension == "asc" || fileExtension == "gpg") {
+ int pos = path.lastIndexOf(QChar('.'));
+ outFileName = path.left(pos);
+ } else {
+ outFileName = path + ".out";
+ }
+
+ gpgme_decrypt_result_t d_result = nullptr;
+ gpgme_verify_result_t v_result = nullptr;
+
+ gpgme_error_t error;
+ bool if_error = false;
+
+ auto thread = QThread::create([&]() {
+ try {
+ error = GpgFileOpera::decryptVerifyFile(mCtx, path, &d_result, &v_result);
+ } catch (const std::runtime_error &e) {
+ if_error = true;
+ }
+ });
+ connect(thread, SIGNAL(finished()), thread, SLOT(deleteLater()));
+ thread->start();
+
+
+ auto *dialog = new WaitingDialog(tr("Decrypting and Verifying"), this);
+ while (thread->isRunning()) {
+ QApplication::processEvents();
+ }
+ dialog->close();
+
+ if (!if_error) {
+ infoBoard->associateFileTreeView(edit->curFilePage());
+
+ auto resultAnalyseDecrypt = new DecryptResultAnalyse(mCtx, error, d_result);
+ auto resultAnalyseVerify = new VerifyResultAnalyse(mCtx, error, v_result);
+
+ int status = std::min(resultAnalyseDecrypt->getStatus(), resultAnalyseVerify->getStatus());
+ auto &reportText = resultAnalyseDecrypt->getResultReport() + resultAnalyseVerify->getResultReport();
+ if (status < 0)
+ infoBoard->slotRefresh(reportText, INFO_ERROR_CRITICAL);
+ else if (status > 0)
+ infoBoard->slotRefresh(reportText, INFO_ERROR_OK);
+ else
+ infoBoard->slotRefresh(reportText, INFO_ERROR_WARN);
+
+ if (resultAnalyseVerify->getStatus() >= 0) {
+ infoBoard->resetOptionActionsMenu();
+ infoBoard->addOptionalAction("Show Verify Details", [this, error, v_result]() {
+ VerifyDetailsDialog(this, mCtx, mKeyList, error, v_result);
+ });
+ }
+ delete resultAnalyseDecrypt;
+ delete resultAnalyseVerify;
+
+ fileTreeView->update();
+ } else {
+ QMessageBox::critical(this, tr("Error"), tr("An error occurred during operation."));
+ return;
+ }
+}
+
+void MainWindow::slotFileEncryptCustom() {
+ QStringList *keyList;
+ keyList = mKeyList->getChecked();
+ new FileEncryptionDialog(mCtx, *keyList, FileEncryptionDialog::Encrypt, this);
+}
+
+void MainWindow::slotFileDecryptCustom() {
+ QStringList *keyList;
+ keyList = mKeyList->getChecked();
+ new FileEncryptionDialog(mCtx, *keyList, FileEncryptionDialog::Decrypt, this);
+}
+
+void MainWindow::slotFileSignCustom() {
+ QStringList *keyList;
+ keyList = mKeyList->getChecked();
+ new FileEncryptionDialog(mCtx, *keyList, FileEncryptionDialog::Sign, this);
+}
+
+void MainWindow::slotFileVerifyCustom() {
+ QStringList *keyList;
+ keyList = mKeyList->getChecked();
+ new FileEncryptionDialog(mCtx, *keyList, FileEncryptionDialog::Verify, this);
+}
diff --git a/src/ui/main_window/MainWindowServerSlotFunction.cpp b/src/ui/main_window/MainWindowServerSlotFunction.cpp
new file mode 100644
index 00000000..3a7e9f71
--- /dev/null
+++ b/src/ui/main_window/MainWindowServerSlotFunction.cpp
@@ -0,0 +1,238 @@
+/**
+ * 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.
+ *
+ * Foobar 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 Foobar. If not, see <https://www.gnu.org/licenses/>.
+ *
+ * The initial version of the source code is inherited from gpg4usb-team.
+ * Their source code version also complies with GNU General Public License.
+ *
+ * The source code version of this software was modified and released
+ * by Saturneric<[email protected]> starting on May 12, 2021.
+ *
+ */
+
+#include "MainWindow.h"
+#include "server/ComUtils.h"
+#include "ui/ShowCopyDialog.h"
+
+#include "rapidjson/document.h"
+#include "rapidjson/prettywriter.h"
+
+/**
+ * get full size crypt text from server using short crypto text
+ * @param shortenCryptoText short crypto text([GpgFrontend_ShortCrypto]://)
+ * @return
+ */
+QString MainWindow::getCryptText(const QString &shortenCryptoText) {
+
+ QString ownKeyId = settings.value("general/ownKeyId").toString();
+
+ GpgKey key = mCtx->getKeyById(ownKeyId);
+ if (!key.good) {
+ QMessageBox::critical(this, tr("Invalid Own Key"),
+ tr("Own Key can not be use to do any operation. "
+ "Please go to the setting interface to select an OwnKey and get a ServiceToken."));
+ return {};
+ }
+
+ auto utils = new ComUtils(this);
+
+ QString serviceToken = settings.value("general/serviceToken").toString();
+ if (serviceToken.isEmpty() || !utils->checkServiceTokenFormat(serviceToken)) {
+ QMessageBox::critical(this, tr("Error"),
+ tr("Please obtain a Service Token from the server in the settings."));
+ return {};
+ }
+
+ QUrl reqUrl(utils->getUrl(ComUtils::GetFullCryptText));
+ QNetworkRequest request(reqUrl);
+ request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
+
+ // Sign Shorten Text
+ auto outSignTextBase64 = ComUtils::getSignStringBase64(mCtx, shortenCryptoText, key);
+
+ rapidjson::Document doc;
+ doc.SetObject();
+
+ rapidjson::Value s, t;
+
+ // Signature
+ s.SetString(outSignTextBase64.constData(), outSignTextBase64.count());
+ // Service Token
+ const auto t_byte_array = serviceToken.toUtf8();
+ t.SetString(t_byte_array.constData(), t_byte_array.count());
+
+ rapidjson::Document::AllocatorType &allocator = doc.GetAllocator();
+
+ doc.AddMember("signature", s, allocator);
+ doc.AddMember("serviceToken", t, allocator);
+
+ rapidjson::StringBuffer sb;
+ rapidjson::PrettyWriter<rapidjson::StringBuffer> writer(sb);
+ doc.Accept(writer);
+
+ QByteArray postData(sb.GetString());
+ qDebug() << "postData" << QString::fromUtf8(postData);
+
+ QNetworkReply *reply = utils->getNetworkManager().post(request, postData);
+
+ auto dialog = new WaitingDialog(tr("Getting Cpt From Server"), this);
+ dialog->show();
+
+ while (reply->isRunning()) QApplication::processEvents();
+
+ dialog->close();
+
+ QByteArray replyData = reply->readAll().constData();
+ if (utils->checkServerReply(replyData)) {
+ /**
+ * {
+ * "cryptoText" : ...
+ * "sha": ...
+ * "serviceToken": ...
+ * "date": ...
+ * }
+ */
+
+ if (!utils->checkDataValueStr("cryptoText")
+ || !utils->checkDataValueStr("sha")
+ || !utils->checkDataValueStr("serviceToken")) {
+ QMessageBox::critical(this, tr("Error"),
+ tr("The communication content with the server does not meet the requirements"));
+ return {};
+ }
+
+ auto cryptoText = utils->getDataValueStr("cryptoText");
+ auto sha = utils->getDataValueStr("sha");
+ auto serviceTokenFromServer = utils->getDataValueStr("serviceToken");
+
+ QCryptographicHash sha_generator(QCryptographicHash::Sha256);
+ sha_generator.addData(cryptoText.toUtf8());
+
+ if (sha_generator.result().toHex() == sha && serviceToken == serviceTokenFromServer) {
+ return cryptoText;
+ } else QMessageBox::critical(this, tr("Error"), tr("Invalid short ciphertext"));
+
+ return {};
+ }
+
+ return {};
+}
+
+void MainWindow::shortenCryptText() {
+
+ // gather information
+ QString serviceToken = settings.value("general/serviceToken").toString();
+ QString ownKeyId = settings.value("general/ownKeyId").toString();
+ QByteArray cryptoText = edit->curTextPage()->toPlainText().toUtf8();
+
+ auto utils = new ComUtils(this);
+
+ if (serviceToken.isEmpty() || !utils->checkServiceTokenFormat(serviceToken)) {
+ QMessageBox::critical(this, tr("Invalid Service Token"),
+ tr("Please go to the setting interface to get a ServiceToken."));
+ return;
+ }
+
+ QUrl reqUrl(utils->getUrl(ComUtils::ShortenCryptText));
+ QNetworkRequest request(reqUrl);
+ request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
+
+ GpgKey key = mCtx->getKeyById(ownKeyId);
+ if (!key.good) {
+ QMessageBox::critical(this, tr("Invalid Own Key"), tr("Own Key can not be use to do any operation."));
+ return;
+ }
+
+ QCryptographicHash ch(QCryptographicHash::Md5);
+ ch.addData(cryptoText);
+ QString md5 = ch.result().toHex();
+
+ qDebug() << "md5" << md5;
+
+ QByteArray signText = QString("[%1][%2]").arg(serviceToken, md5).toUtf8();
+
+ QCryptographicHash sha(QCryptographicHash::Sha256);
+ sha.addData(signText);
+ QString shaText = sha.result().toHex();
+
+ qDebug() << "shaText" << shaText;
+
+ QByteArray outSignTextBase64 = ComUtils::getSignStringBase64(mCtx, signText, key);
+
+ rapidjson::Value c, s, m, t;
+
+ rapidjson::Document doc;
+ doc.SetObject();
+
+ c.SetString(cryptoText.constData(), cryptoText.count());
+ auto m_byte_array = shaText.toUtf8();
+ m.SetString(m_byte_array.constData(), m_byte_array.count());
+ s.SetString(outSignTextBase64.constData(), outSignTextBase64.count());
+ auto t_byte_array = serviceToken.toUtf8();
+ t.SetString(t_byte_array.constData(), t_byte_array.count());
+
+ rapidjson::Document::AllocatorType &allocator = doc.GetAllocator();
+
+ doc.AddMember("cryptoText", c, allocator);
+ doc.AddMember("sha", m, allocator);
+ doc.AddMember("sign", s, allocator);
+ doc.AddMember("serviceToken", t, allocator);
+
+ rapidjson::StringBuffer sb;
+ rapidjson::PrettyWriter<rapidjson::StringBuffer> writer(sb);
+ doc.Accept(writer);
+
+ QByteArray postData(sb.GetString());
+ qDebug() << "postData" << QString::fromUtf8(postData);
+
+ QNetworkReply *reply = networkAccessManager->post(request, postData);
+
+ auto *dialog = new WaitingDialog(tr("Getting Scpt From Server"), this);
+ dialog->show();
+ while (reply->isRunning()) QApplication::processEvents();
+ dialog->close();
+
+ if (utils->checkServerReply(reply->readAll().constData())) {
+
+ /**
+ * {
+ * "shortenText" : ...
+ * "md5": ...
+ * }
+ */
+
+ if (!utils->checkDataValueStr("shortenText") || !utils->checkDataValueStr("md5")) {
+ QMessageBox::critical(this, tr("Error"),
+ tr("The communication content with the server does not meet the requirements"));
+ return;
+ }
+
+ QString shortenText = utils->getDataValueStr("shortenText");
+
+ QCryptographicHash md5_generator(QCryptographicHash::Md5);
+ md5_generator.addData(shortenText.toUtf8());
+ if (md5_generator.result().toHex() == utils->getDataValueStr("md5")) {
+ auto *dialog = new ShowCopyDialog(shortenText,
+ tr("Notice: Use Decrypt & Verify operation to decrypt this short crypto text."),
+ this);
+ dialog->show();
+ } else {
+ QMessageBox::critical(this, tr("Error"), tr("There is a problem with the communication with the server"));
+ return;
+ }
+ }
+
+}
+
diff --git a/src/ui/main_window/MainWindowSlotFunction.cpp b/src/ui/main_window/MainWindowSlotFunction.cpp
index 4bcee080..501418d6 100644
--- a/src/ui/main_window/MainWindowSlotFunction.cpp
+++ b/src/ui/main_window/MainWindowSlotFunction.cpp
@@ -24,7 +24,14 @@
#include "MainWindow.h"
#include "ui/SendMailDialog.h"
+#include "ui/widgets/SignersPicker.h"
+#include "server/api/PubkeyUploader.h"
+#include "advance/UnknownSignersChecker.h"
+
+/**
+ * Encrypt Entry(Text & File)
+ */
void MainWindow::slotEncrypt() {
if (edit->tabCount() == 0) return;
@@ -50,33 +57,33 @@ void MainWindow::slotEncrypt() {
}
}
- auto *tmp = new QByteArray();
+ auto tmp = QByteArray();
gpgme_encrypt_result_t result = nullptr;
gpgme_error_t error;
auto thread = QThread::create([&]() {
- error = mCtx->encrypt(keys, edit->curTextPage()->toPlainText().toUtf8(), tmp, &result);
+ error = mCtx->encrypt(keys, edit->curTextPage()->toPlainText().toUtf8(), &tmp, &result);
});
- connect(thread, SIGNAL(finished(QPrivateSignal)), thread, SLOT(deleteLater()));
+ connect(thread, SIGNAL(finished()), thread, SLOT(deleteLater()));
thread->start();
auto *dialog = new WaitingDialog(tr("Encrypting"), this);
- while (thread->isRunning()) {
+ while (thread->isRunning())
QApplication::processEvents();
- }
dialog->close();
auto resultAnalyse = new EncryptResultAnalyse(error, result);
auto &reportText = resultAnalyse->getResultReport();
- auto *tmp2 = new QString(*tmp);
- edit->slotFillTextEditWithText(*tmp2);
+ auto tmp2 = QString(tmp);
+ edit->slotFillTextEditWithText(tmp2);
infoBoard->associateTextEdit(edit->curTextPage());
+ // check result analyse status
if (resultAnalyse->getStatus() < 0)
infoBoard->slotRefresh(reportText, INFO_ERROR_CRITICAL);
else if (resultAnalyse->getStatus() > 0)
@@ -84,10 +91,11 @@ void MainWindow::slotEncrypt() {
else
infoBoard->slotRefresh(reportText, INFO_ERROR_WARN);
+ // set optional actions
if (resultAnalyse->getStatus() >= 0) {
infoBoard->resetOptionActionsMenu();
infoBoard->addOptionalAction("Send Mail", [this]() {
- if(settings.value("sendMail/enable", false).toBool())
+ if (settings.value("sendMail/enable", false).toBool())
new SendMailDialog(edit->curTextPage()->toPlainText(), this);
else {
QMessageBox::warning(nullptr,
@@ -128,15 +136,15 @@ void MainWindow::slotSign() {
}
}
- auto *tmp = new QByteArray();
+ auto tmp = QByteArray();
gpgme_sign_result_t result = nullptr;
gpgme_error_t error;
auto thread = QThread::create([&]() {
- error = mCtx->sign(keys, edit->curTextPage()->toPlainText().toUtf8(), tmp, false, &result);
+ error = mCtx->sign(keys, edit->curTextPage()->toPlainText().toUtf8(), &tmp, GPGME_SIG_MODE_CLEAR, &result);
});
- connect(thread, SIGNAL(finished(QPrivateSignal)), thread, SLOT(deleteLater()));
+ connect(thread, SIGNAL(finished()), thread, SLOT(deleteLater()));
thread->start();
auto *dialog = new WaitingDialog(tr("Signing"), this);
@@ -146,9 +154,9 @@ void MainWindow::slotSign() {
dialog->close();
infoBoard->associateTextEdit(edit->curTextPage());
- edit->slotFillTextEditWithText(QString::fromUtf8(*tmp));
+ edit->slotFillTextEditWithText(QString::fromUtf8(tmp));
- auto resultAnalyse = new SignResultAnalyse(error, result);
+ auto resultAnalyse = new SignResultAnalyse(mCtx, error, result);
auto &reportText = resultAnalyse->getResultReport();
if (resultAnalyse->getStatus() < 0)
@@ -169,18 +177,23 @@ void MainWindow::slotDecrypt() {
if (edit->slotCurPageTextEdit() != nullptr) {
- auto *decrypted = new QByteArray();
+ auto decrypted = QByteArray();
QByteArray text = edit->curTextPage()->toPlainText().toUtf8();
GpgME::GpgContext::preventNoDataErr(&text);
+ if (text.trimmed().startsWith(GpgConstants::GPG_FRONTEND_SHORT_CRYPTO_HEAD)) {
+ QMessageBox::critical(this, tr("Notice"), tr("Short Crypto Text only supports Decrypt & Verify."));
+ return;
+ }
+
gpgme_decrypt_result_t result = nullptr;
gpgme_error_t error;
auto thread = QThread::create([&]() {
// try decrypt, if fail do nothing, especially don't replace text
- error = mCtx->decrypt(text, decrypted, &result);
+ error = mCtx->decrypt(text, &decrypted, &result);
});
- connect(thread, SIGNAL(finished(QPrivateSignal)), thread, SLOT(deleteLater()));
+ connect(thread, SIGNAL(finished()), thread, SLOT(deleteLater()));
thread->start();
auto *dialog = new WaitingDialog(tr("Decrypting"), this);
@@ -193,7 +206,7 @@ void MainWindow::slotDecrypt() {
infoBoard->associateTextEdit(edit->curTextPage());
if (gpgme_err_code(error) == GPG_ERR_NO_ERROR)
- edit->slotFillTextEditWithText(QString::fromUtf8(*decrypted));
+ edit->slotFillTextEditWithText(QString::fromUtf8(decrypted));
auto resultAnalyse = new DecryptResultAnalyse(mCtx, error, result);
@@ -233,20 +246,18 @@ void MainWindow::slotVerify() {
QByteArray text = edit->curTextPage()->toPlainText().toUtf8();
GpgME::GpgContext::preventNoDataErr(&text);
-
gpgme_verify_result_t result;
gpgme_error_t error;
auto thread = QThread::create([&]() {
error = mCtx->verify(&text, nullptr, &result);
});
- connect(thread, SIGNAL(finished(QPrivateSignal)), thread, SLOT(deleteLater()));
+ connect(thread, SIGNAL(finished()), thread, SLOT(deleteLater()));
thread->start();
auto *dialog = new WaitingDialog(tr("Verifying"), this);
- while (thread->isRunning()) {
+ while (thread->isRunning())
QApplication::processEvents();
- }
dialog->close();
auto resultAnalyse = new VerifyResultAnalyse(mCtx, error, result);
@@ -274,7 +285,6 @@ void MainWindow::slotVerify() {
void MainWindow::slotEncryptSign() {
-
if (edit->tabCount() == 0) return;
if (edit->slotCurPageTextEdit() != nullptr) {
@@ -287,49 +297,49 @@ void MainWindow::slotEncryptSign() {
return;
}
- bool can_sign = false, can_encr = false;
-
for (const auto &key : keys) {
- bool key_can_sign = GpgME::GpgContext::checkIfKeyCanSign(key);
bool key_can_encr = GpgME::GpgContext::checkIfKeyCanEncr(key);
- if (!key_can_sign && !key_can_encr) {
+ if (!key_can_encr) {
QMessageBox::critical(nullptr,
tr("Invalid KeyPair"),
- tr("The selected keypair cannot be used for signing and encryption at the same time.<br/>")
+ tr("The selected keypair cannot be used for encryption.<br/>")
+ tr("<br/>For example the Following Key: <br/>") + key.uids.first().uid);
return;
}
- if (key_can_sign) can_sign = true;
- if (key_can_encr) can_encr = true;
}
- if (!can_encr) {
- QMessageBox::critical(nullptr,
- tr("Incomplete Operation"),
- tr("None of the selected key pairs can provide the encryption function."));
- return;
+ QVector<GpgKey> signerKeys;
+
+ auto signersPicker = new SignersPicker(mCtx, this);
+
+ QEventLoop loop;
+ connect(signersPicker, SIGNAL(finished(int)), &loop, SLOT(quit()));
+ loop.exec();
+
+ signersPicker->getCheckedSigners(signerKeys);
+
+ for (const auto &key : keys) {
+ qDebug() << "Keys " << key.email;
}
- if (!can_sign) {
- QMessageBox::warning(nullptr,
- tr("Incomplete Operation"),
- tr("None of the selected key pairs can provide the signature function."));
+ for (const auto &signer : signerKeys) {
+ qDebug() << "Signers " << signer.email;
}
- auto *tmp = new QByteArray();
+
+ auto tmp = QByteArray();
gpgme_encrypt_result_t encr_result = nullptr;
gpgme_sign_result_t sign_result = nullptr;
- gpgme_decrypt_result_t result = nullptr;
-
gpgme_error_t error;
auto thread = QThread::create([&]() {
- error = mCtx->encryptSign(keys, edit->curTextPage()->toPlainText().toUtf8(), tmp, &encr_result,
+ error = mCtx->encryptSign(keys, signerKeys, edit->curTextPage()->toPlainText().toUtf8(), &tmp,
+ &encr_result,
&sign_result);
});
- connect(thread, SIGNAL(finished(QPrivateSignal)), thread, SLOT(deleteLater()));
+ connect(thread, SIGNAL(finished()), thread, SLOT(deleteLater()));
thread->start();
auto *dialog = new WaitingDialog(tr("Encrypting and Signing"), this);
@@ -337,15 +347,29 @@ void MainWindow::slotEncryptSign() {
QApplication::processEvents();
}
+ if (settings.value("advanced/autoPubkeyExchange").toBool()) {
+ PubkeyUploader pubkeyUploader(mCtx, signerKeys);
+ pubkeyUploader.start();
+ if (!pubkeyUploader.result()) {
+ QMessageBox::warning(nullptr,
+ tr("Automatic Key Exchange Warning"),
+ tr("Part of the automatic key exchange failed, which may be related to your key.")
+ +
+ tr("If possible, try to use the RSA algorithm compatible with the server for signing."));
+ }
+ }
+
dialog->close();
if (gpgme_err_code(error) == GPG_ERR_NO_ERROR) {
- auto *tmp2 = new QString(*tmp);
- edit->slotFillTextEditWithText(*tmp2);
+ auto tmp2 = QString(tmp);
+ edit->slotFillTextEditWithText(tmp2);
}
+ qDebug() << "Start Analyse Result";
+
auto resultAnalyseEncr = new EncryptResultAnalyse(error, encr_result);
- auto resultAnalyseSign = new SignResultAnalyse(error, sign_result);
+ auto resultAnalyseSign = new SignResultAnalyse(mCtx, error, sign_result);
int status = std::min(resultAnalyseEncr->getStatus(), resultAnalyseSign->getStatus());
auto reportText = resultAnalyseEncr->getResultReport() + resultAnalyseSign->getResultReport();
@@ -358,10 +382,12 @@ void MainWindow::slotEncryptSign() {
else
infoBoard->slotRefresh(reportText, INFO_ERROR_WARN);
+ qDebug() << "End Analyse Result";
+
if (status >= 0) {
infoBoard->resetOptionActionsMenu();
infoBoard->addOptionalAction("Send Mail", [this]() {
- if(settings.value("sendMail/enable", false).toBool())
+ if (settings.value("sendMail/enable", false).toBool())
new SendMailDialog(edit->curTextPage()->toPlainText(), this);
else {
QMessageBox::warning(nullptr,
@@ -369,6 +395,15 @@ void MainWindow::slotEncryptSign() {
tr("Please go to the settings interface to enable and configure this function."));
}
});
+ infoBoard->addOptionalAction("Shorten Ciphertext", [this]() {
+ if (settings.value("general/serviceToken").toString().isEmpty())
+ QMessageBox::warning(nullptr,
+ tr("Service Token Empty"),
+ tr("Please go to the settings interface to set Own Key and get Service Token."));
+ else {
+ shortenCryptText();
+ }
+ });
}
delete resultAnalyseEncr;
@@ -384,31 +419,56 @@ void MainWindow::slotDecryptVerify() {
if (edit->slotCurPageTextEdit() != nullptr) {
- auto *decrypted = new QByteArray();
- QByteArray text = edit->curTextPage()->toPlainText().toUtf8();
+ auto decrypted = QByteArray();
+ QString plainText = edit->curTextPage()->toPlainText();
+
+
+ if (plainText.trimmed().startsWith(GpgConstants::GPG_FRONTEND_SHORT_CRYPTO_HEAD)) {
+ auto cryptoText = getCryptText(plainText);
+ if (!cryptoText.isEmpty()) {
+ plainText = cryptoText;
+ }
+ }
+
+ QByteArray text = plainText.toUtf8();
+
GpgME::GpgContext::preventNoDataErr(&text);
gpgme_decrypt_result_t d_result = nullptr;
gpgme_verify_result_t v_result = nullptr;
+ auto *dialog = new WaitingDialog(tr("Decrypting and Verifying"), this);
+
+ // Automatically import public keys that are not stored locally
+ if (settings.value("advanced/autoPubkeyExchange").toBool()) {
+ gpgme_verify_result_t tmp_v_result = nullptr;
+ auto thread = QThread::create([&]() {
+ mCtx->verify(&text, nullptr, &tmp_v_result);
+ });
+ thread->start();
+ while (thread->isRunning()) QApplication::processEvents();
+ auto *checker = new UnknownSignersChecker(mCtx, tmp_v_result);
+ checker->start();
+ checker->deleteLater();
+ }
+
gpgme_error_t error;
auto thread = QThread::create([&]() {
- error = mCtx->decryptVerify(text, decrypted, &d_result, &v_result);
+ error = mCtx->decryptVerify(text, &decrypted, &d_result, &v_result);
});
- connect(thread, SIGNAL(finished(QPrivateSignal)), thread, SLOT(deleteLater()));
+ connect(thread, SIGNAL(finished()), thread, SLOT(deleteLater()));
thread->start();
- auto *dialog = new WaitingDialog(tr("Decrypting and Verifying"), this);
- while (thread->isRunning()) {
- QApplication::processEvents();
- }
+ while (thread->isRunning()) QApplication::processEvents();
dialog->close();
+ qDebug() << "Start Analyse Result";
+
infoBoard->associateTextEdit(edit->curTextPage());
if (gpgme_err_code(error) == GPG_ERR_NO_ERROR)
- edit->slotFillTextEditWithText(QString::fromUtf8(*decrypted));
+ edit->slotFillTextEditWithText(QString::fromUtf8(decrypted));
auto resultAnalyseDecrypt = new DecryptResultAnalyse(mCtx, error, d_result);
auto resultAnalyseVerify = new VerifyResultAnalyse(mCtx, error, v_result);
@@ -430,11 +490,15 @@ void MainWindow::slotDecryptVerify() {
}
delete resultAnalyseDecrypt;
delete resultAnalyseVerify;
+
+ qDebug() << "End Analyse Result";
+
} else if (edit->slotCurPageFileTreeView() != nullptr) {
this->slotFileDecryptVerify();
}
}
+
/*
* Append the selected (not checked!) Key(s) To Textedit
*/
@@ -452,7 +516,11 @@ void MainWindow::slotCopyMailAddressToClipboard() {
if (mKeyList->getSelected()->isEmpty()) {
return;
}
- auto &key = mCtx->getKeyById(mKeyList->getSelected()->first());
+ auto key = mCtx->getKeyById(mKeyList->getSelected()->first());
+ if (!key.good) {
+ QMessageBox::critical(nullptr, tr("Error"), tr("Key Not Found."));
+ return;
+ }
QClipboard *cb = QApplication::clipboard();
QString mail = key.email;
cb->setText(mail);
@@ -462,9 +530,11 @@ void MainWindow::slotShowKeyDetails() {
if (mKeyList->getSelected()->isEmpty()) {
return;
}
- auto &key = mCtx->getKeyById(mKeyList->getSelected()->first());
+ auto key = mCtx->getKeyById(mKeyList->getSelected()->first());
if (key.good) {
new KeyDetailsDialog(mCtx, key, this);
+ } else {
+ QMessageBox::critical(nullptr, tr("Error"), tr("Key Not Found."));
}
}
@@ -487,604 +557,20 @@ void MainWindow::uploadKeyToServer() {
dialog->slotUpload();
}
-void MainWindow::slotFileEncrypt() {
-
- auto fileTreeView = edit->slotCurPageFileTreeView();
- auto path = fileTreeView->getSelected();
-
- QFileInfo fileInfo(path);
- QFileInfo pathInfo(fileInfo.absolutePath());
-
- if (!fileInfo.isFile()) {
- QMessageBox::critical(this, tr("Error"), tr("Select a file before doing it."));
- return;
- }
- if (!fileInfo.isReadable()) {
- QMessageBox::critical(this, tr("Error"), tr("No permission to read this file."));
- return;
- }
- if (!pathInfo.isWritable()) {
- QMessageBox::critical(this, tr("Error"), tr("No permission to create file."));
- return;
- }
- if (QFile::exists(path + ".asc")) {
- auto ret = QMessageBox::warning(this,
- tr("Warning"),
- tr("The target file already exists, do you need to overwrite it?"),
- QMessageBox::Ok | QMessageBox::Cancel);
-
- if (ret == QMessageBox::Cancel)
- return;
- }
-
- QVector<GpgKey> keys;
-
- mKeyList->getCheckedKeys(keys);
-
- if (keys.empty()) {
- QMessageBox::critical(this, tr("No Key Selected"), tr("No Key Selected"));
- return;
- }
-
- for (const auto &key : keys) {
- if (!GpgME::GpgContext::checkIfKeyCanEncr(key)) {
- QMessageBox::information(this,
- tr("Invalid Operation"),
- tr("The selected key contains a key that does not actually have a encrypt usage.<br/>")
- + tr("<br/>For example the Following Key: <br/>") + key.uids.first().uid);
- return;
-
- }
- }
-
- gpgme_encrypt_result_t result;
-
- gpgme_error_t error;
- bool if_error = false;
- auto thread = QThread::create([&]() {
- try {
- error = GpgFileOpera::encryptFile(mCtx, keys, path, &result);
- } catch (const std::runtime_error &e) {
- if_error = true;
- }
- });
- connect(thread, SIGNAL(finished(QPrivateSignal)), thread, SLOT(deleteLater()));
- thread->start();
-
- auto *dialog = new WaitingDialog(tr("Encrypting"), this);
- while (thread->isRunning()) {
- QApplication::processEvents();
- }
-
- dialog->close();
- if (!if_error) {
- auto resultAnalyse = new EncryptResultAnalyse(error, result);
- auto &reportText = resultAnalyse->getResultReport();
- infoBoard->associateTabWidget(edit->tabWidget);
- infoBoard->associateFileTreeView(edit->curFilePage());
-
- if (resultAnalyse->getStatus() < 0)
- infoBoard->slotRefresh(reportText, INFO_ERROR_CRITICAL);
- else if (resultAnalyse->getStatus() > 0)
- infoBoard->slotRefresh(reportText, INFO_ERROR_OK);
- else
- infoBoard->slotRefresh(reportText, INFO_ERROR_WARN);
-
- delete resultAnalyse;
-
- fileTreeView->update();
- } else {
- QMessageBox::critical(this, tr("Error"), tr("An error occurred during operation."));
- return;
- }
-}
-
-void MainWindow::slotFileDecrypt() {
-
- auto fileTreeView = edit->slotCurPageFileTreeView();
- auto path = fileTreeView->getSelected();
-
- QFileInfo fileInfo(path);
- QFileInfo pathInfo(fileInfo.absolutePath());
- if (!fileInfo.isFile()) {
- QMessageBox::critical(this, tr("Error"), tr("Select a file before doing it."));
- return;
- }
- if (!fileInfo.isReadable()) {
- QMessageBox::critical(this, tr("Error"), tr("No permission to read this file."));
- return;
- }
- if (!pathInfo.isWritable()) {
- QMessageBox::critical(this, tr("Error"), tr("No permission to create file."));
- return;
- }
-
- QString outFileName, fileExtension = fileInfo.suffix();
-
- if (fileExtension == "asc" || fileExtension == "gpg") {
- int pos = path.lastIndexOf(QChar('.'));
- outFileName = path.left(pos);
- } else {
- outFileName = path + ".out";
- }
-
- if (QFile::exists(outFileName)) {
- auto ret = QMessageBox::warning(this,
- tr("Warning"),
- tr("The target file already exists, do you need to overwrite it?"),
- QMessageBox::Ok | QMessageBox::Cancel);
-
- if (ret == QMessageBox::Cancel)
- return;
- }
-
- gpgme_decrypt_result_t result;
- gpgme_error_t error;
- bool if_error = false;
-
- auto thread = QThread::create([&]() {
- try {
- error = GpgFileOpera::decryptFile(mCtx, path, &result);
- } catch (const std::runtime_error &e) {
- if_error = true;
- }
- });
- connect(thread, SIGNAL(finished(QPrivateSignal)), thread, SLOT(deleteLater()));
- thread->start();
-
- auto *dialog = new WaitingDialog("Decrypting", this);
- while (thread->isRunning()) {
- QApplication::processEvents();
- }
-
- dialog->close();
-
- if (!if_error) {
- auto resultAnalyse = new DecryptResultAnalyse(mCtx, error, result);
- auto &reportText = resultAnalyse->getResultReport();
- infoBoard->associateTabWidget(edit->tabWidget);
- infoBoard->associateFileTreeView(edit->curFilePage());
-
- if (resultAnalyse->getStatus() < 0)
- infoBoard->slotRefresh(reportText, INFO_ERROR_CRITICAL);
- else if (resultAnalyse->getStatus() > 0)
- infoBoard->slotRefresh(reportText, INFO_ERROR_OK);
- else
- infoBoard->slotRefresh(reportText, INFO_ERROR_WARN);
-
- delete resultAnalyse;
-
- fileTreeView->update();
- } else {
- QMessageBox::critical(this, tr("Error"), tr("An error occurred during operation."));
- return;
- }
-
-
-}
-
-void MainWindow::slotFileSign() {
-
- auto fileTreeView = edit->slotCurPageFileTreeView();
- auto path = fileTreeView->getSelected();
-
- QFileInfo fileInfo(path);
- QFileInfo pathInfo(fileInfo.absolutePath());
-
- if (!fileInfo.isFile()) {
- QMessageBox::critical(this, tr("Error"), tr("Select a file before doing it."));
- return;
- }
- if (!fileInfo.isReadable()) {
- QMessageBox::critical(this, tr("Error"), tr("No permission to read this file."));
- return;
- }
- if (!pathInfo.isWritable()) {
- QMessageBox::critical(this, tr("Error"), tr("No permission to create file."));
- return;
- }
-
- if (QFile::exists(path + ".sig")) {
- auto ret = QMessageBox::warning(this,
- tr("Warning"),
- tr("The target file already exists, do you need to overwrite it?"),
- QMessageBox::Ok | QMessageBox::Cancel);
-
- if (ret == QMessageBox::Cancel)
- return;
- }
-
- QVector<GpgKey> keys;
-
- mKeyList->getCheckedKeys(keys);
-
- if (keys.empty()) {
- QMessageBox::critical(this, tr("No Key Selected"), tr("No Key Selected"));
- return;
- }
-
- for (const auto &key : keys) {
- if (!GpgME::GpgContext::checkIfKeyCanEncr(key)) {
- QMessageBox::information(this,
- tr("Invalid Operation"),
- tr("The selected key contains a key that does not actually have a encrypt usage.<br/>")
- + tr("<br/>For example the Following Key: <br/>") + key.uids.first().uid);
- return;
-
- }
- }
-
- gpgme_sign_result_t result;
- gpgme_error_t error;
- bool if_error = false;
-
- auto thread = QThread::create([&]() {
- try {
- error = GpgFileOpera::signFile(mCtx, keys, path, &result);
- } catch (const std::runtime_error &e) {
- if_error = true;
- }
- });
- connect(thread, SIGNAL(finished(QPrivateSignal)), thread, SLOT(deleteLater()));
- thread->start();
-
- auto *dialog = new WaitingDialog(tr("Signing"), this);
- while (thread->isRunning()) {
- QApplication::processEvents();
- }
-
- dialog->close();
-
- if (!if_error) {
-
- auto resultAnalyse = new SignResultAnalyse(error, result);
- auto &reportText = resultAnalyse->getResultReport();
- infoBoard->associateTabWidget(edit->tabWidget);
- infoBoard->associateFileTreeView(edit->curFilePage());
-
- if (resultAnalyse->getStatus() < 0)
- infoBoard->slotRefresh(reportText, INFO_ERROR_CRITICAL);
- else if (resultAnalyse->getStatus() > 0)
- infoBoard->slotRefresh(reportText, INFO_ERROR_OK);
- else
- infoBoard->slotRefresh(reportText, INFO_ERROR_WARN);
-
- delete resultAnalyse;
-
- fileTreeView->update();
-
- } else {
- QMessageBox::critical(this, tr("Error"), tr("An error occurred during operation."));
- return;
- }
-
- fileTreeView->update();
-
-}
-
-void MainWindow::slotFileVerify() {
-
- auto fileTreeView = edit->slotCurPageFileTreeView();
- auto path = fileTreeView->getSelected();
-
- QFileInfo fileInfo(path);
-
- QString signFilePath, dataFilePath;
-
- if (fileInfo.suffix() == "gpg") {
- dataFilePath = path;
- signFilePath = path;
- } else if (fileInfo.suffix() == "sig") {
- int pos = path.lastIndexOf(QChar('.'));
- dataFilePath = path.left(pos);
- signFilePath = path;
- } else {
- dataFilePath = path;
- signFilePath = path + ".sig";
- }
-
- QFileInfo dataFileInfo(dataFilePath), signFileInfo(signFilePath);
-
- if (!dataFileInfo.isFile() || !signFileInfo.isFile()) {
- QMessageBox::critical(this, tr("Error"),
- tr("Please select the appropriate target file or signature file. Ensure that both are in this directory."));
- return;
- }
- if (!dataFileInfo.isReadable()) {
- QMessageBox::critical(this, tr("Error"), tr("No permission to read target file."));
- return;
- }
- if (!fileInfo.isReadable()) {
- QMessageBox::critical(this, tr("Error"), tr("No permission to read signature file."));
- return;
- }
-
- gpgme_verify_result_t result;
-
- gpgme_error_t error;
- bool if_error = false;
- auto thread = QThread::create([&]() {
- try {
- error = GpgFileOpera::verifyFile(mCtx, dataFilePath, &result);
- } catch (const std::runtime_error &e) {
- if_error = true;
- }
- });
- connect(thread, SIGNAL(finished(QPrivateSignal)), thread, SLOT(deleteLater()));
- thread->start();
-
- auto *dialog = new WaitingDialog(tr("Verifying"), this);
- while (thread->isRunning()) {
- QApplication::processEvents();
- }
- dialog->close();
-
- if (!if_error) {
- auto resultAnalyse = new VerifyResultAnalyse(mCtx, error, result);
- auto &reportText = resultAnalyse->getResultReport();
- infoBoard->associateTabWidget(edit->tabWidget);
- infoBoard->associateFileTreeView(edit->curFilePage());
-
- if (resultAnalyse->getStatus() < 0)
- infoBoard->slotRefresh(reportText, INFO_ERROR_CRITICAL);
- else if (resultAnalyse->getStatus() > 0)
- infoBoard->slotRefresh(reportText, INFO_ERROR_OK);
- else
- infoBoard->slotRefresh(reportText, INFO_ERROR_WARN);
-
- if (resultAnalyse->getStatus() >= 0) {
- infoBoard->resetOptionActionsMenu();
- infoBoard->addOptionalAction("Show Verify Details", [this, error, result]() {
- VerifyDetailsDialog(this, mCtx, mKeyList, error, result);
- });
- }
-
- delete resultAnalyse;
-
- fileTreeView->update();
- } else {
- QMessageBox::critical(this, tr("Error"), tr("An error occurred during operation."));
- return;
- }
-}
-
-void MainWindow::slotFileEncryptSign() {
- auto fileTreeView = edit->slotCurPageFileTreeView();
- auto path = fileTreeView->getSelected();
-
- QFileInfo fileInfo(path);
- QFileInfo pathInfo(fileInfo.absolutePath());
-
- if (!fileInfo.isFile()) {
- QMessageBox::critical(this, tr("Error"), tr("Select a file before doing it."));
- return;
- }
- if (!fileInfo.isReadable()) {
- QMessageBox::critical(this, tr("Error"), tr("No permission to read this file."));
- return;
- }
- if (!pathInfo.isWritable()) {
- QMessageBox::critical(this, tr("Error"), tr("No permission to create file."));
- return;
- }
- if (QFile::exists(path + ".gpg")) {
- auto ret = QMessageBox::warning(this,
- tr("Warning"),
- tr("The target file already exists, do you need to overwrite it?"),
- QMessageBox::Ok | QMessageBox::Cancel);
-
- if (ret == QMessageBox::Cancel)
- return;
- }
-
- QVector<GpgKey> keys;
-
- mKeyList->getCheckedKeys(keys);
-
- if (keys.empty()) {
- QMessageBox::critical(this, tr("No Key Selected"), tr("No Key Selected"));
- return;
- }
-
- bool can_sign = false, can_encr = false;
-
- for (const auto &key : keys) {
- bool key_can_sign = GpgME::GpgContext::checkIfKeyCanSign(key);
- bool key_can_encr = GpgME::GpgContext::checkIfKeyCanEncr(key);
-
- if (!key_can_sign && !key_can_encr) {
- QMessageBox::critical(nullptr,
- tr("Invalid KeyPair"),
- tr("The selected keypair cannot be used for signing and encryption at the same time.<br/>")
- + tr("<br/>For example the Following Key: <br/>") + key.uids.first().uid);
- return;
- }
-
- if (key_can_sign) can_sign = true;
- if (key_can_encr) can_encr = true;
- }
-
- if (!can_encr) {
- QMessageBox::critical(nullptr,
- tr("Incomplete Operation"),
- tr("None of the selected key pairs can provide the encryption function."));
- return;
- }
-
- if (!can_sign) {
- QMessageBox::warning(nullptr,
- tr("Incomplete Operation"),
- tr("None of the selected key pairs can provide the signature function."));
- }
-
- gpgme_encrypt_result_t encr_result = nullptr;
- gpgme_sign_result_t sign_result = nullptr;
-
- gpgme_error_t error;
- bool if_error = false;
-
- auto thread = QThread::create([&]() {
- try {
- error = GpgFileOpera::encryptSignFile(mCtx, keys, path, &encr_result, &sign_result);
- } catch (const std::runtime_error &e) {
- if_error = true;
- }
- });
- connect(thread, SIGNAL(finished(QPrivateSignal)), thread, SLOT(deleteLater()));
- thread->start();
-
- WaitingDialog *dialog = new WaitingDialog(tr("Encrypting and Signing"), this);
- while (thread->isRunning()) {
- QApplication::processEvents();
- }
- dialog->close();
-
- if (!if_error) {
-
- auto resultAnalyseEncr = new EncryptResultAnalyse(error, encr_result);
- auto resultAnalyseSign = new SignResultAnalyse(error, sign_result);
- int status = std::min(resultAnalyseEncr->getStatus(), resultAnalyseSign->getStatus());
- auto reportText = resultAnalyseEncr->getResultReport() + resultAnalyseSign->getResultReport();
-
- infoBoard->associateFileTreeView(edit->curFilePage());
-
- if (status < 0)
- infoBoard->slotRefresh(reportText, INFO_ERROR_CRITICAL);
- else if (status > 0)
- infoBoard->slotRefresh(reportText, INFO_ERROR_OK);
- else
- infoBoard->slotRefresh(reportText, INFO_ERROR_WARN);
-
- delete resultAnalyseEncr;
- delete resultAnalyseSign;
-
- fileTreeView->update();
-
- } else {
- QMessageBox::critical(this, tr("Error"), tr("An error occurred during operation."));
- return;
- }
-}
-
-void MainWindow::slotFileDecryptVerify() {
- auto fileTreeView = edit->slotCurPageFileTreeView();
- auto path = fileTreeView->getSelected();
-
- QFileInfo fileInfo(path);
- QFileInfo pathInfo(fileInfo.absolutePath());
- if (!fileInfo.isFile()) {
- QMessageBox::critical(this, tr("Error"), tr("Select a file(.gpg/.asc) before doing it."));
- return;
- }
- if (!fileInfo.isReadable()) {
- QMessageBox::critical(this, tr("Error"), tr("No permission to read this file."));
- return;
- }
- if (!pathInfo.isWritable()) {
- QMessageBox::critical(this, tr("Error"), tr("No permission to create file."));
- return;
- }
-
- QString outFileName, fileExtension = fileInfo.suffix();
-
- if (fileExtension == "asc" || fileExtension == "gpg") {
- int pos = path.lastIndexOf(QChar('.'));
- outFileName = path.left(pos);
- } else {
- outFileName = path + ".out";
- }
-
- gpgme_decrypt_result_t d_result = nullptr;
- gpgme_verify_result_t v_result = nullptr;
-
- gpgme_error_t error;
- bool if_error = false;
-
- auto thread = QThread::create([&]() {
- try {
- error = GpgFileOpera::decryptVerifyFile(mCtx, path, &d_result, &v_result);
- } catch (const std::runtime_error &e) {
- if_error = true;
- }
- });
- connect(thread, SIGNAL(finished(QPrivateSignal)), thread, SLOT(deleteLater()));
- thread->start();
-
-
- auto *dialog = new WaitingDialog(tr("Decrypting and Verifying"), this);
- while (thread->isRunning()) {
- QApplication::processEvents();
- }
- dialog->close();
-
- if (!if_error) {
- infoBoard->associateFileTreeView(edit->curFilePage());
-
- auto resultAnalyseDecrypt = new DecryptResultAnalyse(mCtx, error, d_result);
- auto resultAnalyseVerify = new VerifyResultAnalyse(mCtx, error, v_result);
-
- int status = std::min(resultAnalyseDecrypt->getStatus(), resultAnalyseVerify->getStatus());
- auto &reportText = resultAnalyseDecrypt->getResultReport() + resultAnalyseVerify->getResultReport();
- if (status < 0)
- infoBoard->slotRefresh(reportText, INFO_ERROR_CRITICAL);
- else if (status > 0)
- infoBoard->slotRefresh(reportText, INFO_ERROR_OK);
- else
- infoBoard->slotRefresh(reportText, INFO_ERROR_WARN);
-
- if (resultAnalyseVerify->getStatus() >= 0) {
- infoBoard->resetOptionActionsMenu();
- infoBoard->addOptionalAction("Show Verify Details", [this, error, v_result]() {
- VerifyDetailsDialog(this, mCtx, mKeyList, error, v_result);
- });
- }
- delete resultAnalyseDecrypt;
- delete resultAnalyseVerify;
-
- fileTreeView->update();
- } else {
- QMessageBox::critical(this, tr("Error"), tr("An error occurred during operation."));
- return;
- }
-}
-
-void MainWindow::slotFileEncryptCustom() {
- QStringList *keyList;
- keyList = mKeyList->getChecked();
- new FileEncryptionDialog(mCtx, *keyList, FileEncryptionDialog::Encrypt, this);
-}
-
-void MainWindow::slotFileDecryptCustom() {
- QStringList *keyList;
- keyList = mKeyList->getChecked();
- new FileEncryptionDialog(mCtx, *keyList, FileEncryptionDialog::Decrypt, this);
-}
-
-void MainWindow::slotFileSignCustom() {
- QStringList *keyList;
- keyList = mKeyList->getChecked();
- new FileEncryptionDialog(mCtx, *keyList, FileEncryptionDialog::Sign, this);
-}
-
-void MainWindow::slotFileVerifyCustom() {
- QStringList *keyList;
- keyList = mKeyList->getChecked();
- new FileEncryptionDialog(mCtx, *keyList, FileEncryptionDialog::Verify, this);
-}
void MainWindow::slotOpenFile(QString &path) {
edit->slotOpenFile(path);
}
void MainWindow::slotVersionUpgrade(const QString &currentVersion, const QString &latestVersion) {
- if(currentVersion < latestVersion) {
+ if (currentVersion < latestVersion) {
QMessageBox::warning(this,
tr("Outdated Version"),
tr("This version(%1) is out of date, please update the latest version in time. ").arg(
currentVersion)
+ tr("You can download the latest version(%1) on Github Releases Page.<br/>").arg(
latestVersion));
- } else if(currentVersion > latestVersion) {
+ } else if (currentVersion > latestVersion) {
QMessageBox::warning(this,
tr("Unreleased Version"),
tr("This version(%1) has not been officially released and is not recommended for use in a production environment. <br/>").arg(
diff --git a/src/ui/settings/SettingsAdvanced.cpp b/src/ui/settings/SettingsAdvanced.cpp
new file mode 100644
index 00000000..30414250
--- /dev/null
+++ b/src/ui/settings/SettingsAdvanced.cpp
@@ -0,0 +1,67 @@
+/**
+ * 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.
+ *
+ * Foobar 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 Foobar. If not, see <https://www.gnu.org/licenses/>.
+ *
+ * The initial version of the source code is inherited from gpg4usb-team.
+ * Their source code version also complies with GNU General Public License.
+ *
+ * The source code version of this software was modified and released
+ * by Saturneric<[email protected]> starting on May 12, 2021.
+ *
+ */
+
+#include "ui/SettingsDialog.h"
+
+AdvancedTab::AdvancedTab(QWidget *parent)
+: QWidget(parent), appPath(qApp->applicationDirPath()),
+settings(RESOURCE_DIR(appPath) + "/conf/gpgfrontend.ini",
+ QSettings::IniFormat) {
+ /*****************************************
+ * Steganography Box
+ *****************************************/
+ auto *steganoBox = new QGroupBox(tr("Show Steganography Options"));
+ auto *steganoBoxLayout = new QHBoxLayout();
+ steganoCheckBox = new QCheckBox(tr("Show Steganographic Options."), this);
+ steganoBoxLayout->addWidget(steganoCheckBox);
+ steganoBox->setLayout(steganoBoxLayout);
+
+ auto *pubkeyExchangeBox = new QGroupBox(tr("Pubkey Exchange"));
+ auto *pubkeyExchangeBoxLayout = new QHBoxLayout();
+ autoPubkeyExchangeCheckBox = new QCheckBox(tr("Auto Pubkey Exchange"), this);
+ pubkeyExchangeBoxLayout->addWidget(autoPubkeyExchangeCheckBox);
+ pubkeyExchangeBox->setLayout(pubkeyExchangeBoxLayout);
+
+ auto *mainLayout = new QVBoxLayout;
+ mainLayout->addWidget(steganoBox);
+ mainLayout->addWidget(pubkeyExchangeBox);
+ setSettings();
+ mainLayout->addStretch(1);
+ setLayout(mainLayout);
+}
+
+void AdvancedTab::setSettings() {
+ if (settings.value("advanced/steganography").toBool()) {
+ steganoCheckBox->setCheckState(Qt::Checked);
+ }
+ if (settings.value("advanced/autoPubkeyExchange").toBool()) {
+ autoPubkeyExchangeCheckBox->setCheckState(Qt::Checked);
+ }
+}
+
+void AdvancedTab::applySettings() {
+ settings.setValue("advanced/steganography", steganoCheckBox->isChecked());
+ settings.setValue("advanced/autoPubkeyExchange", autoPubkeyExchangeCheckBox->isChecked());
+}
+
diff --git a/src/ui/settings/SettingsAppearance.cpp b/src/ui/settings/SettingsAppearance.cpp
new file mode 100644
index 00000000..aeb7ed70
--- /dev/null
+++ b/src/ui/settings/SettingsAppearance.cpp
@@ -0,0 +1,187 @@
+/**
+ * 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.
+ *
+ * Foobar 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 Foobar. If not, see <https://www.gnu.org/licenses/>.
+ *
+ * The initial version of the source code is inherited from gpg4usb-team.
+ * Their source code version also complies with GNU General Public License.
+ *
+ * The source code version of this software was modified and released
+ * by Saturneric<[email protected]> starting on May 12, 2021.
+ *
+ */
+
+#include "ui/SettingsDialog.h"
+
+AppearanceTab::AppearanceTab(QWidget *parent)
+: QWidget(parent), appPath(qApp->applicationDirPath()),
+settings(RESOURCE_DIR(appPath) + "/conf/gpgfrontend.ini",
+ QSettings::IniFormat) {
+ /*****************************************
+ * Icon-Size-Box
+ *****************************************/
+ auto *iconSizeBox = new QGroupBox(tr("Iconsize"));
+ iconSizeGroup = new QButtonGroup();
+ iconSizeSmall = new QRadioButton(tr("small"));
+ iconSizeMedium = new QRadioButton(tr("medium"));
+ iconSizeLarge = new QRadioButton(tr("large"));
+
+ iconSizeGroup->addButton(iconSizeSmall, 1);
+ iconSizeGroup->addButton(iconSizeMedium, 2);
+ iconSizeGroup->addButton(iconSizeLarge, 3);
+
+ auto *iconSizeBoxLayout = new QHBoxLayout();
+ iconSizeBoxLayout->addWidget(iconSizeSmall);
+ iconSizeBoxLayout->addWidget(iconSizeMedium);
+ iconSizeBoxLayout->addWidget(iconSizeLarge);
+
+ iconSizeBox->setLayout(iconSizeBoxLayout);
+
+ /*****************************************
+ * Icon-Style-Box
+ *****************************************/
+ auto *iconStyleBox = new QGroupBox(tr("Iconstyle"));
+ iconStyleGroup = new QButtonGroup();
+ iconTextButton = new QRadioButton(tr("just text"));
+ iconIconsButton = new QRadioButton(tr("just icons"));
+ iconAllButton = new QRadioButton(tr("text and icons"));
+
+ iconStyleGroup->addButton(iconTextButton, 1);
+ iconStyleGroup->addButton(iconIconsButton, 2);
+ iconStyleGroup->addButton(iconAllButton, 3);
+
+ auto *iconStyleBoxLayout = new QHBoxLayout();
+ iconStyleBoxLayout->addWidget(iconTextButton);
+ iconStyleBoxLayout->addWidget(iconIconsButton);
+ iconStyleBoxLayout->addWidget(iconAllButton);
+
+ iconStyleBox->setLayout(iconStyleBoxLayout);
+
+ /*****************************************
+ * Window-Size-Box
+ *****************************************/
+ auto *windowSizeBox = new QGroupBox(tr("Windowstate"));
+ auto *windowSizeBoxLayout = new QHBoxLayout();
+ windowSizeCheckBox =
+ new QCheckBox(tr("Save window size and position on exit."), this);
+ windowSizeBoxLayout->addWidget(windowSizeCheckBox);
+ windowSizeBox->setLayout(windowSizeBoxLayout);
+
+ /*****************************************
+ * Info-Board-Font-Size-Box
+ *****************************************/
+
+ auto *infoBoardBox = new QGroupBox(tr("Information Board"));
+ auto *infoBoardLayout = new QHBoxLayout();
+ infoBoardFontSizeSpin = new QSpinBox();
+ infoBoardFontSizeSpin->setRange(9, 18);
+ infoBoardFontSizeSpin->setValue(10);
+ infoBoardFontSizeSpin->setSingleStep(1);
+ infoBoardLayout->addWidget(new QLabel(tr(" Front Size")));
+ infoBoardLayout->addWidget(infoBoardFontSizeSpin);
+ infoBoardBox->setLayout(infoBoardLayout);
+
+ auto *mainLayout = new QVBoxLayout;
+ mainLayout->addWidget(iconSizeBox);
+ mainLayout->addWidget(iconStyleBox);
+ mainLayout->addWidget(windowSizeBox);
+ mainLayout->addWidget(infoBoardBox);
+ mainLayout->addStretch(1);
+ setSettings();
+ setLayout(mainLayout);
+}
+
+/**********************************
+ * Read the settings from config
+ * and set the buttons and checkboxes
+ * appropriately
+ **********************************/
+void AppearanceTab::setSettings() {
+
+ // Iconsize
+ QSize iconSize = settings.value("toolbar/iconsize", QSize(24, 24)).toSize();
+ switch (iconSize.height()) {
+ case 12:
+ iconSizeSmall->setChecked(true);
+ break;
+ case 24:
+ iconSizeMedium->setChecked(true);
+ break;
+ case 32:
+ iconSizeLarge->setChecked(true);
+ break;
+ }
+ // Iconstyle
+ Qt::ToolButtonStyle iconStyle = static_cast<Qt::ToolButtonStyle>(
+ settings.value("toolbar/iconstyle", Qt::ToolButtonTextUnderIcon)
+ .toUInt());
+ switch (iconStyle) {
+ case Qt::ToolButtonTextOnly:
+ iconTextButton->setChecked(true);
+ break;
+ case Qt::ToolButtonIconOnly:
+ iconIconsButton->setChecked(true);
+ break;
+ case Qt::ToolButtonTextUnderIcon:
+ iconAllButton->setChecked(true);
+ break;
+ default:
+ break;
+ }
+
+ // Window Save and Position
+ if (settings.value("window/windowSave").toBool())
+ windowSizeCheckBox->setCheckState(Qt::Checked);
+
+ // infoBoardFontSize
+ auto infoBoardFontSize = settings.value("informationBoard/fontSize", 10).toInt();
+ if (infoBoardFontSize < 9 || infoBoardFontSize > 18)
+ infoBoardFontSize = 10;
+ infoBoardFontSizeSpin->setValue(infoBoardFontSize);
+}
+
+/***********************************
+ * get the values of the buttons and
+ * write them to settings-file
+ *************************************/
+void AppearanceTab::applySettings() {
+ switch (iconSizeGroup->checkedId()) {
+ case 1:
+ settings.setValue("toolbar/iconsize", QSize(12, 12));
+ break;
+ case 2:
+ settings.setValue("toolbar/iconsize", QSize(24, 24));
+ break;
+ case 3:
+ settings.setValue("toolbar/iconsize", QSize(32, 32));
+ break;
+ }
+
+ switch (iconStyleGroup->checkedId()) {
+ case 1:
+ settings.setValue("toolbar/iconstyle", Qt::ToolButtonTextOnly);
+ break;
+ case 2:
+ settings.setValue("toolbar/iconstyle", Qt::ToolButtonIconOnly);
+ break;
+ case 3:
+ settings.setValue("toolbar/iconstyle", Qt::ToolButtonTextUnderIcon);
+ break;
+ }
+
+ settings.setValue("window/windowSave", windowSizeCheckBox->isChecked());
+
+ settings.setValue("informationBoard/fontSize", infoBoardFontSizeSpin->value());
+}
+
diff --git a/src/ui/settings/SettingsDialog.cpp b/src/ui/settings/SettingsDialog.cpp
new file mode 100644
index 00000000..0ca188f7
--- /dev/null
+++ b/src/ui/settings/SettingsDialog.cpp
@@ -0,0 +1,205 @@
+/**
+ * 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.
+ *
+ * Foobar 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 Foobar. If not, see <https://www.gnu.org/licenses/>.
+ *
+ * The initial version of the source code is inherited from gpg4usb-team.
+ * Their source code version also complies with GNU General Public License.
+ *
+ * The source code version of this software was modified and released
+ * by Saturneric<[email protected]> starting on May 12, 2021.
+ *
+ */
+
+#include "ui/SettingsDialog.h"
+#include "ui/WaitingDialog.h"
+
+SettingsDialog::SettingsDialog(GpgME::GpgContext *ctx, QWidget *parent)
+ : QDialog(parent) {
+ mCtx = ctx;
+ tabWidget = new QTabWidget;
+ generalTab = new GeneralTab(mCtx);
+ appearanceTab = new AppearanceTab;
+ sendMailTab = new SendMailTab;
+ keyserverTab = new KeyserverTab;
+ advancedTab = new AdvancedTab;
+ gpgPathsTab = new GpgPathsTab;
+
+ tabWidget->addTab(generalTab, tr("General"));
+ tabWidget->addTab(appearanceTab, tr("Appearance"));
+ tabWidget->addTab(sendMailTab, tr("Send Mail"));
+ tabWidget->addTab(keyserverTab, tr("Key Server"));
+ // tabWidget->addTab(gpgPathsTab, tr("Gpg paths"));
+ tabWidget->addTab(advancedTab, tr("Advanced"));
+
+ buttonBox =
+ new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
+
+ connect(buttonBox, SIGNAL(accepted()), this, SLOT(slotAccept()));
+ connect(buttonBox, SIGNAL(rejected()), this, SLOT(reject()));
+
+ auto *mainLayout = new QVBoxLayout;
+ mainLayout->addWidget(tabWidget);
+ mainLayout->stretch(0);
+ mainLayout->addWidget(buttonBox);
+ mainLayout->stretch(0);
+ setLayout(mainLayout);
+
+ setWindowTitle(tr("Settings"));
+
+ // slots for handling the restartneeded member
+ this->slotSetRestartNeeded(false);
+ connect(generalTab, SIGNAL(signalRestartNeeded(bool)), this,
+ SLOT(slotSetRestartNeeded(bool)));
+ connect(appearanceTab, SIGNAL(signalRestartNeeded(bool)), this,
+ SLOT(slotSetRestartNeeded(bool)));
+ connect(sendMailTab, SIGNAL(signalRestartNeeded(bool)), this,
+ SLOT(slotSetRestartNeeded(bool)));
+ connect(keyserverTab, SIGNAL(signalRestartNeeded(bool)), this,
+ SLOT(slotSetRestartNeeded(bool)));
+ connect(advancedTab, SIGNAL(signalRestartNeeded(bool)), this,
+ SLOT(slotSetRestartNeeded(bool)));
+
+ connect(this, SIGNAL(signalRestartNeeded(bool)), parent,
+ SLOT(slotSetRestartNeeded(bool)));
+
+ this->resize(480, 640);
+ this->show();
+}
+
+bool SettingsDialog::getRestartNeeded() const { return this->restartNeeded; }
+
+void SettingsDialog::slotSetRestartNeeded(bool needed) {
+ this->restartNeeded = needed;
+}
+
+void SettingsDialog::slotAccept() {
+ generalTab->applySettings();
+ sendMailTab->applySettings();
+ appearanceTab->applySettings();
+ keyserverTab->applySettings();
+ advancedTab->applySettings();
+ gpgPathsTab->applySettings();
+ if (getRestartNeeded()) {
+ emit signalRestartNeeded(true);
+ }
+ close();
+}
+
+// http://www.informit.com/articles/article.aspx?p=1405555&seqNum=3
+// http://developer.qt.nokia.com/wiki/How_to_create_a_multi_language_application
+QHash<QString, QString> SettingsDialog::listLanguages() {
+ QHash<QString, QString> languages;
+
+ languages.insert("", tr("System Default"));
+
+ QString appPath = qApp->applicationDirPath();
+ QDir qmDir = QDir(RESOURCE_DIR(appPath) + "/ts/");
+ QStringList fileNames = qmDir.entryList(QStringList("gpgfrontend_*.qm"));
+
+ for (int i = 0; i < fileNames.size(); ++i) {
+ QString locale = fileNames[i];
+ locale.truncate(locale.lastIndexOf('.'));
+ locale.remove(0, locale.indexOf('_') + 1);
+
+ // this works in qt 4.8
+ QLocale qloc(locale);
+#if QT_VERSION < 0x040800
+ QString language =
+ QLocale::languageToString(qloc.language()) + " (" + locale +
+ ")"; //+ " (" + QLocale::languageToString(qloc.language()) + ")";
+#else
+ QString language = qloc.nativeLanguageName() + " (" + locale + ")";
+#endif
+ languages.insert(locale, language);
+ }
+ return languages;
+}
+
+GpgPathsTab::GpgPathsTab(QWidget *parent)
+ : QWidget(parent), appPath(qApp->applicationDirPath()),
+ settings(RESOURCE_DIR(appPath) + "/conf/gpgfrontend.ini",
+ QSettings::IniFormat) {
+ setSettings();
+
+ /*****************************************
+ * Keydb Box
+ *****************************************/
+ auto *keydbBox = new QGroupBox(tr("Relative path to keydb"));
+ auto *keydbBoxLayout = new QGridLayout();
+
+ // Label containing the current keydbpath relative to default keydb path
+ keydbLabel = new QLabel(accKeydbPath, this);
+
+ auto *keydbButton = new QPushButton("Change keydb path", this);
+ connect(keydbButton, SIGNAL(clicked()), this, SLOT(chooseKeydbDir()));
+ auto *keydbDefaultButton = new QPushButton("Set keydb to default path", this);
+ connect(keydbDefaultButton, SIGNAL(clicked()), this,
+ SLOT(setKeydbPathToDefault()));
+
+ keydbBox->setLayout(keydbBoxLayout);
+ keydbBoxLayout->addWidget(new QLabel(tr("Current keydb path: ")), 1, 1);
+ keydbBoxLayout->addWidget(keydbLabel, 1, 2);
+ keydbBoxLayout->addWidget(keydbButton, 1, 3);
+ keydbBoxLayout->addWidget(keydbDefaultButton, 2, 3);
+ keydbBoxLayout->addWidget(
+ new QLabel(tr("<b>NOTE: </b> Gpg4usb will restart automatically if you "
+ "change the keydb path!")),
+ 3, 1, 1, 3);
+
+ auto *mainLayout = new QVBoxLayout;
+ mainLayout->addWidget(keydbBox);
+ mainLayout->addStretch(1);
+ setLayout(mainLayout);
+}
+
+QString GpgPathsTab::getRelativePath(const QString &dir1, const QString &dir2) {
+ QDir dir(dir1);
+ QString s;
+
+ s = dir.relativeFilePath(dir2);
+ qDebug() << "relative path: " << s;
+ if (s.isEmpty()) {
+ s = ".";
+ }
+ return s;
+}
+
+void GpgPathsTab::setKeydbPathToDefault() {
+ accKeydbPath = ".";
+ keydbLabel->setText(".");
+}
+
+QString GpgPathsTab::chooseKeydbDir() {
+ QString dir = QFileDialog::getExistingDirectory(
+ this, tr("Choose keydb directory"), accKeydbPath,
+ QFileDialog::ShowDirsOnly);
+
+ accKeydbPath = getRelativePath(defKeydbPath, dir);
+ keydbLabel->setText(accKeydbPath);
+ return "";
+}
+
+void GpgPathsTab::setSettings() {
+ defKeydbPath = qApp->applicationDirPath() + "/keydb";
+
+ accKeydbPath = settings.value("gpgpaths/keydbpath").toString();
+ if (accKeydbPath.isEmpty()) {
+ accKeydbPath = ".";
+ }
+}
+
+void GpgPathsTab::applySettings() {
+ settings.setValue("gpgpaths/keydbpath", accKeydbPath);
+}
diff --git a/src/ui/settings/SettingsGeneral.cpp b/src/ui/settings/SettingsGeneral.cpp
new file mode 100644
index 00000000..bec66154
--- /dev/null
+++ b/src/ui/settings/SettingsGeneral.cpp
@@ -0,0 +1,358 @@
+/**
+ * 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.
+ *
+ * Foobar 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 Foobar. If not, see <https://www.gnu.org/licenses/>.
+ *
+ * The initial version of the source code is inherited from gpg4usb-team.
+ * Their source code version also complies with GNU General Public License.
+ *
+ * The source code version of this software was modified and released
+ * by Saturneric<[email protected]> starting on May 12, 2021.
+ *
+ */
+
+#include "ui/SettingsDialog.h"
+#include "ui/WaitingDialog.h"
+#include "server/ComUtils.h"
+
+#include "rapidjson/prettywriter.h"
+
+GeneralTab::GeneralTab(GpgME::GpgContext *ctx, QWidget *parent)
+ : QWidget(parent), appPath(qApp->applicationDirPath()),
+ settings(RESOURCE_DIR(appPath) + "/conf/gpgfrontend.ini",
+ QSettings::IniFormat) {
+ mCtx = ctx;
+
+ /*****************************************
+ * GpgFrontend Server
+ *****************************************/
+ auto *serverBox = new QGroupBox(tr("GpgFrontend Server"));
+ auto *serverBoxLayout = new QVBoxLayout();
+ serverSelectBox = new QComboBox();
+ serverBoxLayout->addWidget(serverSelectBox);
+ serverBoxLayout->addWidget(new QLabel(
+ tr("Server that provides short key and key exchange services")));
+
+ serverBox->setLayout(serverBoxLayout);
+
+ /*****************************************
+ * Save-Checked-Keys-Box
+ *****************************************/
+ auto *saveCheckedKeysBox = new QGroupBox(tr("Save Checked Keys"));
+ auto *saveCheckedKeysBoxLayout = new QHBoxLayout();
+ saveCheckedKeysCheckBox = new QCheckBox(
+ tr("Save checked private keys on exit and restore them on next start."),
+ this);
+ saveCheckedKeysBoxLayout->addWidget(saveCheckedKeysCheckBox);
+ saveCheckedKeysBox->setLayout(saveCheckedKeysBoxLayout);
+
+ /*****************************************
+ * Key-Impport-Confirmation Box
+ *****************************************/
+ auto *importConfirmationBox =
+ new QGroupBox(tr("Confirm drag'n'drop key import"));
+ auto *importConfirmationBoxLayout = new QHBoxLayout();
+ importConfirmationCheckBox = new QCheckBox(
+ tr("Import files dropped on the keylist without confirmation."), this);
+ importConfirmationBoxLayout->addWidget(importConfirmationCheckBox);
+ importConfirmationBox->setLayout(importConfirmationBoxLayout);
+
+ /*****************************************
+ * Language Select Box
+ *****************************************/
+ auto *langBox = new QGroupBox(tr("Language"));
+ auto *langBoxLayout = new QVBoxLayout();
+ langSelectBox = new QComboBox;
+ lang = SettingsDialog::listLanguages();
+
+ for (const auto &l: lang) { langSelectBox->addItem(l); }
+
+ langBoxLayout->addWidget(langSelectBox);
+ langBoxLayout->addWidget(
+ new QLabel(tr("<b>NOTE: </b> GpgFrontend will restart automatically if "
+ "you change the language!")));
+ langBox->setLayout(langBoxLayout);
+ connect(langSelectBox, SIGNAL(currentIndexChanged(int)), this,
+ SLOT(slotLanguageChanged()));
+
+ /*****************************************
+ * Own Key Select Box
+ *****************************************/
+ auto *ownKeyBox = new QGroupBox(tr("Own key"));
+ auto *ownKeyBoxLayout = new QVBoxLayout();
+ auto *ownKeyServiceTokenLayout = new QHBoxLayout();
+ ownKeySelectBox = new QComboBox;
+ getServiceTokenButton = new QPushButton(tr("Get Service Token"));
+ serviceTokenLabel = new QLabel(tr("No Service Token Found"));
+ serviceTokenLabel->setAlignment(Qt::AlignCenter);
+
+ ownKeyBox->setLayout(ownKeyBoxLayout);
+ mKeyList = new KeyList(mCtx);
+
+ // Fill the keyid hashmap
+ keyIds.insert("", tr("<none>"));
+
+ for (const auto &keyid : *mKeyList->getAllPrivateKeys()) {
+ auto key = mCtx->getKeyById(keyid);
+ if (!key.good) continue;
+ keyIds.insert(key.id, key.uids.first().uid);
+ }
+ for (const auto &k : keyIds.keys()) {
+ ownKeySelectBox->addItem(keyIds.find(k).value());
+ keyIdsList.append(k);
+ }
+ connect(ownKeySelectBox, SIGNAL(currentIndexChanged(int)), this,
+ SLOT(slotOwnKeyIdChanged()));
+ connect(getServiceTokenButton, SIGNAL(clicked(bool)), this,
+ SLOT(slotGetServiceToken()));
+
+ ownKeyBoxLayout->addWidget(new QLabel(
+ tr("Key pair for synchronization and identity authentication")));
+ ownKeyBoxLayout->addWidget(ownKeySelectBox);
+ ownKeyBoxLayout->addLayout(ownKeyServiceTokenLayout);
+ ownKeyServiceTokenLayout->addWidget(getServiceTokenButton);
+ ownKeyServiceTokenLayout->addWidget(serviceTokenLabel);
+ ownKeyServiceTokenLayout->stretch(0);
+
+ /*****************************************
+ * Mainlayout
+ *****************************************/
+ auto *mainLayout = new QVBoxLayout;
+ mainLayout->addWidget(serverBox);
+ mainLayout->addWidget(saveCheckedKeysBox);
+ mainLayout->addWidget(importConfirmationBox);
+ mainLayout->addWidget(langBox);
+ mainLayout->addWidget(ownKeyBox);
+
+ setSettings();
+ mainLayout->addStretch(1);
+ setLayout(mainLayout);
+}
+
+/**********************************
+ * Read the settings from config
+ * and set the buttons and checkboxes
+ * appropriately
+ **********************************/
+void GeneralTab::setSettings() {
+ // Keysaving
+ if (settings.value("keys/saveKeyChecked").toBool()) {
+ saveCheckedKeysCheckBox->setCheckState(Qt::Checked);
+ }
+
+ auto serverList = settings.value("general/gpgfrontendServerList").toStringList();
+ if (serverList.empty()) {
+ serverList.append("service.gpgfrontend.pub");
+ serverList.append("localhost");
+ }
+ for (const auto &s : serverList)
+ serverSelectBox->addItem(s);
+
+ qDebug() << "Current Gpgfrontend Server" << settings.value("general/currentGpgfrontendServer").toString();
+ serverSelectBox->setCurrentText(settings.value("general/currentGpgfrontendServer",
+ "service.gpgfrontend.pub").toString());
+
+ connect(serverSelectBox, QOverload<const QString &>::of(&QComboBox::currentTextChanged),
+ this, [&](const QString &current) -> void {
+ settings.setValue("general/currentGpgfrontendServer", current);
+ });
+
+ // Language setting
+ QString langKey = settings.value("int/lang").toString();
+ QString langValue = lang.value(langKey);
+ if (langKey != "") {
+ langSelectBox->setCurrentIndex(langSelectBox->findText(langValue));
+ }
+
+ QString own_key_id = settings.value("general/ownKeyId").toString();
+ qDebug() << "OwnKeyId" << own_key_id;
+ if (own_key_id.isEmpty()) {
+ ownKeySelectBox->setCurrentText("<none>");
+ } else {
+ const auto text = keyIds.find(own_key_id).value();
+ qDebug() << "OwnKey" << own_key_id << text;
+ ownKeySelectBox->setCurrentText(text);
+ }
+
+ serviceToken = settings.value("general/serviceToken").toString();
+ qDebug() << "Load Service Token" << serviceToken;
+ if (!serviceToken.isEmpty()) {
+ serviceTokenLabel->setText(serviceToken);
+ }
+
+ // Get own key information from keydb/gpg.conf (if contained)
+ if (settings.value("general/confirmImportKeys", Qt::Checked).toBool()) {
+ importConfirmationCheckBox->setCheckState(Qt::Checked);
+ }
+}
+
+/***********************************
+ * get the values of the buttons and
+ * write them to settings-file
+ *************************************/
+void GeneralTab::applySettings() {
+ settings.setValue("keys/saveKeyChecked",
+ saveCheckedKeysCheckBox->isChecked());
+
+ qDebug() << "serverSelectBox currentText" << serverSelectBox->currentText();
+ settings.setValue("general/currentGpgfrontendServer",
+ serverSelectBox->currentText());
+
+ auto *serverList = new QStringList();
+ for (int i = 0; i < serverSelectBox->count(); i++)
+ serverList->append(serverSelectBox->itemText(i));
+ settings.setValue("general/gpgfrontendServerList",
+ *serverList);
+ delete serverList;
+
+ settings.setValue("int/lang", lang.key(langSelectBox->currentText()));
+
+ settings.setValue("general/ownKeyId",
+ keyIdsList[ownKeySelectBox->currentIndex()]);
+
+ settings.setValue("general/serviceToken",
+ serviceToken);
+
+ settings.setValue("general/confirmImportKeys",
+ importConfirmationCheckBox->isChecked());
+}
+
+void GeneralTab::slotLanguageChanged() { emit signalRestartNeeded(true); }
+
+void GeneralTab::slotOwnKeyIdChanged() {
+ // Set ownKeyId to currently selected
+ this->serviceTokenLabel->setText(tr("No Service Token Found"));
+ serviceToken.clear();
+}
+
+void GeneralTab::slotGetServiceToken() {
+
+ auto utils = new ComUtils(this);
+
+ QUrl reqUrl(utils->getUrl(ComUtils::GetServiceToken));
+ QNetworkRequest request(reqUrl);
+ request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
+
+
+ const auto keyId = keyIdsList[ownKeySelectBox->currentIndex()];
+
+ qDebug() << "KeyId" << keyIdsList[ownKeySelectBox->currentIndex()];
+
+ if (keyId.isEmpty()) {
+ QMessageBox::critical(this, tr("Invalid Operation"),
+ tr("Own Key can not be None while getting service token."));
+ return;
+ }
+
+ QStringList selectedKeyIds(keyIdsList[ownKeySelectBox->currentIndex()]);
+
+ QByteArray keyDataBuf;
+ mCtx->exportKeys(&selectedKeyIds, &keyDataBuf);
+
+ GpgKey key = mCtx->getKeyById(keyId);
+
+ if (!key.good) {
+ QMessageBox::critical(this, tr("Error"),
+ tr("Key Not Exists"));
+ return;
+ }
+
+ qDebug() << "keyDataBuf" << keyDataBuf;
+
+ /**
+ * {
+ * "publicKey" : ...
+ * "sha": ...
+ * "signedFpr": ...
+ * "version": ...
+ * }
+ */
+
+ QCryptographicHash shaGen(QCryptographicHash::Sha256);
+ shaGen.addData(keyDataBuf);
+
+ auto shaStr = shaGen.result().toHex();
+
+ auto signFprStr = ComUtils::getSignStringBase64(mCtx, key.fpr, key);
+
+ rapidjson::Value pubkey, ver, sha, signFpr;
+
+ rapidjson::Document doc;
+ doc.SetObject();
+
+ pubkey.SetString(keyDataBuf.constData(), keyDataBuf.count());
+
+ auto version = qApp->applicationVersion();
+ ver.SetString(version.toUtf8().constData(), qApp->applicationVersion().count());
+
+ sha.SetString(shaStr.constData(), shaStr.count());
+ signFpr.SetString(signFprStr.constData(), signFprStr.count());
+
+ rapidjson::Document::AllocatorType &allocator = doc.GetAllocator();
+
+ doc.AddMember("publicKey", pubkey, allocator);
+ doc.AddMember("sha", sha, allocator);
+ doc.AddMember("signedFpr", signFpr, allocator);
+ doc.AddMember("version", ver, allocator);
+
+ rapidjson::StringBuffer sb;
+ rapidjson::PrettyWriter<rapidjson::StringBuffer> writer(sb);
+ doc.Accept(writer);
+
+ QByteArray postData(sb.GetString());
+
+ QNetworkReply *reply = utils->getNetworkManager().post(request, postData);
+
+ // Show Waiting Dailog
+ auto dialog = new WaitingDialog("Getting Token From Server", this);
+ dialog->show();
+
+ while (reply->isRunning()) {
+ QApplication::processEvents();
+ }
+
+ dialog->close();
+
+ if (utils->checkServerReply(reply->readAll().constData())) {
+
+ /**
+ * {
+ * "serviceToken" : ...
+ * "fpr": ...
+ * }
+ */
+
+ if (!utils->checkDataValueStr("serviceToken") || !utils->checkDataValueStr("fpr")) {
+ QMessageBox::critical(this, tr("Error"),
+ tr("The communication content with the server does not meet the requirements"));
+ return;
+ }
+
+ QString serviceTokenTemp = utils->getDataValueStr("serviceToken");
+ QString fpr = utils->getDataValueStr("fpr");
+ auto key = mCtx->getKeyByFpr(fpr);
+ if (utils->checkServiceTokenFormat(serviceTokenTemp) && key.good) {
+ serviceToken = serviceTokenTemp;
+ qDebug() << "Get Service Token" << serviceToken;
+ // Auto update settings
+ settings.setValue("general/serviceToken", serviceToken);
+ serviceTokenLabel->setText(serviceToken);
+ QMessageBox::information(this, tr("Notice"),
+ tr("Succeed in getting service token"));
+ } else {
+ QMessageBox::critical(this, tr("Error"), tr("There is a problem with the communication with the server"));
+ }
+ }
+
+}
diff --git a/src/ui/settings/SettingsKeyServer.cpp b/src/ui/settings/SettingsKeyServer.cpp
new file mode 100644
index 00000000..b49eb9e0
--- /dev/null
+++ b/src/ui/settings/SettingsKeyServer.cpp
@@ -0,0 +1,148 @@
+/**
+ * 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.
+ *
+ * Foobar 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 Foobar. If not, see <https://www.gnu.org/licenses/>.
+ *
+ * The initial version of the source code is inherited from gpg4usb-team.
+ * Their source code version also complies with GNU General Public License.
+ *
+ * The source code version of this software was modified and released
+ * by Saturneric<[email protected]> starting on May 12, 2021.
+ *
+ */
+
+#include "ui/SettingsDialog.h"
+
+KeyserverTab::KeyserverTab(QWidget *parent)
+ : QWidget(parent), appPath(qApp->applicationDirPath()),
+ settings(RESOURCE_DIR(appPath) + "/conf/gpgfrontend.ini",
+ QSettings::IniFormat) {
+
+ auto generalGroupBox = new QGroupBox(tr("General"));
+ auto generalLayout = new QVBoxLayout();
+
+ keyServerTable = new QTableWidget();
+ keyServerTable->setColumnCount(3);
+ keyServerTable->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);
+ keyServerTable->horizontalHeader()->setStretchLastSection(false);
+ keyServerTable->verticalHeader()->hide();
+ keyServerTable->setShowGrid(false);
+ keyServerTable->sortByColumn(0, Qt::AscendingOrder);
+ keyServerTable->setSelectionBehavior(QAbstractItemView::SelectRows);
+ keyServerTable->setSelectionMode(QAbstractItemView::SingleSelection);
+
+ // tableitems not editable
+ keyServerTable->setEditTriggers(QAbstractItemView::NoEditTriggers);
+ // no focus (rectangle around tableitems)
+ // may be it should focus on whole row
+ keyServerTable->setFocusPolicy(Qt::NoFocus);
+ keyServerTable->setAlternatingRowColors(true);
+
+ QStringList labels;
+ labels << tr("No.") << tr("Address") << tr("Available");
+ keyServerTable->setHorizontalHeaderLabels(labels);
+
+ auto *mainLayout = new QVBoxLayout(this);
+ auto *label = new QLabel(tr("Default Key Server for Import:"));
+
+ comboBox = new QComboBox;
+ comboBox->setEditable(false);
+ comboBox->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
+
+ auto *addKeyServerBox = new QWidget(this);
+ auto *addKeyServerLayout = new QHBoxLayout(addKeyServerBox);
+ auto *http = new QLabel("URL: ");
+ newKeyServerEdit = new QLineEdit(this);
+ auto *newKeyServerButton = new QPushButton(tr("Add"), this);
+ connect(newKeyServerButton, SIGNAL(clicked()), this, SLOT(addKeyServer()));
+ addKeyServerLayout->addWidget(http);
+ addKeyServerLayout->addWidget(newKeyServerEdit);
+ addKeyServerLayout->addWidget(newKeyServerButton);
+
+ generalLayout->addWidget(label);
+ generalLayout->addWidget(comboBox);
+ generalLayout->addWidget(keyServerTable);
+ generalLayout->addWidget(addKeyServerBox);
+ generalLayout->addStretch(0);
+
+ generalGroupBox->setLayout(generalLayout);
+ mainLayout->addWidget(generalGroupBox);
+ mainLayout->addStretch(0);
+
+ setLayout(mainLayout);
+ // Read keylist from ini-file and fill it into combobox
+ setSettings();
+ refreshTable();
+}
+
+/**********************************
+ * Read the settings from config
+ * and set the buttons and checkboxes
+ * appropriately
+ **********************************/
+void KeyserverTab::setSettings() {
+
+ keyServerStrList = settings.value("keyserver/keyServerList").toStringList();
+
+ for (const auto &keyServer : keyServerStrList) {
+ comboBox->addItem(keyServer);
+ qDebug() << "KeyserverTab Get ListItemText" << keyServer;
+ }
+
+ comboBox->setCurrentText(
+ settings.value("keyserver/defaultKeyServer").toString());
+
+}
+
+void KeyserverTab::addKeyServer() {
+ QString targetUrl;
+ if (newKeyServerEdit->text().startsWith("http://") ||
+ newKeyServerEdit->text().startsWith("https://"))
+ targetUrl = newKeyServerEdit->text();
+ else
+ targetUrl = "http://" + newKeyServerEdit->text();
+ keyServerStrList.append(targetUrl);
+ comboBox->addItem(targetUrl);
+ refreshTable();
+}
+
+/***********************************
+ * get the values of the buttons and
+ * write them to settings-file
+ *************************************/
+void KeyserverTab::applySettings() {
+ settings.setValue("keyserver/keyServerList", keyServerStrList);
+ settings.setValue("keyserver/defaultKeyServer", comboBox->currentText());
+}
+
+void KeyserverTab::refreshTable() {
+
+ qDebug() << "Start Refreshing Key Server Table";
+
+ keyServerTable->setRowCount(keyServerStrList.size());
+
+ int index = 0;
+ for (const auto &server : keyServerStrList) {
+ auto *tmp1 = new QTableWidgetItem(QString::number(index));
+ tmp1->setTextAlignment(Qt::AlignCenter);
+ keyServerTable->setItem(index, 0, tmp1);
+ auto *tmp2 = new QTableWidgetItem(server);
+ tmp2->setTextAlignment(Qt::AlignCenter);
+ keyServerTable->setItem(index, 1, tmp2);
+ auto *tmp3 = new QTableWidgetItem("");
+ tmp3->setTextAlignment(Qt::AlignCenter);
+ keyServerTable->setItem(index, 2, tmp3);
+ index++;
+ }
+}
diff --git a/src/ui/settings/SettingsSendMail.cpp b/src/ui/settings/SettingsSendMail.cpp
new file mode 100644
index 00000000..a5e3274f
--- /dev/null
+++ b/src/ui/settings/SettingsSendMail.cpp
@@ -0,0 +1,193 @@
+/**
+ * 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.
+ *
+ * Foobar 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 Foobar. If not, see <https://www.gnu.org/licenses/>.
+ *
+ * The initial version of the source code is inherited from gpg4usb-team.
+ * Their source code version also complies with GNU General Public License.
+ *
+ * The source code version of this software was modified and released
+ * by Saturneric<[email protected]> starting on May 12, 2021.
+ *
+ */
+
+#include "ui/SettingsDialog.h"
+#include "smtp/SmtpMime"
+
+SendMailTab::SendMailTab(QWidget *parent)
+ : QWidget(parent), appPath(qApp->applicationDirPath()),
+ settings(RESOURCE_DIR(appPath) + "/conf/gpgfrontend.ini",
+ QSettings::IniFormat) {
+
+ enableCheckBox = new QCheckBox(tr("Enable"));
+ enableCheckBox->setTristate(false);
+
+ smtpAddress = new QLineEdit();
+ username = new QLineEdit();
+ password = new QLineEdit();
+ password->setEchoMode(QLineEdit::Password);
+
+ portSpin = new QSpinBox();
+ portSpin->setMinimum(1);
+ portSpin->setMaximum(65535);
+ connectionTypeComboBox = new QComboBox();
+ connectionTypeComboBox->addItem("None");
+ connectionTypeComboBox->addItem("SSL");
+ connectionTypeComboBox->addItem("TLS");
+ connectionTypeComboBox->addItem("STARTTLS");
+
+ defaultSender = new QLineEdit();;
+ checkConnectionButton = new QPushButton(tr("Check Connection"));
+
+ auto generalGroupBox = new QGroupBox(tr("General"));
+ auto connectGroupBox = new QGroupBox(tr("Connection"));
+ auto preferenceGroupBox = new QGroupBox(tr("Preference"));
+
+ auto generalLayout = new QGridLayout();
+ generalLayout->addWidget(enableCheckBox);
+
+ auto connectLayout = new QGridLayout();
+ connectLayout->addWidget(new QLabel(tr("SMTP Address")), 1, 0);
+ connectLayout->addWidget(smtpAddress, 1, 1, 1, 4);
+ connectLayout->addWidget(new QLabel(tr("Username")), 2, 0);
+ connectLayout->addWidget(username, 2, 1, 1, 4);
+ connectLayout->addWidget(new QLabel(tr("Password")), 3, 0);
+ connectLayout->addWidget(password, 3, 1, 1, 4);
+ connectLayout->addWidget(new QLabel(tr("Port")), 4, 0);
+ connectLayout->addWidget(portSpin, 4, 1, 1, 1);
+ connectLayout->addWidget(new QLabel(tr("Connection Security")), 5, 0);
+ connectLayout->addWidget(connectionTypeComboBox, 5, 1, 1, 1);
+ connectLayout->addWidget(checkConnectionButton, 6, 0);
+
+ auto preferenceLayout = new QGridLayout();
+
+ preferenceLayout->addWidget(new QLabel(tr("Default Sender")), 0, 0);
+ preferenceLayout->addWidget(defaultSender, 0, 1, 1, 4);
+
+ generalGroupBox->setLayout(generalLayout);
+ connectGroupBox->setLayout(connectLayout);
+ preferenceGroupBox->setLayout(preferenceLayout);
+
+ auto vBox = new QVBoxLayout();
+ vBox->addWidget(generalGroupBox);
+ vBox->addWidget(connectGroupBox);
+ vBox->addWidget(preferenceGroupBox);
+ vBox->addStretch(0);
+
+ connect(enableCheckBox, SIGNAL(stateChanged(int)), this, SLOT(slotCheckBoxSetEnableDisable(int)));
+ connect(checkConnectionButton, SIGNAL(clicked(bool)), this, SLOT(slotCheckConnection()));
+
+
+ this->setLayout(vBox);
+ setSettings();
+}
+
+/**********************************
+ * Read the settings from config
+ * and set the buttons and checkboxes
+ * appropriately
+ **********************************/
+void SendMailTab::setSettings() {
+
+ if (settings.value("sendMail/enable", false).toBool())
+ enableCheckBox->setCheckState(Qt::Checked);
+ else {
+ enableCheckBox->setCheckState(Qt::Unchecked);
+ smtpAddress->setDisabled(true);
+ username->setDisabled(true);
+ password->setDisabled(true);
+ portSpin->setDisabled(true);
+ connectionTypeComboBox->setDisabled(true);
+ defaultSender->setDisabled(true);
+ checkConnectionButton->setDisabled(true);
+ }
+
+ smtpAddress->setText(settings.value("sendMail/smtpAddress", QString()).toString());
+ username->setText(settings.value("sendMail/username", QString()).toString());
+ password->setText(settings.value("sendMail/password", QString()).toString());
+ portSpin->setValue(settings.value("sendMail/port", 25).toInt());
+ connectionTypeComboBox->setCurrentText(settings.value("sendMail/connectionType", "None").toString());
+ defaultSender->setText(settings.value("sendMail/defaultSender", QString()).toString());
+
+}
+
+/***********************************
+ * get the values of the buttons and
+ * write them to settings-file
+ *************************************/
+void SendMailTab::applySettings() {
+
+ settings.setValue("sendMail/smtpAddress", smtpAddress->text());
+ settings.setValue("sendMail/username", username->text());
+ settings.setValue("sendMail/password", password->text());
+ settings.setValue("sendMail/port", portSpin->value());
+ settings.setValue("sendMail/connectionType", connectionTypeComboBox->currentText());
+ settings.setValue("sendMail/defaultSender", defaultSender->text());
+
+ settings.setValue("sendMail/enable", enableCheckBox->isChecked());
+}
+
+void SendMailTab::slotCheckConnection() {
+
+ SmtpClient::ConnectionType connectionType;
+ const auto selectedConnType = connectionTypeComboBox->currentText();
+ if (selectedConnType == "SSL") {
+ connectionType = SmtpClient::ConnectionType::SslConnection;
+ } else if (selectedConnType == "TLS" || selectedConnType == "STARTTLS") {
+ connectionType = SmtpClient::ConnectionType::TlsConnection;
+ } else {
+ connectionType = SmtpClient::ConnectionType::TcpConnection;
+ }
+
+ SmtpClient smtp(smtpAddress->text(), portSpin->value(), connectionType);
+
+ smtp.setUser(username->text());
+ smtp.setPassword(password->text());
+
+ bool if_success = true;
+
+ if (!smtp.connectToHost()) {
+ QMessageBox::critical(this, tr("Fail"), tr("Fail to Connect SMTP Server"));
+ if_success = false;
+ }
+ if (if_success && !smtp.login()) {
+ QMessageBox::critical(this, tr("Fail"), tr("Fail to Login"));
+ if_success = false;
+ }
+
+ if (if_success)
+ QMessageBox::information(this, tr("Success"), tr("Succeed in connecting and login"));
+
+}
+
+void SendMailTab::slotCheckBoxSetEnableDisable(int state) {
+ if (state == Qt::Checked) {
+ smtpAddress->setEnabled(true);
+ username->setEnabled(true);
+ password->setEnabled(true);
+ portSpin->setEnabled(true);
+ connectionTypeComboBox->setEnabled(true);
+ defaultSender->setEnabled(true);
+ checkConnectionButton->setEnabled(true);
+ } else {
+ smtpAddress->setDisabled(true);
+ username->setDisabled(true);
+ password->setDisabled(true);
+ portSpin->setDisabled(true);
+ connectionTypeComboBox->setDisabled(true);
+ defaultSender->setDisabled(true);
+ checkConnectionButton->setDisabled(true);
+ }
+}
+
diff --git a/src/ui/widgets/EditorPage.cpp b/src/ui/widgets/EditorPage.cpp
index 05d5cbea..beb37b96 100644
--- a/src/ui/widgets/EditorPage.cpp
+++ b/src/ui/widgets/EditorPage.cpp
@@ -44,8 +44,6 @@ EditorPage::EditorPage(QString filePath, QWidget *parent) : QWidget(parent),
// Front in same width
this->setFont({"Courier"});
-
- connect(textPage, SIGNAL(textChanged()), this, SLOT(formatGpgHeader()));
}
const QString &EditorPage::getFilePath() const {
diff --git a/src/ui/widgets/InfoBoardWidget.cpp b/src/ui/widgets/InfoBoardWidget.cpp
index f26917a4..b9372c59 100644
--- a/src/ui/widgets/InfoBoardWidget.cpp
+++ b/src/ui/widgets/InfoBoardWidget.cpp
@@ -50,11 +50,11 @@ InfoBoardWidget::InfoBoardWidget(QWidget *parent, GpgME::GpgContext *ctx, KeyLis
actionButtonMenu->setFixedHeight(36);
actionButtonLayout = new QHBoxLayout();
- actionButtonLayout->setContentsMargins(0, 0, 0, 0);
+ actionButtonLayout->setContentsMargins(5, 5, 5, 5);
actionButtonLayout->setSpacing(0);
actionButtonMenu->setLayout(actionButtonLayout);
- auto label = new QLabel(tr("Optional Actions Menu"));
+ auto label = new QLabel(tr("Optional Actions"));
label->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
label->setContentsMargins(0, 0, 0, 0);
@@ -150,25 +150,44 @@ void InfoBoardWidget::associateTabWidget(QTabWidget *tab) {
connect(tab, SIGNAL(tabCloseRequested(int)), this, SLOT(slotReset()));
}
+
void InfoBoardWidget::addOptionalAction(const QString &name, const std::function<void()> &action) {
auto actionButton = new QPushButton(name);
+ auto layout = new QHBoxLayout();
+ layout->setContentsMargins(5, 0, 5, 0);
infoBoard->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
- actionButtonLayout->addWidget(actionButton);
+ // set margin from surroundings
+ layout->addWidget(actionButton);
+ actionButtonLayout->addLayout(layout);
connect(actionButton, &QPushButton::clicked, this, [=]() {
action();
});
}
+/**
+ * Delete All item in actionButtonLayout
+ */
void InfoBoardWidget::resetOptionActionsMenu() {
- QLayoutItem *item;
- while ((item = actionButtonLayout->layout()->takeAt(2)) != nullptr) {
- actionButtonLayout->removeItem(item);
- delete item->widget();
- delete item;
- }
+ deleteWidgetsInLayout(actionButtonLayout, 2);
}
void InfoBoardWidget::slotReset() {
this->infoBoard->clear();
resetOptionActionsMenu();
}
+
+/**
+ * Try Delete all widget from target layout
+ * @param layout target layout
+ */
+void InfoBoardWidget::deleteWidgetsInLayout(QLayout *layout, int start_index) {
+ QLayoutItem *item;
+ while ((item = layout->layout()->takeAt(start_index)) != nullptr) {
+ layout->removeItem(item);
+ if (item->layout() != nullptr)
+ deleteWidgetsInLayout(item->layout());
+ else if (item->widget() != nullptr)
+ delete item->widget();
+ delete item;
+ }
+}
diff --git a/src/ui/widgets/KeyList.cpp b/src/ui/widgets/KeyList.cpp
index 3929868e..9c9c6763 100644
--- a/src/ui/widgets/KeyList.cpp
+++ b/src/ui/widgets/KeyList.cpp
@@ -31,8 +31,7 @@ KeyList::KeyList(GpgME::GpgContext *ctx,
KeyListColumn::InfoType infoType,
QWidget *parent)
: QWidget(parent), mSelectType(selectType), mInfoType(infoType), appPath(qApp->applicationDirPath()),
- settings(RESOURCE_DIR(appPath) + "/conf/gpgfrontend.ini", QSettings::IniFormat)
-{
+ settings(RESOURCE_DIR(appPath) + "/conf/gpgfrontend.ini", QSettings::IniFormat) {
mCtx = ctx;
@@ -43,7 +42,7 @@ KeyList::KeyList(GpgME::GpgContext *ctx,
mKeyList->setShowGrid(false);
mKeyList->sortByColumn(2, Qt::AscendingOrder);
mKeyList->setSelectionBehavior(QAbstractItemView::SelectRows);
- mKeyList->setSelectionMode( QAbstractItemView::SingleSelection );
+ mKeyList->setSelectionMode(QAbstractItemView::SingleSelection);
// tableitems not editable
mKeyList->setEditTriggers(QAbstractItemView::NoEditTriggers);
@@ -54,22 +53,22 @@ KeyList::KeyList(GpgME::GpgContext *ctx,
mKeyList->setAlternatingRowColors(true);
// Hidden Column For Purpose
- if(!(mInfoType & KeyListColumn::TYPE)) {
+ if (!(mInfoType & KeyListColumn::TYPE)) {
mKeyList->setColumnHidden(1, true);
}
- if(!(mInfoType & KeyListColumn::NAME)) {
+ if (!(mInfoType & KeyListColumn::NAME)) {
mKeyList->setColumnHidden(2, true);
}
- if(!(mInfoType & KeyListColumn::EmailAddress)) {
+ if (!(mInfoType & KeyListColumn::EmailAddress)) {
mKeyList->setColumnHidden(3, true);
}
- if(!(mInfoType & KeyListColumn::Usage)) {
+ if (!(mInfoType & KeyListColumn::Usage)) {
mKeyList->setColumnHidden(4, true);
}
- if(!(mInfoType & KeyListColumn::Validity)) {
+ if (!(mInfoType & KeyListColumn::Validity)) {
mKeyList->setColumnHidden(5, true);
}
- if(!(mInfoType & KeyListColumn::FingerPrint)) {
+ if (!(mInfoType & KeyListColumn::FingerPrint)) {
mKeyList->setColumnHidden(6, true);
}
@@ -95,8 +94,7 @@ KeyList::KeyList(GpgME::GpgContext *ctx,
slotRefresh();
}
-void KeyList::slotRefresh()
-{
+void KeyList::slotRefresh() {
QStringList *keyList;
keyList = getChecked();
// while filling the table, sort enabled causes errors
@@ -110,21 +108,21 @@ void KeyList::slotRefresh()
int row_count = 0;
while (it != keys.end()) {
- if(mFilter != nullptr) {
- if(!mFilter(*it)) {
+ if (mFilter != nullptr) {
+ if (!mFilter(*it)) {
it = keys.erase(it);
continue;
}
}
- if(!excluded_key_ids.isEmpty()){
+ if (!excluded_key_ids.isEmpty()) {
auto iterator = std::find_if(excluded_key_ids.begin(), excluded_key_ids.end(),
- [it] (const auto &key_id) -> bool {
- if(it->id == key_id) return true;
- else return false;
- });
+ [it](const auto &key_id) -> bool {
+ if (it->id == key_id) return true;
+ else return false;
+ });
- if(iterator != excluded_key_ids.end()) {
+ if (iterator != excluded_key_ids.end()) {
it = keys.erase(it);
continue;
}
@@ -161,10 +159,10 @@ void KeyList::slotRefresh()
type_steam << "pub";
}
- if(it->is_private_key && !it->has_master_key) {
+ if (it->is_private_key && !it->has_master_key) {
type_steam << "#";
}
- auto* tmp1 = new QTableWidgetItem(type_str);
+ auto *tmp1 = new QTableWidgetItem(type_str);
mKeyList->setItem(row_index, 1, tmp1);
auto *tmp2 = new QTableWidgetItem(it->name);
@@ -177,13 +175,13 @@ void KeyList::slotRefresh()
QString usage;
QTextStream usage_steam(&usage);
- if(GpgME::GpgContext::checkIfKeyCanCert(*it))
+ if (GpgME::GpgContext::checkIfKeyCanCert(*it))
usage_steam << "C";
- if(GpgME::GpgContext::checkIfKeyCanEncr(*it))
+ if (GpgME::GpgContext::checkIfKeyCanEncr(*it))
usage_steam << "E";
- if(GpgME::GpgContext::checkIfKeyCanSign(*it))
+ if (GpgME::GpgContext::checkIfKeyCanSign(*it))
usage_steam << "S";
- if(GpgME::GpgContext::checkIfKeyCanAuth(*it))
+ if (GpgME::GpgContext::checkIfKeyCanAuth(*it))
usage_steam << "A";
auto *temp_usage = new QTableWidgetItem(usage);
@@ -199,7 +197,7 @@ void KeyList::slotRefresh()
mKeyList->setItem(row_index, 6, temp_fpr);
// strike out expired keys
- if(it->expired || it->revoked) {
+ if (it->expired || it->revoked) {
QFont strike = tmp2->font();
strike.setStrikeOut(true);
tmp0->setFont(strike);
@@ -218,8 +216,7 @@ void KeyList::slotRefresh()
setChecked(keyList);
}
-QStringList *KeyList::getChecked()
-{
+QStringList *KeyList::getChecked() {
auto *ret = new QStringList();
for (int i = 0; i < mKeyList->rowCount(); i++) {
if (mKeyList->item(i, 0)->checkState() == Qt::Checked) {
@@ -229,19 +226,17 @@ QStringList *KeyList::getChecked()
return ret;
}
-QStringList *KeyList::getAllPrivateKeys()
-{
+QStringList *KeyList::getAllPrivateKeys() {
auto *ret = new QStringList();
for (int i = 0; i < mKeyList->rowCount(); i++) {
- if (mKeyList->item(i, 1)) {
+ if (mKeyList->item(i, 1) && buffered_keys[i].is_private_key) {
*ret << buffered_keys[i].id;
}
}
return ret;
}
-QStringList *KeyList::getPrivateChecked()
-{
+QStringList *KeyList::getPrivateChecked() {
auto *ret = new QStringList();
for (int i = 0; i < mKeyList->rowCount(); i++) {
if ((mKeyList->item(i, 0)->checkState() == Qt::Checked) && (mKeyList->item(i, 1))) {
@@ -251,19 +246,17 @@ QStringList *KeyList::getPrivateChecked()
return ret;
}
-void KeyList::setChecked(QStringList *keyIds)
-{
+void KeyList::setChecked(QStringList *keyIds) {
if (!keyIds->isEmpty()) {
for (int i = 0; i < mKeyList->rowCount(); i++) {
- if (keyIds->contains(buffered_keys[i].id)) {
+ if (keyIds->contains(buffered_keys[i].id)) {
mKeyList->item(i, 0)->setCheckState(Qt::Checked);
}
}
}
}
-QStringList *KeyList::getSelected()
-{
+QStringList *KeyList::getSelected() {
auto *ret = new QStringList();
for (int i = 0; i < mKeyList->rowCount(); i++) {
@@ -274,47 +267,42 @@ QStringList *KeyList::getSelected()
return ret;
}
-[[maybe_unused]] bool KeyList::containsPrivateKeys()
-{
+[[maybe_unused]] bool KeyList::containsPrivateKeys() {
for (int i = 0; i < mKeyList->rowCount(); i++) {
if (mKeyList->item(i, 1)) {
- return true;
+ return true;
}
}
return false;
}
-void KeyList::setColumnWidth(int row, int size)
-{
+void KeyList::setColumnWidth(int row, int size) {
mKeyList->setColumnWidth(row, size);
}
-void KeyList::contextMenuEvent(QContextMenuEvent *event)
-{
+void KeyList::contextMenuEvent(QContextMenuEvent *event) {
if (mKeyList->selectedItems().length() > 0) {
popupMenu->exec(event->globalPos());
}
}
-void KeyList::addSeparator()
-{
+void KeyList::addSeparator() {
popupMenu->addSeparator();
}
-void KeyList::addMenuAction(QAction *act)
-{
+void KeyList::addMenuAction(QAction *act) {
popupMenu->addAction(act);
}
-void KeyList::dropEvent(QDropEvent* event)
-{
+void KeyList::dropEvent(QDropEvent *event) {
auto *dialog = new QDialog();
dialog->setWindowTitle(tr("Import Keys"));
QLabel *label;
- label = new QLabel(tr("You've dropped something on the table.\n GpgFrontend will now try to import key(s).")+"\n");
+ label = new QLabel(
+ tr("You've dropped something on the table.\n GpgFrontend will now try to import key(s).") + "\n");
// "always import keys"-CheckBox
auto *checkBox = new QCheckBox(tr("Always import without bothering."));
@@ -332,56 +320,50 @@ void KeyList::dropEvent(QDropEvent* event)
dialog->setLayout(vbox);
- if (settings.value("general/confirmImportKeys",Qt::Checked).toBool())
- {
+ if (settings.value("general/confirmImportKeys", Qt::Checked).toBool()) {
dialog->exec();
if (dialog->result() == QDialog::Rejected) {
return;
}
- if (checkBox->isChecked()){
- settings.setValue("general/confirmImportKeys", false);
+ if (checkBox->isChecked()) {
+ settings.setValue("general/confirmImportKeys", false);
} else {
settings.setValue("general/confirmImportKeys", true);
}
}
- if (event->mimeData()->hasUrls())
- {
- for (const QUrl& tmp : event->mimeData()->urls())
- {
- QFile file;
- file.setFileName(tmp.toLocalFile());
- if (!file.open(QIODevice::ReadOnly)) {
- qDebug() << tr("Couldn't Open File: ") + tmp.toString();
- }
- QByteArray inBuffer = file.readAll();
- this->importKeys(inBuffer);
- file.close();
- }
- } else {
- QByteArray inBuffer(event->mimeData()->text().toUtf8());
+ if (event->mimeData()->hasUrls()) {
+ for (const QUrl &tmp : event->mimeData()->urls()) {
+ QFile file;
+ file.setFileName(tmp.toLocalFile());
+ if (!file.open(QIODevice::ReadOnly)) {
+ qDebug() << tr("Couldn't Open File: ") + tmp.toString();
+ }
+ QByteArray inBuffer = file.readAll();
this->importKeys(inBuffer);
- }
+ file.close();
+ }
+ } else {
+ QByteArray inBuffer(event->mimeData()->text().toUtf8());
+ this->importKeys(inBuffer);
+ }
}
-void KeyList::dragEnterEvent(QDragEnterEvent *event)
-{
+void KeyList::dragEnterEvent(QDragEnterEvent *event) {
event->acceptProposedAction();
}
/** set background color for Keys and put them to top
*
*/
-[[maybe_unused]] void KeyList::markKeys(QStringList *keyIds)
-{
- foreach(QString id, *keyIds) {
- qDebug() << "marked: " << id;
- }
+[[maybe_unused]] void KeyList::markKeys(QStringList *keyIds) {
+ foreach(QString id, *keyIds) {
+ qDebug() << "marked: " << id;
+ }
}
-void KeyList::importKeys(QByteArray inBuffer)
-{
+void KeyList::importKeys(QByteArray inBuffer) {
GpgImportInformation result = mCtx->importKey(std::move(inBuffer));
new KeyImportDetailDialog(mCtx, result, false, this);
}
@@ -397,7 +379,7 @@ void KeyList::getCheckedKeys(QVector<GpgKey> &keys) {
void KeyList::setExcludeKeys(std::initializer_list<QString> key_ids) {
excluded_key_ids.clear();
- for(auto &key_id : key_ids) {
+ for (auto &key_id : key_ids) {
excluded_key_ids.push_back(key_id);
}
}
@@ -407,8 +389,8 @@ void KeyList::setFilter(std::function<bool(const GpgKey &)> filter) {
}
void KeyList::slotDoubleClicked(const QModelIndex &index) {
- if(mAction != nullptr) {
- const auto &key = mCtx->getKeyById(buffered_keys[index.row()].id);
+ if (mAction != nullptr) {
+ const auto key = mCtx->getKeyById(buffered_keys[index.row()].id);
mAction(key, this);
}
diff --git a/src/ui/widgets/SignersPicker.cpp b/src/ui/widgets/SignersPicker.cpp
new file mode 100644
index 00000000..00df5fdd
--- /dev/null
+++ b/src/ui/widgets/SignersPicker.cpp
@@ -0,0 +1,59 @@
+/**
+ * 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.
+ *
+ * Foobar 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 Foobar. If not, see <https://www.gnu.org/licenses/>.
+ *
+ * The initial version of the source code is inherited from gpg4usb-team.
+ * Their source code version also complies with GNU General Public License.
+ *
+ * The source code version of this software was modified and released
+ * by Saturneric<[email protected]> starting on May 12, 2021.
+ *
+ */
+
+#include "ui/widgets/SignersPicker.h"
+
+SignersPicker::SignersPicker(GpgME::GpgContext *ctx, QWidget *parent) : mCtx(ctx), QDialog(parent) {
+ auto confirmButton = new QPushButton(tr("Confirm"));
+ connect(confirmButton, SIGNAL(clicked(bool)), this, SLOT(accept()));
+
+ /*Setup KeyList*/
+ mKeyList = new KeyList(mCtx, KeyListRow::ONLY_SECRET_KEY,
+ KeyListColumn::NAME | KeyListColumn::EmailAddress | KeyListColumn::Usage);
+
+ mKeyList->setFilter([](const GpgKey &key) -> bool {
+ if (!GpgME::GpgContext::checkIfKeyCanSign(key)) return false;
+ else return true;
+ });
+
+ mKeyList->slotRefresh();
+
+ auto *vbox2 = new QVBoxLayout();
+ vbox2->addWidget(new QLabel("Select Signer(s): "));
+ vbox2->addWidget(mKeyList);
+ vbox2->addWidget(confirmButton);
+ vbox2->addStretch(0);
+ setLayout(vbox2);
+
+ this->setModal(true);
+ this->setWindowTitle("Signers Picker");
+ this->setMinimumWidth(480);
+ this->show();
+
+
+}
+
+void SignersPicker::getCheckedSigners(QVector<GpgKey> &keys) {
+ mKeyList->getPrivateCheckedKeys(keys);
+}