From 512c2198507bcfa4367e39163edf8b626a3008a9 Mon Sep 17 00:00:00 2001 From: saturneric Date: Mon, 5 Aug 2024 17:29:04 +0200 Subject: [PATCH 1/8] fix: remove mimalloc from source Too bad, under Flatpak or even under Windows, this library can cause the program to crash. The reason for this is that there are some places that do not override the memory allocation method, but this does not guarantee that the mimalloc library will be loaded first in some environments (especially Flatpak) so I think it would be better to let the user install it themselves rather than include this library. Then override all mallocs as needed, which is easy to do. Sacrificing some of the security of the default state for the stability of the program feels necessary to me. --- .github/workflows/codeql-analysis.yml | 8 ------ .github/workflows/release-qt5.yml | 20 -------------- .github/workflows/release.yml | 20 -------------- src/CMakeLists.txt | 13 --------- src/core/CMakeLists.txt | 5 ---- src/core/function/SecureMemoryAllocator.cpp | 30 ++++----------------- src/core/thread/Task.cpp | 3 ++- 7 files changed, 7 insertions(+), 92 deletions(-) diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index b1a100eb..9b11ad8d 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -83,14 +83,6 @@ jobs: sudo make install cd ${{github.workspace}} - - name: Build mimalloc (Linux) - run: | - cd ${{github.workspace}}/third_party/mimalloc - mkdir build && cd build - cmake -G Ninja -DMI_SECURE=ON .. - ninja - sudo ninja install - - name: Build googletest (Linux) run: | cd ${{github.workspace}}/third_party/googletest diff --git a/.github/workflows/release-qt5.yml b/.github/workflows/release-qt5.yml index 1102379c..7870159e 100644 --- a/.github/workflows/release-qt5.yml +++ b/.github/workflows/release-qt5.yml @@ -138,26 +138,6 @@ jobs: cd ${{github.workspace}} if: matrix.os == 'ubuntu-20.04' - - name: Build mimalloc (Linux) - run: | - git clone --depth 1 --branch v2.1.7 https://github.com/microsoft/mimalloc.git ${{github.workspace}}/third_party/mimalloc - cd ${{github.workspace}}/third_party/mimalloc - mkdir build && cd build - cmake -G Ninja -DMI_SECURE=ON .. - ninja - sudo ninja install - if: matrix.os == 'ubuntu-20.04' - - - name: Build mimalloc (Windows) - shell: msys2 {0} - run: | - git clone --depth 1 --branch v2.1.7 https://github.com/microsoft/mimalloc.git ${{github.workspace}}/third_party/mimalloc - cd ${{github.workspace}}/third_party/mimalloc - mkdir build && cd build - cmake -G Ninja -DMI_SECURE=ON -DCMAKE_INSTALL_PREFIX=$MSYSTEM_PREFIX .. && ninja - ninja install - if: matrix.os == 'windows-2019' - - name: Build googletest (Linux) run: | git clone --depth 1 --branch v1.15.0 https://github.com/google/googletest.git ${{github.workspace}}/third_party/googletest diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 47bf1f5d..e6542d4d 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -164,26 +164,6 @@ jobs: make install if: matrix.os == 'windows-2019' - - name: Build mimalloc (Linux) - run: | - git clone --depth 1 --branch v2.1.7 https://github.com/microsoft/mimalloc.git ${{github.workspace}}/third_party/mimalloc - cd ${{github.workspace}}/third_party/mimalloc - mkdir build && cd build - cmake -G Ninja -DMI_SECURE=ON .. - ninja - sudo ninja install - if: matrix.os == 'ubuntu-20.04' - - - name: Build mimalloc (Windows) - shell: msys2 {0} - run: | - git clone --depth 1 --branch v2.1.7 https://github.com/microsoft/mimalloc.git ${{github.workspace}}/third_party/mimalloc - cd ${{github.workspace}}/third_party/mimalloc - mkdir build && cd build - cmake -G Ninja -DMI_SECURE=ON -DCMAKE_INSTALL_PREFIX=$MSYSTEM_PREFIX .. && ninja - ninja install - if: matrix.os == 'windows-2019' - - name: Build googletest (Linux) run: | git clone --depth 1 --branch v1.15.0 https://github.com/google/googletest.git ${{github.workspace}}/third_party/googletest diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 08b6e3a1..51239a4a 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -55,11 +55,6 @@ endif() find_package(OpenSSL REQUIRED) -# mimalloc -if(NOT APPLE) - find_package(mimalloc REQUIRED) -endif() - # Set Build Information configure_file(${CMAKE_SOURCE_DIR}/src/GpgFrontend.h.in ${CMAKE_SOURCE_DIR}/src/GpgFrontend.h @ONLY) configure_file(${CMAKE_SOURCE_DIR}/src/GpgFrontendBuildInfo.h.in ${CMAKE_SOURCE_DIR}/src/GpgFrontendBuildInfo.h @ONLY) @@ -283,14 +278,6 @@ if(BUILD_APPLICATION AND MINGW) file(GLOB _libDllPath "${MSYS64_BIN_PATH}/libgpgfrontend_*.dll") list(APPEND ALL_RUNTIME_DEP_PATH_LIST ${_libDllPath}) - unset(_libDllPath) - file(GLOB _libDllPath "${MSYS64_BIN_PATH}/libmimalloc*.dll") - list(APPEND ALL_RUNTIME_DEP_PATH_LIST ${_libDllPath}) - - unset(_libDllPath) - file(GLOB _libDllPath "${MSYS64_BIN_PATH}/mimalloc*.dll") - list(APPEND ALL_RUNTIME_DEP_PATH_LIST ${_libDllPath}) - unset(_libDllPath) file(GLOB _libDllPath "${MSYS64_BIN_PATH}/libarchive*.dll") list(APPEND ALL_RUNTIME_DEP_PATH_LIST ${_libDllPath}) diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt index 81c3f08f..90409e22 100644 --- a/src/core/CMakeLists.txt +++ b/src/core/CMakeLists.txt @@ -50,11 +50,6 @@ generate_export_header(gpgfrontend_core EXPORT_FILE_NAME "${_export_file}") # compile definitions target_compile_definitions(gpgfrontend_core PRIVATE GF_CORE_PRIVATE) -# mimalloc (except apple macos) -if(NOT APPLE) - target_link_libraries(gpgfrontend_core PUBLIC mimalloc) -endif() - # qt-aes target_sources(gpgfrontend_core PRIVATE ${CMAKE_SOURCE_DIR}/third_party/qt-aes/qaesencryption.cpp) diff --git a/src/core/function/SecureMemoryAllocator.cpp b/src/core/function/SecureMemoryAllocator.cpp index c24e13f2..47301038 100644 --- a/src/core/function/SecureMemoryAllocator.cpp +++ b/src/core/function/SecureMemoryAllocator.cpp @@ -28,42 +28,22 @@ #include "SecureMemoryAllocator.h" -namespace GpgFrontend { +#include -#if defined(__APPLE__) && defined(__MACH__) +namespace GpgFrontend { auto SecureMemoryAllocator::Allocate(std::size_t size) -> void* { - auto* addr = malloc(size); + auto* addr = std::malloc(size); if (addr == nullptr) FLOG_F("malloc failed!"); return addr; } auto SecureMemoryAllocator::Reallocate(void* ptr, std::size_t size) -> void* { - auto* addr = realloc(ptr, size); + auto* addr = std::realloc(ptr, size); if (addr == nullptr) FLOG_F("realloc failed!"); return addr; } -void SecureMemoryAllocator::Deallocate(void* p) { free(p); } - -#else - -#include - -auto SecureMemoryAllocator::Allocate(std::size_t size) -> void* { - auto* addr = mi_malloc(size); - if (addr == nullptr) FLOG_F("malloc failed!"); - return addr; -} - -auto SecureMemoryAllocator::Reallocate(void* ptr, std::size_t size) -> void* { - auto* addr = mi_realloc(ptr, size); - if (addr == nullptr) FLOG_F("realloc memory failed!"); - return addr; -} - -void SecureMemoryAllocator::Deallocate(void* p) { mi_free(p); } - -#endif +void SecureMemoryAllocator::Deallocate(void* p) { std::free(p); } } // namespace GpgFrontend \ No newline at end of file diff --git a/src/core/thread/Task.cpp b/src/core/thread/Task.cpp index 7a0e76e8..71c3f7b2 100644 --- a/src/core/thread/Task.cpp +++ b/src/core/thread/Task.cpp @@ -164,7 +164,8 @@ class Task::Impl { } }; -Task::Task(QString name) : p_(new Impl(this, name)) {} +Task::Task(QString name) + : p_(SecureCreateUniqueObject(this, name)) {} Task::Task(TaskRunnable runnable, QString name, DataObjectPtr data_object) : p_(SecureCreateUniqueObject(this, runnable, name, data_object)) {} From d4e2335bfdff0985d4e410bf608bf73ff1fcfca7 Mon Sep 17 00:00:00 2001 From: saturneric Date: Mon, 5 Aug 2024 17:49:22 +0200 Subject: [PATCH 2/8] fix: custom key database feature not working --- src/core/GpgCoreInit.cpp | 14 +++++++------- src/core/function/gpg/GpgContext.cpp | 10 +++++----- src/core/function/gpg/GpgContext.h | 3 +-- 3 files changed, 13 insertions(+), 14 deletions(-) diff --git a/src/core/GpgCoreInit.cpp b/src/core/GpgCoreInit.cpp index 3f738835..68acc4cc 100644 --- a/src/core/GpgCoreInit.cpp +++ b/src/core/GpgCoreInit.cpp @@ -304,9 +304,6 @@ void InitGpgFrontendCore(CoreInitArgs args) { auto custom_key_database_path = settings.value("gnupg/custom_key_database_path", QString{}).toString(); - auto custom_gnupg_install_path = - settings.value("gnupg/custom_gnupg_install_path", QString{}).toString(); - auto use_pinentry_as_password_input_dialog = settings .value("gnupg/use_pinentry_as_password_input_dialog", @@ -327,10 +324,14 @@ void InitGpgFrontendCore(CoreInitArgs args) { !custom_key_database_path.isEmpty()) { if (VerifyKeyDatabasePath(QFileInfo(custom_key_database_path))) { key_database_fs_path = - QFileInfo(custom_gnupg_install_path).absoluteFilePath(); + QFileInfo(custom_key_database_path).absoluteFilePath(); + LOG_D() << "use custom gpg key database: " << key_database_fs_path + << "raw:" << custom_key_database_path; + } else { LOG_W() << "custom gpg key database path is not suitable: " - << key_database_fs_path; + << key_database_fs_path + << "raw:" << custom_key_database_path; } } else { @@ -354,8 +355,7 @@ void InitGpgFrontendCore(CoreInitArgs args) { // set custom gnupg path if (!gnupg_install_fs_path.isEmpty()) { - args.custom_gpgconf = true; - args.custom_gpgconf_path = gnupg_install_fs_path; + args.gpgconf_path = gnupg_install_fs_path; } args.offline_mode = forbid_all_gnupg_connection; diff --git a/src/core/function/gpg/GpgContext.cpp b/src/core/function/gpg/GpgContext.cpp index 2d9c5992..a661f183 100644 --- a/src/core/function/gpg/GpgContext.cpp +++ b/src/core/function/gpg/GpgContext.cpp @@ -236,11 +236,10 @@ class GpgContext::Impl { const GpgContextInitArgs &args) -> bool { assert(ctx != nullptr); - if (args.custom_gpgconf && !args.custom_gpgconf_path.isEmpty()) { - LOG_D() << "set custom gpgconf path: " << args.custom_gpgconf_path; - auto err = - gpgme_ctx_set_engine_info(ctx, GPGME_PROTOCOL_GPGCONF, - args.custom_gpgconf_path.toUtf8(), nullptr); + if (!args.gpgconf_path.isEmpty()) { + LOG_D() << "set custom gpgconf path: " << args.gpgconf_path; + auto err = gpgme_ctx_set_engine_info(ctx, GPGME_PROTOCOL_GPGCONF, + args.gpgconf_path.toUtf8(), nullptr); if (CheckGpgError(err) != GPG_ERR_NO_ERROR) { LOG_W() << "set gpg context engine info error: " @@ -284,6 +283,7 @@ class GpgContext::Impl { // set custom gpg key db path if (!args_.db_path.isEmpty()) { + LOG_D() << "set context database path to" << args_.db_path; Module::UpsertRTValue("core", "gpgme.ctx.database_path", args_.db_path); } diff --git a/src/core/function/gpg/GpgContext.h b/src/core/function/gpg/GpgContext.h index 7a7ef24b..1ff22b8a 100644 --- a/src/core/function/gpg/GpgContext.h +++ b/src/core/function/gpg/GpgContext.h @@ -46,8 +46,7 @@ struct GpgContextInitArgs { bool offline_mode = false; ///< bool auto_import_missing_key = false; ///< - bool custom_gpgconf = false; ///< - QString custom_gpgconf_path; ///< + QString gpgconf_path; ///< bool use_pinentry = false; ///< }; From a11655ce47e778b2b449938651257c7c863b3174 Mon Sep 17 00:00:00 2001 From: saturneric Date: Mon, 5 Aug 2024 18:31:08 +0200 Subject: [PATCH 3/8] fix: key server adding or switching is actually not working --- src/ui/UserInterfaceUtils.cpp | 2 +- .../dialog/import_export/KeyServerImportDialog.cpp | 12 ++++++++---- src/ui/dialog/import_export/KeyServerImportDialog.h | 2 +- src/ui/dialog/import_export/KeyUploadDialog.cpp | 11 ++++++----- src/ui/dialog/settings/SettingsKeyServer.cpp | 13 ++++++++----- src/ui/struct/settings_object/KeyServerSO.h | 3 +++ src/ui/thread/KeyServerImportTask.cpp | 2 +- src/ui/thread/KeyServerSearchTask.cpp | 8 +++++++- src/ui/thread/KeyServerSearchTask.h | 2 +- 9 files changed, 36 insertions(+), 19 deletions(-) diff --git a/src/ui/UserInterfaceUtils.cpp b/src/ui/UserInterfaceUtils.cpp index c6be2715..0f462cf7 100644 --- a/src/ui/UserInterfaceUtils.cpp +++ b/src/ui/UserInterfaceUtils.cpp @@ -560,7 +560,7 @@ void CommonUtils::RemoveKeyFromFavourite(const GpgKey &key) { * */ void CommonUtils::ImportKeyFromKeyServer(const KeyIdArgsList &key_ids) { - KeyServerSO key_server(SettingsObject("general_settings_state")); + KeyServerSO key_server(SettingsObject("key_server")); auto target_keyserver = key_server.GetTargetServer(); auto *task = new KeyServerImportTask(target_keyserver, key_ids); diff --git a/src/ui/dialog/import_export/KeyServerImportDialog.cpp b/src/ui/dialog/import_export/KeyServerImportDialog.cpp index 47d80090..e1d2be72 100644 --- a/src/ui/dialog/import_export/KeyServerImportDialog.cpp +++ b/src/ui/dialog/import_export/KeyServerImportDialog.cpp @@ -125,12 +125,15 @@ auto KeyServerImportDialog::create_combo_box() -> QComboBox* { combo_box->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); try { - KeyServerSO key_server(SettingsObject("general_settings_state")); + KeyServerSO key_server(SettingsObject("key_server")); const auto& key_server_list = key_server.server_list; for (const auto& key_server : key_server_list) { combo_box->addItem(key_server); } - combo_box->setCurrentText(key_server.GetTargetServer()); + auto target_key_server = key_server.GetTargetServer(); + LOG_D() << "set combo box to key server: " << target_key_server; + + combo_box->setCurrentText(target_key_server); } catch (...) { FLOG_W("setting operation error server_list default_server"); } @@ -207,7 +210,7 @@ void KeyServerImportDialog::slot_search() { } void KeyServerImportDialog::slot_search_finished( - QNetworkReply::NetworkError error, QByteArray buffer) { + QNetworkReply::NetworkError error, QString err_string, QByteArray buffer) { keys_table_->clearContents(); keys_table_->setRowCount(0); @@ -226,6 +229,7 @@ void KeyServerImportDialog::slot_search_finished( break; default: set_message(tr("Connection Error"), true); + QMessageBox::critical(this, tr("Connection Error"), err_string); } return; } @@ -380,7 +384,7 @@ void KeyServerImportDialog::SlotImport(const KeyIdArgsListPtr& keys) { target_keyserver = key_server_combo_box_->currentText(); } if (target_keyserver.isEmpty()) { - KeyServerSO key_server(SettingsObject("general_settings_state")); + KeyServerSO key_server(SettingsObject("key_server")); target_keyserver = key_server.GetTargetServer(); } std::vector key_ids; diff --git a/src/ui/dialog/import_export/KeyServerImportDialog.h b/src/ui/dialog/import_export/KeyServerImportDialog.h index 366e214d..3af381e7 100644 --- a/src/ui/dialog/import_export/KeyServerImportDialog.h +++ b/src/ui/dialog/import_export/KeyServerImportDialog.h @@ -90,7 +90,7 @@ class KeyServerImportDialog : public GeneralDialog { * */ void slot_search_finished(QNetworkReply::NetworkError reply, - QByteArray buffer); + QString err_string, QByteArray buffer); /** * @brief diff --git a/src/ui/dialog/import_export/KeyUploadDialog.cpp b/src/ui/dialog/import_export/KeyUploadDialog.cpp index a19f02f2..80408107 100644 --- a/src/ui/dialog/import_export/KeyUploadDialog.cpp +++ b/src/ui/dialog/import_export/KeyUploadDialog.cpp @@ -94,11 +94,12 @@ void KeyUploadDialog::SlotUpload() { void KeyUploadDialog::slot_upload_key_to_server( const GpgFrontend::GFBuffer& keys_data) { - KeyServerSO key_server(SettingsObject("general_settings_state")); - auto target_keyserver = key_server.GetTargetServer(); + KeyServerSO key_server(SettingsObject("key_server")); + auto target_key_server = key_server.GetTargetServer(); - QUrl req_url(target_keyserver + "/pks/add"); - auto* qnam = new QNetworkAccessManager(this); + LOG_D() << "upload public key using key server" << target_key_server; + QUrl req_url(target_key_server + "/pks/add"); + auto* q_nam = new QNetworkAccessManager(this); // Building Post Data QByteArray post_data; @@ -124,7 +125,7 @@ void KeyUploadDialog::slot_upload_key_to_server( post_data.append("keytext").append("=").append(data); // Send Post Data - QNetworkReply* reply = qnam->post(request, post_data); + QNetworkReply* reply = q_nam->post(request, post_data); connect(reply, &QNetworkReply::finished, this, &KeyUploadDialog::slot_upload_finished); diff --git a/src/ui/dialog/settings/SettingsKeyServer.cpp b/src/ui/dialog/settings/SettingsKeyServer.cpp index 5ba03740..38256c8e 100644 --- a/src/ui/dialog/settings/SettingsKeyServer.cpp +++ b/src/ui/dialog/settings/SettingsKeyServer.cpp @@ -94,7 +94,7 @@ KeyserverTab::KeyserverTab(QWidget* parent) connect(ui_->actionSet_As_Default, &QAction::triggered, [=]() { const auto row_size = ui_->keyServerListTable->rowCount(); for (int i = 0; i < row_size; i++) { - const auto item = ui_->keyServerListTable->item(i, 1); + auto* const item = ui_->keyServerListTable->item(i, 1); if (!item->isSelected()) continue; this->default_key_server_ = item->text(); } @@ -164,18 +164,21 @@ void KeyserverTab::slot_add_key_server() { void KeyserverTab::ApplySettings() { SettingsObject key_server_json("key_server"); - KeyServerSO key_server; + KeyServerSO key_server_so; - auto& key_server_list = key_server.server_list; + auto& key_server_list = key_server_so.server_list; const auto list_size = key_server_str_list_.size(); for (int i = 0; i < list_size; i++) { const auto key_server = key_server_str_list_[i]; if (default_key_server_ == key_server) { - key_server_json["default_server"] = i; + LOG_D() << "set default key server as:" << default_key_server_ + << "index: " << i; + key_server_so.default_server = i; } key_server_list << key_server; } - key_server_json.Store(key_server.ToJson()); + LOG_D() << "key server settings json:" << key_server_so.ToJson(); + key_server_json.Store(key_server_so.ToJson()); } void KeyserverTab::slot_refresh_table() { diff --git a/src/ui/struct/settings_object/KeyServerSO.h b/src/ui/struct/settings_object/KeyServerSO.h index bec829e4..3c508eaf 100644 --- a/src/ui/struct/settings_object/KeyServerSO.h +++ b/src/ui/struct/settings_object/KeyServerSO.h @@ -65,6 +65,9 @@ struct KeyServerSO { } auto GetTargetServer() -> QString { + LOG_D() << "default key server index" << default_server + << "server list size" << server_list.size(); + if (server_list.empty()) this->ResetDefaultServerList(); if (default_server >= server_list.size()) default_server = 0; return server_list[default_server]; diff --git a/src/ui/thread/KeyServerImportTask.cpp b/src/ui/thread/KeyServerImportTask.cpp index 0abeb944..4a1b0e13 100644 --- a/src/ui/thread/KeyServerImportTask.cpp +++ b/src/ui/thread/KeyServerImportTask.cpp @@ -42,7 +42,7 @@ GpgFrontend::UI::KeyServerImportTask::KeyServerImportTask( HoldOnLifeCycle(true); if (keyserver_url_.isEmpty()) { - KeyServerSO key_server(SettingsObject("general_settings_state")); + KeyServerSO key_server(SettingsObject("key_server")); keyserver_url_ = key_server.GetTargetServer(); } } diff --git a/src/ui/thread/KeyServerSearchTask.cpp b/src/ui/thread/KeyServerSearchTask.cpp index 704899a4..2f7f08a7 100644 --- a/src/ui/thread/KeyServerSearchTask.cpp +++ b/src/ui/thread/KeyServerSearchTask.cpp @@ -61,6 +61,12 @@ void GpgFrontend::UI::KeyServerSearchTask::dealing_reply_from_server() { if (network_reply == QNetworkReply::NoError) { buffer = reply_->readAll(); } - emit SignalKeyServerSearchResult(network_reply, buffer); + + LOG_D() << "reply from key server:" << network_reply + << "err string:" << reply_->errorString() + << "reply:" << QString::fromLatin1(buffer); + + emit SignalKeyServerSearchResult(network_reply, reply_->errorString(), + buffer); emit SignalTaskShouldEnd(0); } diff --git a/src/ui/thread/KeyServerSearchTask.h b/src/ui/thread/KeyServerSearchTask.h index d602e537..df247761 100644 --- a/src/ui/thread/KeyServerSearchTask.h +++ b/src/ui/thread/KeyServerSearchTask.h @@ -60,7 +60,7 @@ class KeyServerSearchTask : public Thread::Task { * @param result */ void SignalKeyServerSearchResult(QNetworkReply::NetworkError reply, - QByteArray buffer); + QString err_string, QByteArray buffer); private slots: From c44032dc67205e3b303190d0a7afdaa439e01560 Mon Sep 17 00:00:00 2001 From: saturneric Date: Mon, 5 Aug 2024 18:31:57 +0200 Subject: [PATCH 4/8] fix: correct spelling mistakes --- src/ui/GpgFrontendUIInit.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/ui/GpgFrontendUIInit.cpp b/src/ui/GpgFrontendUIInit.cpp index 965ce471..9cca46c2 100644 --- a/src/ui/GpgFrontendUIInit.cpp +++ b/src/ui/GpgFrontendUIInit.cpp @@ -48,7 +48,7 @@ QList loaded_qm_datum; extern void InitUITranslations(); void WaitEnvCheckingProcess() { - FLOG_D("need to waiting for env checking process"); + FLOG_D("need to wait for env checking process"); // create and show loading window before starting the main window auto* waiting_dialog = new QProgressDialog(); @@ -86,8 +86,7 @@ void WaitEnvCheckingProcess() { auto env_state = Module::RetrieveRTValueTypedOrDefault<>("core", "env.state.all", 0); - FLOG_D("ui is ready to waiting for env initialized, env_state: %d", - env_state); + FLOG_D("ui is ready to wait for env initialized, env_state: %d", env_state); // check twice to avoid some unlucky sitations if (env_state == 1) { @@ -200,7 +199,7 @@ void InitGpgFrontendUI(QApplication* /*app*/) { void WaitingAllInitializationFinished() { if (Module::RetrieveRTValueTypedOrDefault<>("core", "env.state.all", 0) == 0) { - LOG_D() << "ui init is done, but cor doesn't, going to waiting for core..."; + LOG_D() << "ui init is done, but core doesn't, going to wait for core..."; WaitEnvCheckingProcess(); } LOG_D() << "application fully initialized..."; From 8bea955acbd0e607e32f80b4b8d14d4e1c4732b1 Mon Sep 17 00:00:00 2001 From: saturneric Date: Mon, 5 Aug 2024 18:39:54 +0200 Subject: [PATCH 5/8] feat: add setting icon --- gpgfrontend.qrc | 1 + resource/lfs/icons/setting.png | Bin 0 -> 5281 bytes src/ui/main_window/MainWindowUI.cpp | 1 + 3 files changed, 2 insertions(+) create mode 100644 resource/lfs/icons/setting.png diff --git a/gpgfrontend.qrc b/gpgfrontend.qrc index a04c1819..12c83fd9 100644 --- a/gpgfrontend.qrc +++ b/gpgfrontend.qrc @@ -98,6 +98,7 @@ resource/lfs/icons/stairs.png resource/lfs/icons/detail.png resource/lfs/icons/filter.png + resource/lfs/icons/setting.png resource/lfs/test/data/pv1.key diff --git a/resource/lfs/icons/setting.png b/resource/lfs/icons/setting.png new file mode 100644 index 0000000000000000000000000000000000000000..cc9ac5adce979de1d0271c5f4f2b80d0bbd15374 GIT binary patch literal 5281 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ℑ;MaT`n$N;g^33 z>k|&t+Pj5>F~K0XM3WI%gfkIfDVBEUCb8C{}DH4#3;k=X!Bfmwbv&* z$$L3178ssetIcon(QIcon(":/icons/setting.png")); open_settings_act_->setToolTip(tr("Open settings dialog")); open_settings_act_->setMenuRole(QAction::PreferencesRole); open_settings_act_->setShortcut(QKeySequence::Preferences); From 6c9b573357d055bd0968c6c516be73e2b5df50f6 Mon Sep 17 00:00:00 2001 From: saturneric Date: Mon, 5 Aug 2024 18:40:49 +0200 Subject: [PATCH 6/8] fix: app only build issue --- src/test/GpgFrontendTest.h | 2 +- src/ui/GpgFrontendUI.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/test/GpgFrontendTest.h b/src/test/GpgFrontendTest.h index c5b7a375..16534656 100644 --- a/src/test/GpgFrontendTest.h +++ b/src/test/GpgFrontendTest.h @@ -32,7 +32,7 @@ #include "GpgFrontend.h" // symbol exports header -#include "GpgFrontendTestExport.h" +#include "test/GpgFrontendTestExport.h" // private declare area of test #ifdef GF_TEST_PRIVATE diff --git a/src/ui/GpgFrontendUI.h b/src/ui/GpgFrontendUI.h index 39c39686..6eac6b16 100644 --- a/src/ui/GpgFrontendUI.h +++ b/src/ui/GpgFrontendUI.h @@ -35,7 +35,7 @@ #include // ui symbol exports macro -#include "GpgFrontendUIExport.h" +#include "ui/GpgFrontendUIExport.h" // private declare area of ui #ifdef GF_UI_PRIVATE From 72030d92f6ae0b2dc573b469d917103fa7f83708 Mon Sep 17 00:00:00 2001 From: saturneric Date: Mon, 5 Aug 2024 18:45:06 +0200 Subject: [PATCH 7/8] fix: filling in missing translations --- resource/lfs/locale/ts/GpgFrontend.de_DE.ts | 2668 ++++++++++++++++--- resource/lfs/locale/ts/GpgFrontend.zh_CN.ts | 2666 +++++++++++++++--- src/ui/widgets/KeyList.cpp | 4 +- 3 files changed, 4733 insertions(+), 605 deletions(-) diff --git a/resource/lfs/locale/ts/GpgFrontend.de_DE.ts b/resource/lfs/locale/ts/GpgFrontend.de_DE.ts index 07450b89..52b20721 100644 --- a/resource/lfs/locale/ts/GpgFrontend.de_DE.ts +++ b/resource/lfs/locale/ts/GpgFrontend.de_DE.ts @@ -1,6 +1,710 @@ + + AppearanceSettings + + + + + + + + + Appearance Settings + + + + + + + + + + + General + Allgemein + + + + + + + + + + Theme + Thema + + + + + + + + + + Save window size and position on exit. + Fenstergröße und Position beim Beenden speichern. + + + + + + + + + + Font Size + Schriftgröße + + + + + + + + + + Text Editor + Texteditor + + + + + + + + + + Information Board + Informationstafel + + + + + + + + + + Toolbar Icon + Symbol für die Symbolleiste + + + + + + + + + + Size + Größe + + + + + + + + + + small + klein + + + + + + + + + + medium + Mittel + + + + + + + + + + large + groß + + + + + + + + + + Style + Stil + + + + + + + + + + just text + nur Text + + + + + + + + + + just icons + nur Symbole + + + + + + + + + + text and icons + Text und Symbole + + + + EmailListEditorDialog + + + Email List Editor + + + + + Email List: + + + + + Add An Email Address + + + + + Tips: You can double-click the email address in the edit list, or click the email to pop up the option menu. + + + + + Delete Selected Email Address + + + + + FilePage + + + + + + + + + Form + + + + + + + + + + + ... + + + + + GTrC + + + GnuPG + GnuPG + + + + Update + Aktualisieren + + + + GeneralSettings + + + + + + + + + Form + + + + + + + + + + + Cache + Zwischenspeicher + + + + + + + + + + Clear gpg password cache when closing GpgFrontend. + Gpg-Passwort-Cache leeren, wenn GpgFrontend geschlossen wird. + + + + + + + + + + Automatically restore unsaved Text Editor pages after an application crash. + Nicht gespeicherte Texteditor-Seiten nach einem Anwendungsabsturz wiederherstellen. + + + + + + + + + + Operation + Vorgang + + + + + + + + + + Import files dropped on the Key List without confirmation. + Dateien ohne Nachfrage importieren, die auf der Schlüsselliste abgelegt wurden. + + + + + + + + + + Enable to use longer key expiration date. + Aktivieren, um ein längeres Schlüsselablaufdatum zu verwenden. + + + + + + + + + Disable loading of all modules (including integrated modules) + Deaktivieren des Ladens aller Module (einschließlich integrierter Module) + + + + + + + + + + Language + Sprache + + + + + + + + + + NOTE: GpgFrontend will restart automatically if you change the language! + + + + + + + + + + + Data + Daten + + + + + + + + + + Reveal in File Explorer + Im Datei-Explorer öffnen + + + + + + + + + + Clear All Log Files + + + + + + + + + + + Clear All Data Objects Files + + + + + Provide more options in the signing process. + + + + + GnuPGConfigManagerDialog + + + GnuPG Config Manager + + + + + TextLabel + + + + + PushButton + + + + + GnuPGControllerDialog + + + + + + + + + GnuPG Controller + GnuPG-Controller + + + + + + + + + + General + Allgemein + + + + + + + + + + Use Binary Mode for File Operations + Binärmodus für Dateioperationen verwenden + + + + + + + + + + Use Pinentry as Password Input Dialog + Verwenden Sie Pinentry als Dialog für die Passworteingabe + + + + + + + + + + Enable GpgME Debug Log + GpgME-Debug-Log einschalten + + + + + + + + + + Restart Gpg Agent on start + Gpg-Agent beim Start neu starten + + + + + + + + + + Kill all gnupg daemon at close + Alle gnupg-Daemons beim Schließen abschalten + + + + + + + + + + Key Database + Schlüsseldatenbank + + + + + + + + + + Use Custom GnuPG Key Database Path + Benutzerdefinierten Pfad für die GnuPG-Schlüsseldatenbank verwenden + + + + + + + + + + Select Key Database Path + Wählen Sie den Pfad für die Schlüsseldatenbank aus + + + + + + + + + + Advance + Vorgezogene Funktion + + + + + + + + + + Use Custom GnuPG + Verwenden Sie benutzerdefiniertes GnuPG + + + + + + + + + + Select GnuPG Path + Wählen Sie den GnuPG-Pfad aus + + + + + + + + + + Tips: please select a directroy where "gpgconf" is located in. + Tipps: Bitte wählen Sie ein Verzeichnis aus, in dem sich "gpgconf" befindet. + + + + + + + + + + Tips: notice that modify any of these settings will cause an Application restart. + Tipps: Beachten Sie, dass das Ändern dieser Einstellungen zu einem Neustart der Anwendung führt. + + + + GnuPGInfo + + + + GnuPG Info + + + + + + Version + Version + + + + + Components + Komponenten + + + + + Directories + Verzeichnisse + + + + + Options + Optionen + + + + GnupgTab + + + Name + Name + + + + + Description + Beschreibung + + + + Version + Version + + + + Checksum + Prüfsumme + + + + Binary Path + Binärer Pfad + + + + Components + Komponenten + + + + Directories + Verzeichnisse + + + + Options + Optionen + + + + Directory Type + Verzeichnis Typ + + + + Path + Pfad + + + + Component + Komponente + + + + Group + Gruppe + + + + Key + Schlüssel + + + + Default Value + Standardwert + + + + Value + Wert + + GpgFrontend::GpgDecryptResultAnalyse @@ -354,15 +1058,15 @@ - - + + UTC koordinierte Weltzeit - - + + Localized lokalisiert @@ -453,42 +1157,42 @@ - + Fingerprint Fingerabdruck - - + + <unknown> <unbekannt> - - - - + + + + Sign Date Unterschrift Datum + - Key ID Schlüssel-ID - + Subkey Unterschlüssel - + Primary Key Primärschlüssel - + Key Create Date Schlüssel Erstellungsdatum @@ -538,8 +1242,8 @@ - - + + Signed By Unterzeichnet von @@ -548,14 +1252,14 @@ Unbekannt - - + + Public Key Algo Algo für öffentliche Schlüssel - - + + Hash Algo Hash Algo @@ -1475,14 +2179,14 @@ This will result in loss of all cached form positions, statuses, key servers, et Verzeichnis öffnen - + GnuPG Controller GnuPG-Controller - - - + + + Illegal GnuPG Path Unzulässiger GnuPG-Pfad @@ -1491,22 +2195,22 @@ This will result in loss of all cached form positions, statuses, key servers, et Der Ziel-GnuPG-Pfad ist leer. - + Target GnuPG Path is not an exists readable directory. Der Ziel-GnuPG-Pfad ist kein lesbares Verzeichnis. - + Target GnuPG Path is not an absolute path. Der Ziel-GnuPG-Pfad ist kein absoluter Pfad. - + Target GnuPG Path contains no "gpgconf" executable. Der Ziel-GnuPG-Pfad enthält keine ausführbare Datei „gpgconf“. - + Illegal GnuPG Key Database Path Unzulässiger GnuPG-Schlüsseldatenbankpfad @@ -1515,7 +2219,7 @@ This will result in loss of all cached form positions, statuses, key servers, et Der Zielpfad für die GnuPG-Schlüsseldatenbank ist leer. - + Target GnuPG Key Database Path is not an exists readable directory. Der Zielpfad für die GnuPG-Schlüsseldatenbank ist kein lesbares Verzeichnis. @@ -1768,7 +2472,7 @@ This will result in loss of all cached form positions, statuses, key servers, et Aktivieren - + Key Details Schlüssel Details @@ -2118,6 +2822,16 @@ This will result in loss of all cached form positions, statuses, key servers, et Create Date Erstellungsdatum + + + Subkey(s) + Unterschlüssel(e) + + + + Comment + Kommentar + Refreshing Key List... @@ -2669,66 +3383,66 @@ This will result in loss of all cached form positions, statuses, key servers, et - + Copy Kopieren - + copy fingerprint to clipboard Fingerabdruck in die Zwischenablage kopieren - + Exists Existiert - + Not Exists Existiert nicht - - + + Certificate Zertifikat - - + + Encrypt Verschlüsseln - - + + Sign Unterschreiben - - + + Auth Authentifizieren - + Never Expire Nie ablaufen - + No Data Keine Daten - + Warning: The primary key has expired. Warnung: Der Primärschlüssel ist abgelaufen. - + Warning: The primary key has been revoked. Warnung: Der Primärschlüssel wurde widerrufen. @@ -2777,7 +3491,7 @@ This will result in loss of all cached form positions, statuses, key servers, et - + Import A Paper Key Importieren eines Papierschlüssels @@ -2822,228 +3536,228 @@ This will result in loss of all cached form positions, statuses, key servers, et Zertifikat importieren widerrufen - - - - + + + + Export Key To File Schlüssel in Datei exportieren - - - - + + + + Key Files Schlüsseldateien - - - - + + + + Export Error Exportfehler - - - - + + + + Couldn't open %1 for writing %1 konnte nicht zum Schreiben geöffnet werden - + Exporting short private Key Exportieren eines kurzen privaten Schlüssels - - - + + + You are about to export your Sie sind dabei, Ihre . zu exportieren - - - + + + PRIVATE KEY PRIVATEN SCHLÜSSEL - - - + + + This is NOT your Public Key, so DON'T give it away. Dies ist NICHT Ihr öffentlicher Schlüssel, also geben Sie ihn NICHT weiter. - + Do you REALLY want to export your PRIVATE KEY in a Minimum Size? Möchten Sie WIRKLICH Ihren PRIVATEN SCHLÜSSEL in einer Mindestgröße exportieren? - + For OpenPGP keys it removes all signatures except for the latest self-signatures. Bei OpenPGP-Schlüsseln werden alle Signaturen mit Ausnahme der neuesten Eigensignaturen entfernt. - + Exporting private Key Exportieren des privaten Schlüssels - - + + Do you REALLY want to export your PRIVATE KEY? Möchten Sie WIRKLICH Ihren PRIVATEN SCHLÜSSEL exportieren? - - + + Revocation Certificates Widerrufszertifikate - + Generate revocation certificate Widerrufszertifikat erstellen - - + + Policy Auto Richtlinie Auto - - + + Policy Good Richtlinie gut - - + + Policy Bad Richtlinie schlecht - - + + Policy Ask Richtlinie fragen - - + + Policy Unknown Richtlinie unbekannt - + Modify TOFU Policy(Default is Auto) TOFU-Richtlinie ändern (Standard ist Auto) - + Policy for the Key Pair: Richtlinie für das Schlüsselpaar: - + Not Successful Nicht erfolgreich - + Modify TOFU policy not successfully. Ändern der TOFU-Richtlinie nicht erfolgreich. - - + + Import Key Revocation Certificate Schlüssel-Widerrufs-Zertifikat importieren - + You are about to import the Sie sind dabei, das - + REVOCATION CERTIFICATE Schlüssel-Widerrufs-Zertifikat importieren - + A successful import will result in the key being irreversibly revoked. Ein erfolgreicher Import führt dazu, dass der Schlüssel unwiderruflich widerrufen wird. - + Do you REALLY want to execute this operation? Wollen Sie diesen Vorgang WIRKLICH durchführen? - - - - - - - - + + + + + + + + Error Fehler - - - - + + + + Cannot open this file. Please make sure that this is a regular file and it's readable. Kann diese Datei nicht öffnen. Bitte stellen Sie sicher, dass es sich um eine reguläre, lesbare Datei handelt. - + The target file is too large for a key revocation certificate. Die Zieldatei ist zu groß für ein Schlüsselwiderrufszertifikat. - + Exporting private key as a Paper key Privaten Schlüssel als Papierschlüssel exportieren - + A PaperKey is a human-readable printout of your private key, which can be used to recover your key if you lose access to your digital copy. Ein PaperKey ist ein von Menschen lesbarer Ausdruck Ihres privaten Schlüssels, mit dem Sie Ihren Schlüssel wiederherstellen können, wenn Sie den Zugriff auf Ihre digitale Kopie verlieren. - + Keep it in a safe place. Bewahren Sie es an einem sicheren Ort auf. - + An error occurred trying to generate Paper Key. Beim Versuch, einen Papierschlüssel zu erzeugen, ist ein Fehler aufgetreten. - + An error occurred trying to recover the Paper Key back to the private key. Beim Versuch, den Papierschlüssel in den privaten Schlüssel zurückzuverwandeln, ist ein Fehler aufgetreten. - + Paper Key File Papier-Schlüsseldatei - + The target file is too large for a paper key keyring. Die Zieldatei ist zu groß für einen Papierschlüsselanhänger. @@ -3072,11 +3786,13 @@ This will result in loss of all cached form positions, statuses, key servers, et + Algorithm Algorithmus + Algorithm Detail Algorithmusdetails @@ -3127,12 +3843,11 @@ This will result in loss of all cached form positions, statuses, key servers, et Unterschlüssel-ID - Algo - Algo + Algo - + Create Date Erstellung @@ -3142,57 +3857,57 @@ This will result in loss of all cached form positions, statuses, key servers, et Ablaufdatum - + Never Expire Nie ablaufen - + Never Expires Läuft nie ab - + Certificate Zertifikat - + Encrypt Verschlüsseln - + Sign Unterschreiben - + Auth Authentifizieren - + Exists Existiert - + Not Exists Existiert nicht - + Yes Ja - + No Nein - + Edit Expire Date Ablaufdatum bearbeiten @@ -3457,102 +4172,103 @@ This will result in loss of all cached form positions, statuses, key servers, et Importieren von Schlüsseln vom Schlüsselserver - + UID UID - + Creation date Erstellungsdatum - + KeyID SchlüsselID - + Tag Kennzeichen - + Text is empty. Text ist leer. - + Not Key Found Schlüssel nicht gefunden - + Timeout Zeitablauf - + Key Server Not Found Schlüsselserver nicht gefunden - + + Connection Error Verbindungsfehler - + Too many responses from keyserver! Zu viele Antworten vom Schlüsselserver! - + No keys found, input may be kexId, retrying search with 0x. Keine Schlüssel gefunden, Eingabe kann kexId sein, versuche es mit 0x erneut. - + No keys found containing the search string! Keine Schlüssel gefunden, die den Suchbegriff enthalten! - + Insufficiently specific search string! Unzureichend spezifischer Suchbegriff! - + revoked widerrufen - + disabled deaktiviert - + %1 keys found. Double click a key to import it. %1 Schlüssel gefunden. Doppelklicken Sie auf einen Schlüssel, um ihn zu importieren. - + Warning Warnung - + Please select one KeyPair before doing this operation. Bitte wählen Sie ein Schlüsselpaar aus, bevor Sie diesen Vorgang ausführen. - + Key Imported Schlüssel importiert - + Processing ... Verarbeite ... @@ -3560,27 +4276,27 @@ This will result in loss of all cached form positions, statuses, key servers, et GpgFrontend::UI::KeyServerImportTask - + Key not found in the Keyserver. Schlüssel auf dem Schlüsselserver nicht gefunden. - + Network connection timeout. Netzwerkverbindungs-Timeout - + Cannot resolve the address of target key server. Kann die Adresse des gewählten Schlüsselservers nicht auflösen. - + General connection error occurred. Allgemeiner Verbindungsfehler ist aufgetreten. - + Success Erfolg @@ -3697,37 +4413,37 @@ This will result in loss of all cached form positions, statuses, key servers, et Unbekannter Fehler ist aufgetreten - + Key Not Found Schlüssel nicht gefunden - + Timeout Zeitablauf - + Key Server Not Found Schlüsselserver nicht gefunden - + Connection Error Verbindungsfehler - + Upload Failed Hochladen fehlgeschlagen - + Upload Success Erfolgreich hochgeladen - + Upload Public Key Successfully Öffentlichen Schlüssel erfolgreich hochgeladen @@ -3816,47 +4532,47 @@ This will result in loss of all cached form positions, statuses, key servers, et Sie könnten HTTP oder HTTPS für die Verbindung zum Schlüsselserver nutzen, was nicht unbedingt falsch ist. Aber es ist aus Sicherheitsgründen nicht empfohlen. Bitte prüfen Sie die eingegebene Adresse noch einmal, um sicher zu sein, dass sie korrekt ist. Sind Sie sicher, dass Sie sie zur Liste der Schlüsselserver hinzufügen möchten? - + true wahr - + false falsch - + unknown unbekannt - + Set TCP Timeout TCP-Zeitüberschreitung einstellen - + timeout(ms): Timeout (ms): - + Reachable Erreichbar - + Not Reachable Nicht erreichbar - + Test Key Server Connection... Schlüsselserververbindung testen… - + This test only tests the network connectivity of the key server. Passing the test does not mean that the key server is functionally available. Dieser Test testet nur die Netzwerkkonnektivität des Schlüsselservers. Das Bestehen des Tests bedeutet nicht, dass der Schlüsselserver funktionsfähig ist. @@ -4233,33 +4949,33 @@ Fals Daten und Signatur in einer Datei COMBINIERT sind, LASSEN SIE DIES LEER: Kann diese Datei nicht öffen. DIe Datei ist ZU GROSS (>1MB) für den GpgFrontend Texteditor. - + GpgFrontend Upgradeable (New Version: %1). GpgFrontend kann aktualisiert werden (neue Version: %1). - - + + Update Aktualisieren - + Withdrawn Version Zurückgezogene Version - + This version(%1) may have been withdrawn by the developer due to serious problems. Please stop using this version immediately and use the latest stable version. Diese Version (%1) wurde möglicherweise vom Entwickler aufgrund schwerwiegender Probleme zurückgezogen. Bitte beenden Sie die Verwendung dieser Version sofort und verwenden Sie die neueste stabile Version. - + You can download the latest stable version(%1) on Github Releases Page.<br/> Sie können die neueste stabile Version (%1) auf der Github-Release-Seite herunterladen.<br/> - + This maybe a BETA Version (Latest Stable Version: %1). Dies ist möglicherweise eine BETA-Version (Neueste stabile Version: %1). @@ -4449,486 +5165,486 @@ Fals Daten und Signatur in einer Datei COMBINIERT sind, LASSEN SIE DIES LEER: Einstellungen - + Open settings dialog Einstellungsdialog öffnen - + Encrypt Verschlüsseln - + Encrypt Message Nachricht verschlüsseln - + Encrypt Sign Verschlüsseln Signieren - + Encrypt and Sign Message Nachricht verschlüsseln und signieren - + Decrypt Entschlüsseln - + Decrypt Message Nachricht entschlüsseln - + Decrypt Verify Entschlüsseln Verifizieren - + Decrypt and Verify Message Nachricht entschlüsseln und überprüfen - + Sign Unterschreiben - + Sign Message Nachricht unterschreiben - + Verify Verifizieren - + Verify Message Nachricht verifizieren - - - + + + File Datei - + Import New Key From File Neuen Schlüssel aus Datei importieren - + Clipboard Zwischenablage - + Import New Key From Clipboard Neuen Schlüssel aus der Zwischenablage importieren - + Keyserver Schlüsselserver - + Import New Key From Keyserver Neuen Schlüssel vom Schlüsselserver importieren - + Editor Editor - + Import New Key From Editor Neuen Schlüssel aus dem Editor importieren - + Manage Keys Schlüssel verwalten - + Open Key Management Schlüsselverwaltung öffnen - + Clear Password Cache Passwort-Cache löschen - + Clear Password Cache of GnuPG Passwort-Cache von GnuPG löschen - - - + + + Successful Operation Erfolgreiche Durchführung - + Clear password cache successfully Kennwort-Cache erfolgreich gelöscht - - - + + + Failed Operation Fehlgeschlagener Vorgang - + Failed to clear password cache of GnuPG Passwort-Cache von GnuPG konnte nicht geleert werden - + Reload All Components Alle Komponenten neu laden - + Reload All GnuPG's Components Alle Komponenten von GnuPG neu laden - + Reload all the GnuPG's components successfully Alle GnuPG-Komponenten erfolgreich neu geladen - + Failed to reload all or one of the GnuPG's component(s) Fehler beim Neuladen aller oder einer Komponente(n) von GnuPG - + Restart All Components Alle Komponenten neu starten - + Restart All GnuPG's Components Alle Komponenten von GnuPG neu starten - + Restart all the GnuPG's components successfully Alle Komponenten von GnuPG erfolgreich neu gestartet - + Failed to restart all or one of the GnuPG's component(s) Neustart aller oder einer GnuPG-Komponente(n) fehlgeschlagen - + Open GnuPG Controller GnuPG-Controller öffnen - + Open GnuPG Controller Dialog GnuPG-Controller-Dialog öffnen - + Open Module Controller Modul-Controller öffnen - + Open Module Controller Dialog Modul-Controller-Dialog öffnen - + About Über - + Show the application's About box Info-Box der Anwendung anzeigen - - + + GnuPG GnuPG - + Information about Gnupg Informationen über Gnupg - + Translate Übersetzen - + Information about translation Informationen zur Übersetzung - + Translators Übersetzer - + Check for Updates Auf Updates prüfen - + Check for updates Auf Updates prüfen - + Open Wizard Assistenten öffnen - + Open the wizard Öffne den Assistenten - + Append Public Key to Editor Öffentlichen Schlüssel an den Editor anhängen - + Append selected Keypair's Public Key to Editor Den öffentlichen Schlüssel des ausgewählten Schlüsselpaars an den Editor anhängen - + Append Create DateTime to Editor Erstellungsdatum an den Editor anfügen - + Append selected Key's creation date and time to Editor Erstellungsdatum und -zeit des ausgewählten Schlüssels an den Editor anhängen - + Append Expire DateTime to Editor Ablaufdatum an den Editor anhängen - + Append selected Key's expiration date and time to Editor Ablaufdatum und -uhrzeit des ausgewählten Schlüssels an den Editor anhängen - + Append Fingerprint to Editor Fingerabdruck an Editor anhängen - + Append selected Key's Fingerprint to Editor Fingerabdruck des ausgewählten Schlüssels an den Editor anhängen - + Copy Email E-Mail kopieren - + Copy selected Keypair's to clipboard Ausgewählte Schlüsselpaare in die Zwischenablage kopieren - + Copy Default UID Standard-UID kopieren - + Copy selected Keypair's default UID to clipboard Standard-UID des ausgewählten Schlüsselpaars in die Zwischenablage kopieren - + Copy Key ID Schlüssel-ID kopieren - + Copy selected Keypair's ID to clipboard ID des ausgewählten Schlüsselpaars in die Zwischenablage kopieren - + Show Key Details Schlüsseldetails anzeigen - + Show Details for this Key Details zu diesem Schlüssel anzeigen - + Add To Favourite Zu Favoriten hinzufügen - + Add this key to Favourite Table Diesen Schlüssel zur Favoritentabelle hinzufügen - + Remove From Favourite Aus Favoriten entfernen - + Remove this key from Favourite Table Diesen Schlüssel aus der Favoritentabelle entfernen - + Set Owner Trust Level Vertrauensstufe des Eigentümers festlegen - + Remove PGP Header PGP-Header entfernen - + Add PGP Header PGP-Header hinzufügen - - + + Edit Bearbeiten - + Crypt Verschlüsselung - + Keys Schlüssel - + Import Key Schlüssel importieren - + Advance Vorgezogene Funktion - + Steganography Steganographie - + View Ansicht - + Help Hilfe - + Operations Aktivieren - + Key Schlüssel - + Special Edit Sonderbearbeitung - + Import key from... Schlüssel importieren von... - + Import key Schlüssel importieren - + Ready Bereit - + Key ToolBox Schlüssel-Toolbox - + Default Standard - + Favourite Favorit - + Only Public Key Nur öffentlicher Schlüssel - + Has Private Key Hat privaten Schlüssel - + Information Board Informationstafel @@ -5385,12 +6101,12 @@ Fals Daten und Signatur in einer Datei COMBINIERT sind, LASSEN SIE DIES LEER: Netzwerk - + Settings Einstellungen - + Preference Einstellung @@ -5904,19 +6620,848 @@ Fals Daten und Signatur in einer Datei COMBINIERT sind, LASSEN SIE DIES LEER: Niemals - - Marginal - Geringfügig + + Marginal + Geringfügig + + + + Full + Voll + + + + Ultimate + Ultimativ + + + + InfoBoard + + + + + + + + + Form + + + + + + + + + + + + + + + + + + Copy + Kopieren + + + + + + + + + + + + + + + + + Save + + + + + + + + + + + + + + + + + + Clear + + + + + KeyDeatilsDialog + + + Dialog + + + + + Tab 1 + + + + + Tab 2 + + + + + KeyList + + + + + + + + + Form + + + + + + + + + + + + + + + + + + Refresh + Aktualisierung + + + + + + + + + + + + + + + + + Sync Public Key + Öffentlichen Schlüssel synchronisieren + + + + + + + + + + + + + + + + + Check ALL + ALLE überprüfen + + + + + + + + + + + + + + + + + Uncheck ALL + Alle abwählen + + + + + + + + + + ... + + + + + + + + + + + Tab 1 + + + + + + + + + + + Tab 2 + + + + + KeyServerImportDialog + + + Dialog + + + + + Search String + Suchbegriff + + + + Search + Suchen + + + + ICON + + + + + Message + + + + + KeyServerSettings + + + + + + + + + Form + + + + + + + + + + + Keyserver List + Keyserver-Liste + + + + + + + + + + URL: + + + + + + + + + + + Add + Hinzufügen + + + + + + + + + + default + + + + + + + + + + + Keyserver Address + Keyserver-Adresse + + + + + + + + + + Security + Sicherheit + + + + + + + + + + Avaliable + + + + + + + + + + + Tips: Please Double-click table item to edit it. + Tipps: Bitte doppelklicken Sie auf das Tabellenelement, um es zu bearbeiten. + + + + + + + + + + Operations + Aktivieren + + + + + + + + + + Test Listed Key Server + + + + + + + + + + + Delete Selected Key Server + Ausgewählten Schlüsselserver löschen + + + + + + + + + + Set As Default + Als Standard einstellen + + + + ModifiedExpirationDateTime + + + + + + + + + Modified Expiration Date + Geändertes Ablaufdatum + + + + + + + + + + Modified Expiration Date (Local Time) + Geändertes Ablaufdatum (Ortszeit) + + + + + + + + + + No Expiration + Nicht ablaufend + + + + + + + + + + Tips: For the sake of security, the key is valid for up to two years. If you are + an expert user, please unlock it for a longer time in the settings. + + + + + + ModuleControllerDialog + + + + + + + + + Module Controller + Modul-Controller + + + + + + + + + + Registered Modules + Registrierte Module + + + + + + + + + + Show Mods Directory + Mods-Verzeichnis anzeigen + + + + + + + + + + Module Informations + Informationen zum Modul + + + + + + + + + + Actions + Aktionen + + + + + + + + + + Activate + Aktivieren + + + + + + + + + + Auto Activate + Automatisch aktivieren + + + + + + + + + + Tips: Module name front with "*" stands for integrated module. + Hinweise: Modulname mit "*" steht für integriertes Modul. + + + + + + + + + + Global Register Table + Globale Registertabelle + + + + + + + + + + Debugger + Debugger + + + + + + + + + + Trigger Event + + + + + + + + + + + Upsert GRT Value + + + + + NetworkSettings + + + + + + + + + Form + + + + + + + + + + + Proxy + Proxy + + + + + + + + + + Enable Proxy + Proxy aktivieren + + + + + + + + + + Proxy Type + Proxy-Typ + + + + + + + + + + + + + + + + + System Default + Systemstandard + + + + + + + + + + HTTP + + + + + + + + + + + Socks5 + + + + + + + + + + + Host Address + Adresse des Hosts + + + + + + + + + + Port + Port + + + + + + + + + + Username + Benutzername + + + + + + + + + + Password + Passwort + + + + + + + + + + Operations + Aktivieren + + + + + + + + + + Check Proxy Connection + + + + + + + + + + + Network Ability + Netzwerkfähigkeit + + + + + + + + + + Tips: These Option Changes take effect only after the application restart. + Tipps: Diese Optionsänderungen werden erst nach dem Neustart der Anwendung wirksam. + + + + + + + + + + Forbid all GnuPG network connection. + Alle GnuPG-Netzwerkverbindungen verbieten. + + + + + + + + + + Prohibit checking for version updates when the program starts. + Die Suche nach Versionsaktualisierungen beim Start des Programms deaktivieren. + + + + + + + + + + Automatically import a missing key for signature verification. + Automatisch fehlenden Schlüssel zur Signaturprüfung importieren. - - - Full - Voll + + + PlainTextEditor + + + + + + + + + Form + + + + + + + + + + + Loading... + Wird geladen... - - Ultimate - Ultimativ + + + + + + + + Character + + + + + + + + + + + LF + + + + + + + + + + + UTF-8 + UTF-8 @@ -5942,17 +7487,17 @@ Fals Daten und Signatur in einer Datei COMBINIERT sind, LASSEN SIE DIES LEER: Sourcecode Version: - + GpgME initiation failed GpgME-Initiation fehlgeschlagen - + GpgME Context initiation failed GpgME-Kontext-Initiation fehlgeschlagen - + Gpg Key Database initiation failed Initiierung der Gpg-Schlüsseldatenbank fehlgeschlagen @@ -6136,4 +7681,523 @@ Fals Daten und Signatur in einer Datei COMBINIERT sind, LASSEN SIE DIES LEER: Es gibt lokal keinen öffentlichen Zielschlüsselinhalt für GpgFrontend, um genügend Informationen über diese Signatur zu sammeln. Möchten Sie jetzt den öffentlichen Schlüssel vom Keyserver importieren? + + RaisePinentry + + + Repeat Passphrase: + Passphrase wiederholen: + + + + Show passphrase + Passwortphrase anzeigen + + + + Hide passphrase + Passwortphrase verbergen + + + + Given Passphrase was wrong. Please retry. + Die angegebene Passphrase war falsch. Bitte versuchen Sie es erneut. + + + + Passphrase: + Passphrase: + + + + Passphrases do not match + Passwortphrasen stimmen nicht überein + + + + Caps Lock is on + Feststelltaste ist eingeschaltet + + + + Bundled Pinentry + Eingabe Passphrase + + + + Confirm + Bestätigen + + + + Cancel + Abbrechen + + + + ReceiveMailDialog + + + Receive Mail + + + + + Refresh + Aktualisierung + + + + Name + Name + + + + TextLabel + + + + + SendMailDialog + + + New Message + + + + + Sender + + + + + + CC + + + + + + BCC + + + + + Recipient(s) + Empfänger + + + + Edit Recipients(s) + + + + + Mail Subject + + + + + GPG Operations + + + + + Select Sender GPG Key + + + + + Select Recipient(s) GPG Key + + + + + Edit CC(s) + + + + + Edit BCC(s) + + + + + Tips: You can fill in multiple email addresses, please separate them with ";". + + + + + Sender GPG Key: + + + + + Recipient(s) GPG Key: + + + + + Encrypt content + + + + + Attach signature + + + + + Attach sender's public key + + + + + Send Mail + + + + + SendMailSettings + + + Form + + + + + General + Allgemein + + + + Enable Send Mail Ability + + + + + SMTP Server Address + + + + + SMTP Server Port + + + + + SMTP Connection Security + + + + + + None + + + + + SSL + + + + + TLS + + + + + STARTTLS + + + + + Identity + + + + + Need Auth + + + + + Username + Benutzername + + + + Password + Passwort + + + + Preference + Einstellung + + + + Default Sender Email + + + + + Default Sender GPG Key ID + + + + + Tips: It is recommended that you build your own mail server or use a trusted mail server. If you don't know the detailed configuration information, you can get it from the mail service provider. + + + + + Operations + Aktivieren + + + + Check Connection + + + + + Send Test Email + + + + + UpdateTab + + + It is recommended that you always check the version of GpgFrontend and upgrade to the latest version. + Es wird empfohlen, immer die Version von GpgFrontend zu überprüfen und auf die neueste Version zu aktualisieren. + + + + New versions not only represent new features, but also often represent functional and security fixes. + Neue Versionen beinhalten nicht nur neue Funktionen, sondern stellen oft auch Funktions- und Sicherheitskorrekturen dar. + + + + Current Version + Aktuelle Version + + + + : + : + + + + Latest Version From Github + Neueste Version von Github + + + + The current version is less than the latest version on github. + Die aktuelle Versionsnunmmer ist kleiner als die neueste Version auf github. + + + + + + Please click + Bitte klicken Sie + + + + + + Here + Hier + + + + + + to download the latest stable version. + um die neueste stabile Version herunterzuladen. + + + + This version has serious problems and has been withdrawn. Please stop using it immediately. + Diese Version hat ernsthafte Probleme und wurde zurückgezogen. Bitte hören Sie sofort auf, sie zu verwenden. + + + + This version has not been released yet, it may be a beta version. If you are not a tester and care about version stability, please do not use this version. + Diese Version wurde noch nicht veröffentlicht, möglicherweise handelt es sich um eine Beta-Version. Wenn Sie kein Tester sind und Ihnen Stabilität der Version wichtig ist, verwenden Sie diese Version bitte nicht. + + + + VerifyDetailsDialog + + + Dialog + + + + + Verify Details + + + + + Date: + + + + + + TextLabel + + + + + Status: + + + + + Signer(s) List: + + + + + Tab 1 + + + + + Tab 2 + + + + + exportKeyPackageDialog + + + + + + + + + Export As Key Package + Als Schlüsselpaket exportieren + + + + + + + + + + Key Package Name + Name des Schlüsselpakets + + + + + + + + + + Generate Key Package Name + Namen für das Schlüsselpaket erstellen + + + + + + + + + + KeyPackage_0000 + + + + + + + + + + + Output Path + Ausgabepfad + + + + + + + + + + Select Output Path + Ausgabepfad auswählen + + + + + + + + + + Passphrase + Passphrase + + + + + + + + + + Generate and Save Passphrase + Passphrase erstellen und speichern + + + + + + + + + + Include secret key (Think twice before acting) + Geheimen Schlüssel einschließen (Denken Sie zweimal nach, bevor Sie handeln) + + + + + + + + + + Exclude keys that do not have a private key + Schlüssel ausschließen, die keinen privaten Schlüssel haben + + + + + + + + + + Tips: You can use Key Package to safely and conveniently transfer your public + and private keys between devices. + + + + diff --git a/resource/lfs/locale/ts/GpgFrontend.zh_CN.ts b/resource/lfs/locale/ts/GpgFrontend.zh_CN.ts index c5f18144..a5372de7 100644 --- a/resource/lfs/locale/ts/GpgFrontend.zh_CN.ts +++ b/resource/lfs/locale/ts/GpgFrontend.zh_CN.ts @@ -1,6 +1,710 @@ + + AppearanceSettings + + + + + + + + + Appearance Settings + + + + + + + + + + + General + 通用 + + + + + + + + + + Theme + 主题 + + + + + + + + + + Save window size and position on exit. + 退出时保存窗口大小和位置。 + + + + + + + + + + Font Size + 字体大小 + + + + + + + + + + Text Editor + 文本编辑器 + + + + + + + + + + Information Board + 信息面板 + + + + + + + + + + Toolbar Icon + 工具栏图标 + + + + + + + + + + Size + 大小 + + + + + + + + + + small + + + + + + + + + + + medium + + + + + + + + + + + large + + + + + + + + + + + Style + 样式 + + + + + + + + + + just text + 只显示文字 + + + + + + + + + + just icons + 只显示图标 + + + + + + + + + + text and icons + 文字和图标 + + + + EmailListEditorDialog + + + Email List Editor + + + + + Email List: + + + + + Add An Email Address + + + + + Tips: You can double-click the email address in the edit list, or click the email to pop up the option menu. + + + + + Delete Selected Email Address + + + + + FilePage + + + + + + + + + Form + + + + + + + + + + + ... + + + + + GTrC + + + GnuPG + GnuPG + + + + Update + 更新 + + + + GeneralSettings + + + + + + + + + Form + + + + + + + + + + + Cache + 缓存 + + + + + + + + + + Clear gpg password cache when closing GpgFrontend. + 关闭 GpgFrontend 时清除 gpg 密码缓存。 + + + + + + + + + + Automatically restore unsaved Text Editor pages after an application crash. + 应用程序崩溃后自动恢复未保存的文本编辑器页面。 + + + + + + + + + + Operation + 操作 + + + + + + + + + + Import files dropped on the Key List without confirmation. + 未经确认,导入放在密钥列表中的文件。 + + + + + + + + + + Enable to use longer key expiration date. + 启用以使用更长的密钥到期日期。 + + + + + + + + + Disable loading of all modules (including integrated modules) + 禁止加载所有的模组(包括被集成模组) + + + + + + + + + + Language + 语言 + + + + + + + + + + NOTE: GpgFrontend will restart automatically if you change the language! + + + + + + + + + + + Data + 数据 + + + + + + + + + + Reveal in File Explorer + 在文件资源管理器中显示 + + + + + + + + + + Clear All Log Files + + + + + + + + + + + Clear All Data Objects Files + + + + + Provide more options in the signing process. + + + + + GnuPGConfigManagerDialog + + + GnuPG Config Manager + + + + + TextLabel + + + + + PushButton + + + + + GnuPGControllerDialog + + + + + + + + + GnuPG Controller + GnuPG 控制器 + + + + + + + + + + General + 通用 + + + + + + + + + + Use Binary Mode for File Operations + 使用二进制模式进行文件操作 + + + + + + + + + + Use Pinentry as Password Input Dialog + 使用 Pinentry 作为密码输入对话框 + + + + + + + + + + Enable GpgME Debug Log + 启用 GpgME 调试日志 + + + + + + + + + + Restart Gpg Agent on start + 启动时重启 Gpg Agent + + + + + + + + + + Kill all gnupg daemon at close + 在关闭程序时杀死所有GnuPG的守护进程 + + + + + + + + + + Key Database + 密钥数据库 + + + + + + + + + + Use Custom GnuPG Key Database Path + 使用自定义 GnuPG 密钥数据库路径 + + + + + + + + + + Select Key Database Path + 选择密钥数据库路径 + + + + + + + + + + Advance + 高级 + + + + + + + + + + Use Custom GnuPG + 使用自定义 GnuPG + + + + + + + + + + Select GnuPG Path + 选择 GnuPG 路径 + + + + + + + + + + Tips: please select a directroy where "gpgconf" is located in. + 提示:请选择“gpgconf”所在目录。 + + + + + + + + + + Tips: notice that modify any of these settings will cause an Application restart. + 提示:请注意,修改任何这些设置都会导致应用程序重新启动。 + + + + GnuPGInfo + + + + GnuPG Info + + + + + + Version + 版本 + + + + + Components + 组件 + + + + + Directories + 目录 + + + + + Options + 参数 + + + + GnupgTab + + + Name + + + + + + Description + 描述 + + + + Version + 版本 + + + + Checksum + 校验和 + + + + Binary Path + 二进制路径 + + + + Components + 组件 + + + + Directories + 目录 + + + + Options + 参数 + + + + Directory Type + 目录类型 + + + + Path + 路径 + + + + Component + 组件 + + + + Group + + + + + Key + + + + + Default Value + 默认值 + + + + Value + + + GpgFrontend::GpgDecryptResultAnalyse @@ -354,15 +1058,15 @@ - - + + UTC 世界标准时间 - - + + Localized 本地化 @@ -453,42 +1157,42 @@ - + Fingerprint 指纹 - - + + <unknown> <未知> - - - - + + + + Sign Date 签署日期 + - Key ID 密钥编号 - + Subkey 子密钥 - + Primary Key 主密钥 - + Key Create Date 密钥创建时间 @@ -534,8 +1238,8 @@ - - + + Signed By 被...签名 @@ -544,14 +1248,14 @@ 未知 - - + + Public Key Algo 公钥算法 - - + + Hash Algo 哈希算法 @@ -1471,14 +2175,14 @@ This will result in loss of all cached form positions, statuses, key servers, et 打开目录 - + GnuPG Controller GnuPG 控制器 - - - + + + Illegal GnuPG Path 非法 GnuPG 路径 @@ -1487,22 +2191,22 @@ This will result in loss of all cached form positions, statuses, key servers, et 目标 GnuPG 路径为空。 - + Target GnuPG Path is not an exists readable directory. 目标 GnuPG 路径不是现有的可读目录。 - + Target GnuPG Path is not an absolute path. 目标 GnuPG 路径不是绝对路径。 - + Target GnuPG Path contains no "gpgconf" executable. 目标 GnuPG 路径不包含“gpgconf”可执行文件。 - + Illegal GnuPG Key Database Path 非法的 GnuPG 密钥数据库路径 @@ -1511,7 +2215,7 @@ This will result in loss of all cached form positions, statuses, key servers, et 目标 GnuPG 密钥数据库路径为空。 - + Target GnuPG Key Database Path is not an exists readable directory. 目标 GnuPG 密钥数据库路径不是现有的可读目录。 @@ -1764,7 +2468,7 @@ This will result in loss of all cached form positions, statuses, key servers, et 操作 - + Key Details 密钥详情 @@ -2114,6 +2818,16 @@ This will result in loss of all cached form positions, statuses, key servers, et Create Date 创建时间 + + + Subkey(s) + 子密钥 + + + + Comment + 注释 + Refreshing Key List... @@ -2661,66 +3375,66 @@ This will result in loss of all cached form positions, statuses, key servers, et - + Copy 复制 - + copy fingerprint to clipboard 将指纹复制到剪贴板 - + Exists 存在 - + Not Exists 不存在 - - + + Certificate 证书 - - + + Encrypt 加密 - - + + Sign 签名 - - + + Auth 认证 - + Never Expire 永不过期 - + No Data 没有数据 - + Warning: The primary key has expired. 警告:主密钥已过期。 - + Warning: The primary key has been revoked. 警告:主密钥已被撤销。 @@ -2769,7 +3483,7 @@ This will result in loss of all cached form positions, statuses, key servers, et - + Import A Paper Key 导入纸密钥 @@ -2814,228 +3528,228 @@ This will result in loss of all cached form positions, statuses, key servers, et 导入吊销证书 - - - - + + + + Export Key To File 将密钥导出到文件 - - - - + + + + Key Files 密钥文件 - - - - + + + + Export Error 导出错误 - - - - + + + + Couldn't open %1 for writing 无法打开 %1 进行写入 - + Exporting short private Key 导出短私钥 - - - + + + You are about to export your 您即将导出您的 - - - + + + PRIVATE KEY 私钥 - - - + + + This is NOT your Public Key, so DON'T give it away. 这不是你的公钥,所以不要把它给别人。 - + Do you REALLY want to export your PRIVATE KEY in a Minimum Size? 您真的想以最小尺寸导出您的私钥吗? - + For OpenPGP keys it removes all signatures except for the latest self-signatures. 对于 OpenPGP 密钥,它会删除除最新的自签名之外的所有签名。 - + Exporting private Key 导出私钥 - - + + Do you REALLY want to export your PRIVATE KEY? 你真的想导出你的私钥吗? - - + + Revocation Certificates 吊销证书 - + Generate revocation certificate 生成撤吊销证书 - - + + Policy Auto 策略:自动 - - + + Policy Good 策略:正常 - - + + Policy Bad 策略:异常 - - + + Policy Ask 策略:询问 - - + + Policy Unknown 策略:未知 - + Modify TOFU Policy(Default is Auto) 修改TOFU策略(默认为自动) - + Policy for the Key Pair: 密钥对策略: - + Not Successful 失败 - + Modify TOFU policy not successfully. 修改 TOFU 策略失败。 - - + + Import Key Revocation Certificate 导入密钥吊销证书 - + You are about to import the 您将导入 - + REVOCATION CERTIFICATE 吊销证书 - + A successful import will result in the key being irreversibly revoked. 导入成功后,密钥将被不可逆转地吊销。 - + Do you REALLY want to execute this operation? 您真的想执行这个操作吗? - - - - - - - - + + + + + + + + Error 错误 - - - - + + + + Cannot open this file. Please make sure that this is a regular file and it's readable. 无法打开此文件。请确保这是一个普通文件,并且有读取权限。 - + The target file is too large for a key revocation certificate. 目标文件对于一个密钥吊销证书来说太大了。 - + Exporting private key as a Paper key 将私钥导出为纸密钥 - + A PaperKey is a human-readable printout of your private key, which can be used to recover your key if you lose access to your digital copy. 纸密钥是私人密钥的人工可读打印件,如果丢失了密钥的数字版本,可以用它来恢复密钥。 - + Keep it in a safe place. 请妥善保管。 - + An error occurred trying to generate Paper Key. 尝试生成纸密钥时发生错误。 - + An error occurred trying to recover the Paper Key back to the private key. 用纸密钥恢复私钥时发生了错误。 - + Paper Key File 纸密钥文件 - + The target file is too large for a paper key keyring. 目标文件对于一个纸密钥文件来说太大了。 @@ -3064,11 +3778,13 @@ This will result in loss of all cached form positions, statuses, key servers, et + Algorithm 算法 + Algorithm Detail 算法细节 @@ -3119,12 +3835,11 @@ This will result in loss of all cached form positions, statuses, key servers, et 子密钥 ID - Algo - 算法 + 算法 - + Create Date 创建时间 @@ -3134,57 +3849,57 @@ This will result in loss of all cached form positions, statuses, key servers, et 到期日期 - + Never Expire 永不过期 - + Never Expires 永不过期 - + Certificate 证书 - + Encrypt 加密 - + Sign 签名 - + Auth 认证 - + Exists 存在 - + Not Exists 不存在 - + Yes - + No - + Edit Expire Date 编辑到期日期 @@ -3449,102 +4164,103 @@ This will result in loss of all cached form positions, statuses, key servers, et 从密钥服务器导入密钥 - + UID UID - + Creation date 创建日期 - + KeyID 密钥 ID - + Tag 标签 - + Text is empty. 文字为空。 - + Not Key Found 未找到密钥 - + Timeout 超时 - + Key Server Not Found 未找到密钥服务器 - + + Connection Error 连接错误 - + Too many responses from keyserver! 来自密钥服务器的响应太多! - + No keys found, input may be kexId, retrying search with 0x. 未找到密钥,输入可能是 kexId,正在使用 0x 重试。 - + No keys found containing the search string! 未找到包含搜索字符串的密钥! - + Insufficiently specific search string! 不够具体的搜索字符串! - + revoked 撤销 - + disabled 被禁用 - + %1 keys found. Double click a key to import it. 找到 %1 个密钥。双击一个密钥来导入它。 - + Warning 警告 - + Please select one KeyPair before doing this operation. 请在执行此操作前选择一个钥对。 - + Key Imported 密钥导入成功 - + Processing ... 处理中 ...... @@ -3552,27 +4268,27 @@ This will result in loss of all cached form positions, statuses, key servers, et GpgFrontend::UI::KeyServerImportTask - + Key not found in the Keyserver. 密钥服务器中找不到密钥。 - + Network connection timeout. 网络连接错误。 - + Cannot resolve the address of target key server. 网络连接超时。 - + General connection error occurred. 出现一般连接错误。 - + Success 成功 @@ -3689,37 +4405,37 @@ This will result in loss of all cached form positions, statuses, key servers, et 发生未知错误 - + Key Not Found 未找到密钥 - + Timeout 超时 - + Key Server Not Found 未找到密钥服务器 - + Connection Error 连接错误 - + Upload Failed 上传失败 - + Upload Success 上传成功 - + Upload Public Key Successfully 上传公钥成功 @@ -3808,47 +4524,47 @@ This will result in loss of all cached form positions, statuses, key servers, et 通常不会使用HTTPS或HTTP作为与密钥服务器通信的协议。当然,您可能需要这么做。但是,烦请您再次检查您输入的地址。您确定要将其添加到密钥服务器列表中吗? - + true - + false 错误的 - + unknown 未知 - + Set TCP Timeout 设置 TCP 超时 - + timeout(ms): 超时时间(毫秒): - + Reachable 正常 - + Not Reachable 离线 - + Test Key Server Connection... 测试密钥服务器连通性... - + This test only tests the network connectivity of the key server. Passing the test does not mean that the key server is functionally available. 本测试仅测试密钥服务器的网络连通性。通过测试并不意味着密钥服务器在功能上可用。 @@ -4221,33 +4937,33 @@ If Data And Signature is COMBINED within a single file, KEEP THIS EMPTY: 无法打开此文件。文件对于 GpgFrontend 文本编辑器来说过大(>1MB)。 - + GpgFrontend Upgradeable (New Version: %1). GpgFrontend 可升级(新版本:%1)。 - - + + Update 更新 - + Withdrawn Version 被召回的版本 - + This version(%1) may have been withdrawn by the developer due to serious problems. Please stop using this version immediately and use the latest stable version. 由于严重问题,此版本(%1) 可能已被开发人员召回。请立即停止使用此版本并使用最新的稳定版。 - + You can download the latest stable version(%1) on Github Releases Page.<br/> 您可以在 Github Releases Page 上下载最新的稳定版 (%1)。<br/> - + This maybe a BETA Version (Latest Stable Version: %1). 这可能是 BETA 版本(最新稳定版:%1)。 @@ -4437,486 +5153,486 @@ If Data And Signature is COMBINED within a single file, KEEP THIS EMPTY: 设置 - + Open settings dialog 打开设置对话框 - + Encrypt 加密 - + Encrypt Message 加密消息 - + Encrypt Sign 加密签名 - + Encrypt and Sign Message 加密和签名消息 - + Decrypt 解密 - + Decrypt Message 解密消息 - + Decrypt Verify 解密验证 - + Decrypt and Verify Message 解密和验证消息 - + Sign 签名 - + Sign Message 签名留言 - + Verify 验证 - + Verify Message 验证消息 - - - + + + File 文件 - + Import New Key From File 从文件导入新密钥 - + Clipboard 剪贴板 - + Import New Key From Clipboard 从剪贴板导入新密钥 - + Keyserver 密钥服务器 - + Import New Key From Keyserver 从密钥服务器导入新密钥 - + Editor 编辑 - + Import New Key From Editor 从编辑器导入新密钥 - + Manage Keys 管理密钥 - + Open Key Management 打开密钥管理器 - + Clear Password Cache 清除密码缓存 - + Clear Password Cache of GnuPG 清除 GnuPG 的密码缓存 - - - + + + Successful Operation 操作成功 - + Clear password cache successfully 清除密码缓存成功 - - - + + + Failed Operation 操作失败 - + Failed to clear password cache of GnuPG 无法清除 GnuPG 的密码缓存 - + Reload All Components 重新加载所有组件 - + Reload All GnuPG's Components 重新加载所有 GnuPG 的组件 - + Reload all the GnuPG's components successfully 成功重新加载所有 GnuPG 组件 - + Failed to reload all or one of the GnuPG's component(s) 未能重新加载所有或其中一个 GnuPG 组件 - + Restart All Components 重新启动所有组件 - + Restart All GnuPG's Components 重新启动所有 GnuPG 的组件 - + Restart all the GnuPG's components successfully 成功重启所有 GnuPG 组件 - + Failed to restart all or one of the GnuPG's component(s) 无法重新启动所有或其中一个 GnuPG 组件 - + Open GnuPG Controller 打开 GnuPG 控制器 - + Open GnuPG Controller Dialog 打开 GnuPG 控制器对话框 - + Open Module Controller 打开模组管理器 - + Open Module Controller Dialog 打开模组管理器窗口 - + About 关于 - + Show the application's About box 显示应用程序的关于界面 - - + + GnuPG GnuPG - + Information about Gnupg 关于 Gnupg - + Translate 翻译 - + Information about translation 翻译信息 - + Translators 翻译贡献者 - + Check for Updates 检查更新 - + Check for updates 检查更新 - + Open Wizard 打开向导 - + Open the wizard 打开向导 - + Append Public Key to Editor 将公钥附加到编辑器 - + Append selected Keypair's Public Key to Editor 将选定的密钥对的公钥附加到编辑器 - + Append Create DateTime to Editor 将创建日期时间附加到编辑器 - + Append selected Key's creation date and time to Editor 将所选密钥的创建日期和时间附加到编辑器 - + Append Expire DateTime to Editor 将过期日期时间附加到编辑器 - + Append selected Key's expiration date and time to Editor 将所选密钥的到期日期和时间附加到编辑器 - + Append Fingerprint to Editor 将指纹附加到编辑器 - + Append selected Key's Fingerprint to Editor 将所选密钥的指纹附加到编辑器 - + Copy Email 复制电子邮件 - + Copy selected Keypair's to clipboard 将选定的密钥对复制到剪贴板 - + Copy Default UID 复制默认 UID - + Copy selected Keypair's default UID to clipboard 将所选密钥对的默认 UID 复制到剪贴板 - + Copy Key ID 复制密钥 ID - + Copy selected Keypair's ID to clipboard 将所选密钥对的 ID 复制到剪贴板 - + Show Key Details 显示密钥细节 - + Show Details for this Key 显示此密钥的详细信息 - + Add To Favourite 添加到收藏夹 - + Add this key to Favourite Table 将此键添加到收藏夹表 - + Remove From Favourite 从收藏夹中删除 - + Remove this key from Favourite Table 从收藏表中删除此键 - + Set Owner Trust Level 设置所有者信任级别 - + Remove PGP Header 删除 PGP 标头 - + Add PGP Header 添加 PGP 标头 - - + + Edit 编辑 - + Crypt 加密 - + Keys 密钥 - + Import Key 导入密钥 - + Advance 高级 - + Steganography 隐写术 - + View 查看 - + Help 帮助 - + Operations 操作 - + Key 密钥 - + Special Edit 特殊编辑操作 - + Import key from... 从···导入密钥 - + Import key 导入密钥 - + Ready 准备好 - + Key ToolBox 密钥工具箱 - + Default 默认 - + Favourite 最喜欢的 - + Only Public Key 只有公钥 - + Has Private Key 有私钥 - + Information Board 信息面板 @@ -5373,12 +6089,12 @@ If Data And Signature is COMBINED within a single file, KEEP THIS EMPTY: 网络 - + Settings 设置 - + Preference 偏好 @@ -5892,19 +6608,848 @@ If Data And Signature is COMBINED within a single file, KEEP THIS EMPTY: 绝不 - - Marginal - 边缘 + + Marginal + 边缘 + + + + Full + 完全 + + + + Ultimate + 终极 + + + + InfoBoard + + + + + + + + + Form + + + + + + + + + + + + + + + + + + Copy + 复制 + + + + + + + + + + + + + + + + + Save + + + + + + + + + + + + + + + + + + Clear + + + + + KeyDeatilsDialog + + + Dialog + + + + + Tab 1 + + + + + Tab 2 + + + + + KeyList + + + + + + + + + Form + + + + + + + + + + + + + + + + + + Refresh + 刷新 + + + + + + + + + + + + + + + + + Sync Public Key + 同步公钥 + + + + + + + + + + + + + + + + + Check ALL + 全选 + + + + + + + + + + + + + + + + + Uncheck ALL + 全不选 + + + + + + + + + + ... + + + + + + + + + + + Tab 1 + + + + + + + + + + + Tab 2 + + + + + KeyServerImportDialog + + + Dialog + + + + + Search String + 搜索字符串 + + + + Search + 搜索 + + + + ICON + + + + + Message + + + + + KeyServerSettings + + + + + + + + + Form + + + + + + + + + + + Keyserver List + 密钥服务器列表 + + + + + + + + + + URL: + + + + + + + + + + + Add + 添加 + + + + + + + + + + default + + + + + + + + + + + Keyserver Address + 密钥服务器地址 + + + + + + + + + + Security + 安全 + + + + + + + + + + Avaliable + + + + + + + + + + + Tips: Please Double-click table item to edit it. + 提示:请双击表格项进行编辑。 + + + + + + + + + + Operations + 操作 + + + + + + + + + + Test Listed Key Server + + + + + + + + + + + Delete Selected Key Server + 删除选定的密钥服务器 + + + + + + + + + + Set As Default + 设为默认 + + + + ModifiedExpirationDateTime + + + + + + + + + Modified Expiration Date + 修改到期日 + + + + + + + + + + Modified Expiration Date (Local Time) + 修改到期日期(本地时间) + + + + + + + + + + No Expiration + 无有效期 + + + + + + + + + + Tips: For the sake of security, the key is valid for up to two years. If you are + an expert user, please unlock it for a longer time in the settings. + + + + + + ModuleControllerDialog + + + + + + + + + Module Controller + 模组管理器 + + + + + + + + + + Registered Modules + 已载入模组 + + + + + + + + + + Show Mods Directory + 显示模组文件夹 + + + + + + + + + + Module Informations + 模组信息 + + + + + + + + + + Actions + 操作 + + + + + + + + + + Activate + 启用 + + + + + + + + + + Auto Activate + 自动启用 + + + + + + + + + + Tips: Module name front with "*" stands for integrated module. + 提示:模块名称前面带“*”表示集成模块。 + + + + + + + + + + Global Register Table + 全局注册表 + + + + + + + + + + Debugger + 调试器 + + + + + + + + + + Trigger Event + + + + + + + + + + + Upsert GRT Value + + + + + NetworkSettings + + + + + + + + + Form + + + + + + + + + + + Proxy + 代理 + + + + + + + + + + Enable Proxy + 启用代理 + + + + + + + + + + Proxy Type + 代理类型 + + + + + + + + + + + + + + + + + System Default + 系统默认 + + + + + + + + + + HTTP + + + + + + + + + + + Socks5 + + + + + + + + + + + Host Address + 地址 + + + + + + + + + + Port + 端口 + + + + + + + + + + Username + 用户名 + + + + + + + + + + Password + 密码 + + + + + + + + + + Operations + 操作 + + + + + + + + + + Check Proxy Connection + + + + + + + + + + + Network Ability + 网络能力 + + + + + + + + + + Tips: These Option Changes take effect only after the application restart. + 提示:这些选项更改仅在应用程序重新启动后生效。 + + + + + + + + + + Forbid all GnuPG network connection. + 禁止所有 GnuPG 网络连接。 + + + + + + + + + + Prohibit checking for version updates when the program starts. + 禁止在程序启动时检查版本更新。 - - Full - 完全 + + + + + + + + Automatically import a missing key for signature verification. + 自动导入丢失的密钥以进行签名验证。 + + + + PlainTextEditor + + + + + + + + + Form + + + + + + + + + + + Loading... + 正在加载... - - Ultimate - 终极 + + + + + + + + Character + + + + + + + + + + + LF + + + + + + + + + + + UTF-8 + UTF-8 @@ -6008,17 +7553,17 @@ If Data And Signature is COMBINED within a single file, KEEP THIS EMPTY: 成功 - + GpgME initiation failed GpgME初始化失败 - + GpgME Context initiation failed GpgME上下文初始化失败 - + Gpg Key Database initiation failed Gpg密钥数据库初始化失败 @@ -6084,4 +7629,523 @@ If Data And Signature is COMBINED within a single file, KEEP THIS EMPTY: 本地没有目标公钥内容供 GpgFrontend 收集有关此签名的足够信息。现在要从密钥服务器导入公钥吗? + + RaisePinentry + + + Repeat Passphrase: + 重新输入密码: + + + + Show passphrase + 显示密码 + + + + Hide passphrase + 隐藏密码 + + + + Given Passphrase was wrong. Please retry. + 密码错误。请重试。 + + + + Passphrase: + 密码: + + + + Passphrases do not match + 密码不匹配 + + + + Caps Lock is on + 大写锁定已开启 + + + + Bundled Pinentry + 集成Pinentry + + + + Confirm + 确认 + + + + Cancel + 取消 + + + + ReceiveMailDialog + + + Receive Mail + + + + + Refresh + 刷新 + + + + Name + + + + + TextLabel + + + + + SendMailDialog + + + New Message + + + + + Sender + + + + + + CC + + + + + + BCC + + + + + Recipient(s) + 接收者列表 + + + + Edit Recipients(s) + + + + + Mail Subject + + + + + GPG Operations + + + + + Select Sender GPG Key + + + + + Select Recipient(s) GPG Key + + + + + Edit CC(s) + + + + + Edit BCC(s) + + + + + Tips: You can fill in multiple email addresses, please separate them with ";". + + + + + Sender GPG Key: + + + + + Recipient(s) GPG Key: + + + + + Encrypt content + + + + + Attach signature + + + + + Attach sender's public key + + + + + Send Mail + + + + + SendMailSettings + + + Form + + + + + General + 通用 + + + + Enable Send Mail Ability + + + + + SMTP Server Address + + + + + SMTP Server Port + + + + + SMTP Connection Security + + + + + + None + + + + + SSL + + + + + TLS + + + + + STARTTLS + + + + + Identity + + + + + Need Auth + + + + + Username + 用户名 + + + + Password + 密码 + + + + Preference + 偏好 + + + + Default Sender Email + + + + + Default Sender GPG Key ID + + + + + Tips: It is recommended that you build your own mail server or use a trusted mail server. If you don't know the detailed configuration information, you can get it from the mail service provider. + + + + + Operations + 操作 + + + + Check Connection + + + + + Send Test Email + + + + + UpdateTab + + + It is recommended that you always check the version of GpgFrontend and upgrade to the latest version. + 建议您经常检查 GpgFrontend 的版本更新。 + + + + New versions not only represent new features, but also often represent functional and security fixes. + 新版本不仅代表新功能,而且通常代表功能和安全修复。 + + + + Current Version + 当前版本 + + + + : + + + + + Latest Version From Github + 来自 Github 的最新版本 + + + + The current version is less than the latest version on github. + 当前版本低于github上的最新版本。 + + + + + + Please click + 请点击 + + + + + + Here + 这里 + + + + + + to download the latest stable version. + 来下载最新的稳定版本。 + + + + This version has serious problems and has been withdrawn. Please stop using it immediately. + 此版本存在严重问题,已经被召回。请立即停止使用。 + + + + This version has not been released yet, it may be a beta version. If you are not a tester and care about version stability, please do not use this version. + 此版本尚未发布,可能是测试版。如果您不是测试人员并且关心版本稳定性,请不要使用此版本。 + + + + VerifyDetailsDialog + + + Dialog + + + + + Verify Details + + + + + Date: + + + + + + TextLabel + + + + + Status: + + + + + Signer(s) List: + + + + + Tab 1 + + + + + Tab 2 + + + + + exportKeyPackageDialog + + + + + + + + + Export As Key Package + 导出为密钥包 + + + + + + + + + + Key Package Name + 密钥包名称 + + + + + + + + + + Generate Key Package Name + 生成密钥包名 + + + + + + + + + + KeyPackage_0000 + + + + + + + + + + + Output Path + 输出路径 + + + + + + + + + + Select Output Path + 选择输出路径 + + + + + + + + + + Passphrase + 密钥文件 + + + + + + + + + + Generate and Save Passphrase + 生成并保存密码 + + + + + + + + + + Include secret key (Think twice before acting) + 一并导出私钥(勾选前请三思) + + + + + + + + + + Exclude keys that do not have a private key + 只导出有私钥的钥对 + + + + + + + + + + Tips: You can use Key Package to safely and conveniently transfer your public + and private keys between devices. + + + + diff --git a/src/ui/widgets/KeyList.cpp b/src/ui/widgets/KeyList.cpp index c4a05edc..a9363e19 100644 --- a/src/ui/widgets/KeyList.cpp +++ b/src/ui/widgets/KeyList.cpp @@ -117,7 +117,7 @@ void KeyList::init() { : global_column_filter_ & ~GpgKeyTableColumn::kCREATE_DATE); }); - subkeys_number_column_action_ = new QAction("Subkey(s)", this); + subkeys_number_column_action_ = new QAction(tr("Subkey(s)"), this); subkeys_number_column_action_->setCheckable(true); subkeys_number_column_action_->setChecked( (global_column_filter_ & GpgKeyTableColumn::kSUBKEYS_NUMBER) != @@ -131,7 +131,7 @@ void KeyList::init() { : global_column_filter_ & ~GpgKeyTableColumn::kSUBKEYS_NUMBER); }); - comment_column_action_ = new QAction("Comment", this); + comment_column_action_ = new QAction(tr("Comment"), this); comment_column_action_->setCheckable(true); comment_column_action_->setChecked( (global_column_filter_ & GpgKeyTableColumn::kCOMMENT) != From 52be475e9676bbd9dbf2419d31426f8000afbe11 Mon Sep 17 00:00:00 2001 From: saturneric Date: Mon, 5 Aug 2024 18:52:47 +0200 Subject: [PATCH 8/8] fix: unchecking some check boxes at gnupg controller will not restart --- src/ui/dialog/controller/GnuPGControllerDialog.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/ui/dialog/controller/GnuPGControllerDialog.cpp b/src/ui/dialog/controller/GnuPGControllerDialog.cpp index 4cdc4864..859c26aa 100644 --- a/src/ui/dialog/controller/GnuPGControllerDialog.cpp +++ b/src/ui/dialog/controller/GnuPGControllerDialog.cpp @@ -149,6 +149,18 @@ GnuPGControllerDialog::GnuPGControllerDialog(QWidget* parent) this->slot_set_restart_needed(kDeepRestartCode); }); + connect(ui_->keyDatabaseUseCustomCheckBox, &QCheckBox::stateChanged, this, + [=](int) { + // announce the restart + this->slot_set_restart_needed(kDeepRestartCode); + }); + + connect(ui_->useCustomGnuPGInstallPathCheckBox, &QCheckBox::stateChanged, + this, [=](int) { + // announce the restart + this->slot_set_restart_needed(kDeepRestartCode); + }); + #if defined(__APPLE__) && defined(__MACH__) // macOS style settings ui_->buttonBox->setDisabled(true);